Skip to content

Commit 030c49e

Browse files
committed
add setting to pomodoro to show more controls
1 parent f1cb898 commit 030c49e

44 files changed

Lines changed: 143 additions & 15 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

data_local/src/main/java/com/example/util/simpletimetracker/data_local/backup/BackupPrefsRepo.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Compani
8686
import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Companion.KEY_TAG_ORDER
8787
import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Companion.KEY_TAG_ORDER_MANUAL
8888
import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Companion.KEY_DURATION_PRESENTATION_FORMAT
89+
import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Companion.KEY_POMODORO_SHOW_MORE_CONTROLS
8990
import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Companion.KEY_TYPE_ADDITIONAL_FIELDS_SHOWN
9091
import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Companion.KEY_UNTRACKED_RANGE_ENABLED
9192
import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Companion.KEY_UNTRACKED_RANGE_END
@@ -192,6 +193,7 @@ class BackupPrefsRepo @Inject constructor(
192193
PrefsProcessor(KEY_POMODORO_BREAK_TIME, ::pomodoroBreakTime),
193194
PrefsProcessor(KEY_POMODORO_LONG_BREAK_TIME, ::pomodoroLongBreakTime),
194195
PrefsProcessor(KEY_POMODORO_PERIODS_UNTIL_LONG_BREAK, ::pomodoroPeriodsUntilLongBreak),
196+
PrefsProcessor(KEY_POMODORO_SHOW_MORE_CONTROLS, ::pomodoroShowMoreControls),
195197
PrefsProcessor(KEY_SHOW_GOALS_SEPARATELY, ::showGoalsSeparately),
196198
PrefsProcessor(KEY_ALLOW_MULTITASKING, ::allowMultitasking),
197199
PrefsProcessor(KEY_SHOW_NOTIFICATIONS, ::showNotifications),

data_local/src/main/java/com/example/util/simpletimetracker/data_local/prefs/PrefsRepoImpl.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,10 @@ class PrefsRepoImpl @Inject constructor(
229229
KEY_POMODORO_PERIODS_UNTIL_LONG_BREAK, POMODORO_DEFAULT_UNTIL_LONG_BREAK,
230230
)
231231

232+
override var pomodoroShowMoreControls: Boolean by prefs.delegate(
233+
KEY_POMODORO_SHOW_MORE_CONTROLS, false
234+
)
235+
232236
override var showGoalsSeparately: Boolean by prefs.delegate(
233237
KEY_SHOW_GOALS_SEPARATELY, false,
234238
)
@@ -600,6 +604,7 @@ class PrefsRepoImpl @Inject constructor(
600604
remove(KEY_POMODORO_BREAK_TIME)
601605
remove(KEY_POMODORO_LONG_BREAK_TIME)
602606
remove(KEY_POMODORO_PERIODS_UNTIL_LONG_BREAK)
607+
remove(KEY_POMODORO_SHOW_MORE_CONTROLS)
603608
}
604609
}
605610

@@ -664,6 +669,7 @@ class PrefsRepoImpl @Inject constructor(
664669
const val KEY_POMODORO_BREAK_TIME = "pomodoroBreakTime"
665670
const val KEY_POMODORO_LONG_BREAK_TIME = "pomodoroLongBreakTime"
666671
const val KEY_POMODORO_PERIODS_UNTIL_LONG_BREAK = "pomodoroPeriodsUntilLongBreak"
672+
const val KEY_POMODORO_SHOW_MORE_CONTROLS = "pomodoroShowMoreControls"
667673
const val KEY_ALLOW_MULTIPLE_ACTIVITY_FILTERS = "allowMultipleActivityFilters"
668674
const val KEY_SHOW_CATEGORIES_AS_PREDEFINED_FILTERS = "showCategoriesAsPredefinedFilters"
669675
const val KEY_SELECTED_PREDEFINED_FILTERS = "selectedPredefinedFilters"

domain/src/main/java/com/example/util/simpletimetracker/domain/prefs/interactor/PrefsInteractor.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,14 @@ class PrefsInteractor @Inject constructor(
431431
prefsRepo.pomodoroPeriodsUntilLongBreak = value
432432
}
433433

434+
suspend fun getPomodoroShowMoreControls(): Boolean = withContext(Dispatchers.IO) {
435+
prefsRepo.pomodoroShowMoreControls
436+
}
437+
438+
suspend fun setPomodoroShowMoreControls(value: Boolean) = withContext(Dispatchers.IO) {
439+
prefsRepo.pomodoroShowMoreControls = value
440+
}
441+
434442
suspend fun getAllowMultipleActivityFilters(): Boolean = withContext(Dispatchers.IO) {
435443
prefsRepo.allowMultipleActivityFilters
436444
}

domain/src/main/java/com/example/util/simpletimetracker/domain/prefs/repo/PrefsRepo.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ interface PrefsRepo {
8888

8989
var pomodoroPeriodsUntilLongBreak: Long // 0 - disabled
9090

91+
var pomodoroShowMoreControls: Boolean
92+
9193
var showGoalsSeparately: Boolean
9294

9395
var allowMultitasking: Boolean

features/feature_pomodoro/src/main/java/com/example/util/simpletimetracker/feature_pomodoro/settings/interactor/PomodoroSettingsViewDataInteractor.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.example.util.simpletimetracker.feature_base_adapter.hintBig.HintBigVi
99
import com.example.util.simpletimetracker.feature_pomodoro.R
1010
import com.example.util.simpletimetracker.feature_pomodoro.settings.model.PomodoroHintButtonType
1111
import com.example.util.simpletimetracker.feature_settings.api.SettingsBlock
12+
import com.example.util.simpletimetracker.feature_settings.views.SettingsCheckboxViewData
1213
import com.example.util.simpletimetracker.feature_settings.views.SettingsDurationViewData
1314
import com.example.util.simpletimetracker.feature_settings.views.SettingsSelectorViewData
1415
import javax.inject.Inject
@@ -96,6 +97,16 @@ class PomodoroSettingsViewDataInteractor @Inject constructor(
9697
backgroundIsVisible = false,
9798
)
9899

100+
result += SettingsCheckboxViewData(
101+
block = SettingsBlock.PomodoroShowMoreControls,
102+
title = resourceRepo.getString(R.string.pomodoro_settings_show_more_controls),
103+
subtitle = "",
104+
isChecked = prefsInteractor.getPomodoroShowMoreControls(),
105+
bottomSpaceIsVisible = true,
106+
dividerIsVisible = false,
107+
backgroundIsVisible = false,
108+
)
109+
99110
return result
100111
}
101112

features/feature_pomodoro/src/main/java/com/example/util/simpletimetracker/feature_pomodoro/settings/viewModel/PomodoroSettingsViewModel.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,10 @@ class PomodoroSettingsViewModel @Inject constructor(
5252
onBreakTimeClicked()
5353
SettingsBlock.PomodoroLongBreakTime ->
5454
onLongBreakTimeClicked()
55-
SettingsBlock.PomodoroPeriodsUntilLongBreak -> {
55+
SettingsBlock.PomodoroPeriodsUntilLongBreak ->
5656
onPeriodsUntilLongBreakClicked()
57-
}
57+
SettingsBlock.PomodoroShowMoreControls ->
58+
onShowMoreControlsClicked()
5859
else -> {
5960
// Do nothing.
6061
}
@@ -99,7 +100,6 @@ class PomodoroSettingsViewModel @Inject constructor(
99100
}
100101
BREAK_TIME_DURATION_DIALOG_TAG -> {
101102
prefsInteractor.setPomodoroBreakTime(0)
102-
updateContent()
103103
}
104104
LONG_BREAK_TIME_DURATION_DIALOG_TAG -> {
105105
prefsInteractor.setPomodoroLongBreakTime(0)
@@ -145,6 +145,12 @@ class PomodoroSettingsViewModel @Inject constructor(
145145
).let(router::navigate)
146146
}
147147

148+
private fun onShowMoreControlsClicked() = viewModelScope.launch {
149+
val newValue = !prefsInteractor.getPomodoroShowMoreControls()
150+
prefsInteractor.setPomodoroShowMoreControls(newValue)
151+
updateContent()
152+
}
153+
148154
private suspend fun updateContent() {
149155
content.set(loadContent())
150156
}

features/feature_pomodoro/src/main/java/com/example/util/simpletimetracker/feature_pomodoro/timer/mapper/PomodoroViewDataMapper.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class PomodoroViewDataMapper @Inject constructor(
1818
) {
1919

2020
fun mapButtonState(
21+
showMoreControls: Boolean,
2122
state: GetPomodoroStateInteractor.State,
2223
): PomodoroButtonState {
2324
val isStarted = state is GetPomodoroStateInteractor.State.Running
@@ -26,10 +27,26 @@ class PomodoroViewDataMapper @Inject constructor(
2627
} else {
2728
R.drawable.button_play
2829
}
30+
val buttonsOrder = if (showMoreControls) {
31+
listOf(
32+
PomodoroButtonState.Button.Prev,
33+
PomodoroButtonState.Button.Start,
34+
PomodoroButtonState.Button.Next,
35+
PomodoroButtonState.Button.Restart,
36+
PomodoroButtonState.Button.Pause,
37+
)
38+
} else {
39+
listOf(
40+
PomodoroButtonState.Button.Restart,
41+
PomodoroButtonState.Button.Start,
42+
PomodoroButtonState.Button.Next,
43+
)
44+
}
2945

3046
return PomodoroButtonState(
3147
iconResId = iconResId,
3248
additionalButtonsVisible = isStarted,
49+
buttonsOrder = buttonsOrder,
3350
)
3451
}
3552

features/feature_pomodoro/src/main/java/com/example/util/simpletimetracker/feature_pomodoro/timer/model/PomodoroButtonState.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,15 @@ import androidx.annotation.DrawableRes
44

55
data class PomodoroButtonState(
66
@DrawableRes val iconResId: Int,
7+
val buttonsOrder: List<Button>,
78
val additionalButtonsVisible: Boolean,
8-
)
9+
) {
10+
11+
sealed interface Button {
12+
data object Start : Button
13+
data object Restart : Button
14+
data object Pause : Button
15+
data object Prev : Button
16+
data object Next : Button
17+
}
18+
}

features/feature_pomodoro/src/main/java/com/example/util/simpletimetracker/feature_pomodoro/timer/view/PomodoroFragment.kt

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ package com.example.util.simpletimetracker.feature_pomodoro.timer.view
22

33
import android.animation.ValueAnimator
44
import android.view.LayoutInflater
5+
import android.view.View
56
import android.view.ViewGroup
67
import android.view.animation.LinearInterpolator
78
import androidx.core.view.isInvisible
9+
import androidx.core.view.isVisible
810
import androidx.fragment.app.viewModels
911
import com.example.util.simpletimetracker.core.base.BaseFragment
1012
import com.example.util.simpletimetracker.core.utils.InsetConfiguration
@@ -38,11 +40,9 @@ class PomodoroFragment : BaseFragment<Binding>() {
3840
btnPomodoroNext.setOnClick(viewModel::onNextClicked)
3941
}
4042

41-
override fun initViewModel() = with(binding) {
42-
with(viewModel) {
43-
buttonState.observe(::setButtonState)
44-
timerState.observe(::setTimerState)
45-
}
43+
override fun initViewModel() = with(viewModel) {
44+
buttonState.observe(::setButtonState)
45+
timerState.observe(::setTimerState)
4646
}
4747

4848
override fun onResume() {
@@ -57,10 +57,24 @@ class PomodoroFragment : BaseFragment<Binding>() {
5757

5858
private fun setButtonState(state: PomodoroButtonState) = with(binding) {
5959
ivPomodoroButton.setImageResource(state.iconResId)
60-
btnPomodoroRestart.isInvisible = !state.additionalButtonsVisible
61-
btnPomodoroPause.isInvisible = !state.additionalButtonsVisible
62-
btnPomodoroPrev.isInvisible = !state.additionalButtonsVisible
63-
btnPomodoroNext.isInvisible = !state.additionalButtonsVisible
60+
61+
flowPomodoroMainButtons.referencedIds = state.buttonsOrder
62+
.map { mapToView(it).id }
63+
.toIntArray()
64+
65+
listOf(
66+
PomodoroButtonState.Button.Restart,
67+
PomodoroButtonState.Button.Pause,
68+
PomodoroButtonState.Button.Prev,
69+
PomodoroButtonState.Button.Next,
70+
).forEach {
71+
if (it in state.buttonsOrder) {
72+
// Invisible to preserve Start button position.
73+
mapToView(it).isInvisible = !state.additionalButtonsVisible
74+
} else {
75+
mapToView(it).isVisible = false
76+
}
77+
}
6478
}
6579

6680
private fun setTimerState(state: PomodoroTimerState) = with(binding) {
@@ -86,4 +100,14 @@ class PomodoroFragment : BaseFragment<Binding>() {
86100
start()
87101
}
88102
}
103+
104+
private fun mapToView(button: PomodoroButtonState.Button): View = with(binding) {
105+
return@with when (button) {
106+
is PomodoroButtonState.Button.Start -> btnPomodoroStart
107+
is PomodoroButtonState.Button.Restart -> btnPomodoroRestart
108+
is PomodoroButtonState.Button.Pause -> btnPomodoroPause
109+
is PomodoroButtonState.Button.Prev -> btnPomodoroPrev
110+
is PomodoroButtonState.Button.Next -> btnPomodoroNext
111+
}
112+
}
89113
}

features/feature_pomodoro/src/main/java/com/example/util/simpletimetracker/feature_pomodoro/timer/viewModel/PomodoroViewModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ class PomodoroViewModel @Inject constructor(
119119

120120
private suspend fun loadButtonState(): PomodoroButtonState {
121121
return pomodoroViewDataMapper.mapButtonState(
122+
showMoreControls = prefsInteractor.getPomodoroShowMoreControls(),
122123
state = getPomodoroStateInteractor.execute(),
123124
)
124125
}

0 commit comments

Comments
 (0)