Skip to content

Commit 6f666d9

Browse files
committed
add hint about retroactive multitasking
1 parent 0267ede commit 6f666d9

34 files changed

Lines changed: 112 additions & 4 deletions

File tree

core/src/main/res/values/non_translatable.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<string name="debug_menu" translatable="false">Debug menu</string>
2121
<string name="debug_menu_reset_prefs" translatable="false">Clear all preferences (requires app restart)</string>
2222
<string name="debug_menu_reset_hide_default_types" translatable="false">Clear \"Hide default types\" preference</string>
23+
<string name="debug_menu_reset_hide_retroactive_multitasking_hint" translatable="false">Clear \"Retroactive multitasking hint was hidden\" preference</string>
2324
<string name="debug_menu_reset_pomodoro_settings" translatable="false">Clear Pomodoro preferences</string>
2425
<string name="debug_menu_hide_message" translatable="false">Success</string>
2526

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,10 @@ class PrefsRepoImpl @Inject constructor(
144144
KEY_RETROACTIVE_TRACKING_MODE, false,
145145
)
146146

147+
override var retroactiveMultitaskingHintWasHidden: Boolean by prefs.delegate(
148+
KEY_RETROACTIVE_MULTITASKING_HINT_WAS_HIDDEN, false,
149+
)
150+
147151
override var firstDayOfWeek: Int by prefs.delegate(
148152
KEY_FIRST_DAY_OF_WEEK, firstDayOfWeekDefault,
149153
)
@@ -543,6 +547,10 @@ class PrefsRepoImpl @Inject constructor(
543547
prefs.edit().remove(KEY_DEFAULT_TYPES_HIDDEN).apply()
544548
}
545549

550+
override fun clearRetroactiveMultitaskingHidden() {
551+
prefs.edit().remove(KEY_RETROACTIVE_MULTITASKING_HINT_WAS_HIDDEN).apply()
552+
}
553+
546554
override fun clearPomodoroSettingsClick() {
547555
prefs.edit().remove(KEY_POMODORO_FOCUS_TIME).apply()
548556
prefs.edit().remove(KEY_POMODORO_BREAK_TIME).apply()
@@ -591,6 +599,7 @@ class PrefsRepoImpl @Inject constructor(
591599
const val KEY_ICS_EXPORT_CUSTOM_FILENAME = "icsExportCustomFilename"
592600
const val KEY_KEEP_STATISTICS_RANGE = "keepStatisticsRange"
593601
const val KEY_RETROACTIVE_TRACKING_MODE = "retroactiveTrackingMode"
602+
const val KEY_RETROACTIVE_MULTITASKING_HINT_WAS_HIDDEN = "retroactiveMultitaskingHintWasHidden"
594603
const val KEY_FIRST_DAY_OF_WEEK = "firstDayOfWeek"
595604
const val KEY_START_OF_DAY_SHIFT = "startOfDayShift"
596605
const val KEY_SHOW_UNTRACKED_IN_RECORDS = "showUntrackedInRecords"

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,14 @@ class PrefsInteractor @Inject constructor(
250250
prefsRepo.retroactiveTrackingMode = isEnabled
251251
}
252252

253+
suspend fun getRetroactiveMultitaskingHintWasHidden(): Boolean = withContext(Dispatchers.IO) {
254+
prefsRepo.retroactiveMultitaskingHintWasHidden
255+
}
256+
257+
suspend fun setRetroactiveMultitaskingHintWasHidden(isEnabled: Boolean) = withContext(Dispatchers.IO) {
258+
prefsRepo.retroactiveMultitaskingHintWasHidden = isEnabled
259+
}
260+
253261
suspend fun getFirstDayOfWeek(): DayOfWeek = withContext(Dispatchers.IO) {
254262
// Same as in java Calendar
255263
when (prefsRepo.firstDayOfWeek) {
@@ -875,6 +883,10 @@ class PrefsInteractor @Inject constructor(
875883
prefsRepo.clearDefaultTypesHidden()
876884
}
877885

886+
suspend fun clearRetroactiveMultitaskingHidden() = withContext(Dispatchers.IO) {
887+
prefsRepo.clearRetroactiveMultitaskingHidden()
888+
}
889+
878890
suspend fun clearPomodoroSettingsClick() = withContext(Dispatchers.IO) {
879891
prefsRepo.clearPomodoroSettingsClick()
880892
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ interface PrefsRepo {
4646

4747
var retroactiveTrackingMode: Boolean
4848

49+
var retroactiveMultitaskingHintWasHidden: Boolean
50+
4951
var firstDayOfWeek: Int
5052

5153
var startOfDayShift: Long // in milliseconds
@@ -190,6 +192,7 @@ interface PrefsRepo {
190192

191193
fun clear()
192194
fun clearDefaultTypesHidden()
195+
fun clearRetroactiveMultitaskingHidden()
193196
fun clearPomodoroSettingsClick()
194197

195198
fun hasValueSaved(key: String): Boolean

features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/debugMenu/DebugMenuDialogFragment.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,13 @@ class DebugMenuDialogFragment : BaseBottomSheetFragment<Binding>() {
2424
}
2525

2626
override fun initUx(): Unit = with(binding) {
27-
tvDebugMenuResetPrefs.setOnClick(viewModel::onResetPrefsClicked)
28-
tvDebugMenuResetHideDefaultTypes.setOnClick(viewModel::onResetHideDefaultTypesClick)
29-
tvDebugMenuResetPomodoroSettings.setOnClick(viewModel::onResetPomodoroSettingsClick)
27+
tvDebugMenuResetPrefs
28+
.setOnClick(viewModel::onResetPrefsClicked)
29+
tvDebugMenuResetHideDefaultTypes
30+
.setOnClick(viewModel::onResetHideDefaultTypesClick)
31+
tvDebugMenuResetHideRetroactiveMultitasking
32+
.setOnClick(viewModel::onResetHideRetroactiveMultitaskingClick)
33+
tvDebugMenuResetPomodoroSettings
34+
.setOnClick(viewModel::onResetPomodoroSettingsClick)
3035
}
3136
}

features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/debugMenu/DebugMenuViewModel.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ class DebugMenuViewModel @Inject constructor(
3232
}
3333
}
3434

35+
fun onResetHideRetroactiveMultitaskingClick() {
36+
viewModelScope.launch {
37+
prefsInteractor.clearRetroactiveMultitaskingHidden()
38+
showSuccessMessage()
39+
}
40+
}
41+
3542
fun onResetPomodoroSettingsClick() {
3643
viewModelScope.launch {
3744
prefsInteractor.clearPomodoroSettingsClick()

features/feature_dialogs/src/main/res/layout/debug_menu_dialog_fragment.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,16 @@
5454
android:text="@string/debug_menu_reset_hide_default_types"
5555
android:textColor="?appTextPrimaryColor" />
5656

57+
<androidx.appcompat.widget.AppCompatTextView
58+
android:id="@+id/tvDebugMenuResetHideRetroactiveMultitasking"
59+
android:layout_width="match_parent"
60+
android:layout_height="wrap_content"
61+
android:layout_marginHorizontal="8dp"
62+
android:background="?selectableItemBackground"
63+
android:padding="8dp"
64+
android:text="@string/debug_menu_reset_hide_retroactive_multitasking_hint"
65+
android:textColor="?appTextPrimaryColor" />
66+
5767
<androidx.appcompat.widget.AppCompatTextView
5868
android:id="@+id/tvDebugMenuResetPomodoroSettings"
5969
android:layout_width="match_parent"

features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/view/RunningRecordsFragment.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import androidx.fragment.app.viewModels
77
import com.example.util.simpletimetracker.core.base.BaseFragment
88
import com.example.util.simpletimetracker.core.di.BaseViewModelFactory
99
import com.example.util.simpletimetracker.core.dialog.OnTagSelectedListener
10+
import com.example.util.simpletimetracker.core.dialog.StandardDialogListener
1011
import com.example.util.simpletimetracker.core.sharedViewModel.MainTabsViewModel
1112
import com.example.util.simpletimetracker.core.utils.InsetConfiguration
1213
import com.example.util.simpletimetracker.core.utils.doOnApplyWindowInsetsListener
@@ -41,7 +42,8 @@ import com.example.util.simpletimetracker.feature_running_records.databinding.Ru
4142
@AndroidEntryPoint
4243
class RunningRecordsFragment :
4344
BaseFragment<Binding>(),
44-
OnTagSelectedListener {
45+
OnTagSelectedListener,
46+
StandardDialogListener {
4547

4648
override val inflater: (LayoutInflater, ViewGroup?, Boolean) -> Binding =
4749
Binding::inflate
@@ -135,6 +137,10 @@ class RunningRecordsFragment :
135137
viewModel.onTagSelected()
136138
}
137139

140+
override fun onPositiveClick(tag: String?, data: Any?) {
141+
viewModel.onPositiveClick(tag)
142+
}
143+
138144
private fun resetScreen() = with(binding) {
139145
rvRunningRecordsList.smoothScrollToPosition(0)
140146
mainTabsViewModel.onHandled()

features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/viewModel/RunningRecordsViewModel.kt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.example.util.simpletimetracker.core.extension.toParams
1010
import com.example.util.simpletimetracker.core.interactor.GetChangeRecordNavigationParamsInteractor
1111
import com.example.util.simpletimetracker.core.interactor.RecordRepeatInteractor
1212
import com.example.util.simpletimetracker.core.model.NavigationTab
13+
import com.example.util.simpletimetracker.core.repo.ResourceRepo
1314
import com.example.util.simpletimetracker.domain.extension.orZero
1415
import com.example.util.simpletimetracker.domain.record.interactor.AddRunningRecordMediator
1516
import com.example.util.simpletimetracker.domain.activityFilter.interactor.ChangeSelectedActivityFilterMediator
@@ -30,6 +31,7 @@ import com.example.util.simpletimetracker.feature_base_adapter.recordType.Record
3031
import com.example.util.simpletimetracker.feature_base_adapter.recordTypeSpecial.RunningRecordTypeSpecialViewData
3132
import com.example.util.simpletimetracker.feature_base_adapter.recordWithHint.RecordWithHintViewData
3233
import com.example.util.simpletimetracker.feature_base_adapter.runningRecord.RunningRecordViewData
34+
import com.example.util.simpletimetracker.feature_running_records.R
3335
import com.example.util.simpletimetracker.feature_running_records.interactor.RunningRecordsViewDataInteractor
3436
import com.example.util.simpletimetracker.navigation.Router
3537
import com.example.util.simpletimetracker.navigation.params.screen.ChangeActivityFilterParams
@@ -41,6 +43,7 @@ import com.example.util.simpletimetracker.navigation.params.screen.ChangeRunning
4143
import com.example.util.simpletimetracker.navigation.params.screen.DefaultTypesSelectionDialogParams
4244
import com.example.util.simpletimetracker.navigation.params.screen.PomodoroParams
4345
import com.example.util.simpletimetracker.navigation.params.screen.RecordTagSelectionParams
46+
import com.example.util.simpletimetracker.navigation.params.screen.StandardDialogParams
4447
import dagger.hilt.android.lifecycle.HiltViewModel
4548
import kotlinx.coroutines.Job
4649
import kotlinx.coroutines.cancelAndJoin
@@ -52,6 +55,7 @@ import javax.inject.Inject
5255
@HiltViewModel
5356
class RunningRecordsViewModel @Inject constructor(
5457
private val router: Router,
58+
private val resourceRepo: ResourceRepo,
5559
private val addRunningRecordMediator: AddRunningRecordMediator,
5660
private val removeRunningRecordMediator: RemoveRunningRecordMediator,
5761
private val runningRecordInteractor: RunningRecordInteractor,
@@ -268,6 +272,7 @@ class RunningRecordsViewModel @Inject constructor(
268272

269273
fun onVisible() {
270274
startUpdate()
275+
checkForRetroActiveMultitaskHint()
271276
}
272277

273278
fun onHidden() {
@@ -291,6 +296,14 @@ class RunningRecordsViewModel @Inject constructor(
291296
}
292297
}
293298

299+
fun onPositiveClick(tag: String?) = viewModelScope.launch {
300+
when (tag) {
301+
RETRO_MULTITASKING_HINT_TAG -> {
302+
prefsInteractor.setRetroactiveMultitaskingHintWasHidden(true)
303+
}
304+
}
305+
}
306+
294307
private suspend fun onRecordTypeWithDefaultDurationClick(typeId: Long) {
295308
val defaultDuration = recordTypeInteractor.get(typeId)?.defaultDuration
296309
if (defaultDuration.orZero() <= 0L) return
@@ -311,6 +324,22 @@ class RunningRecordsViewModel @Inject constructor(
311324
router.navigate(RecordTagSelectionParams(typeId, result.toParams()))
312325
}
313326

327+
private fun checkForRetroActiveMultitaskHint() = viewModelScope.launch {
328+
val needToShow = !prefsInteractor.getRetroactiveMultitaskingHintWasHidden() &&
329+
prefsInteractor.getRetroactiveTrackingMode() &&
330+
prefsInteractor.getAllowMultitasking()
331+
332+
if (needToShow) {
333+
router.navigate(
334+
StandardDialogParams(
335+
tag = RETRO_MULTITASKING_HINT_TAG,
336+
message = resourceRepo.getString(R.string.settings_retroactive_multitasking_hint),
337+
btnPositive = resourceRepo.getString(R.string.ok),
338+
),
339+
)
340+
}
341+
}
342+
314343
private fun subscribeToUpdates() {
315344
viewModelScope.launch {
316345
updateRunningRecordFromChangeScreenInteractor.dataUpdated.collect { onUpdateReceived(it) }
@@ -357,5 +386,6 @@ class RunningRecordsViewModel @Inject constructor(
357386
companion object {
358387
private const val TIMER_UPDATE_MS = 1000L
359388
private const val COMPLETE_TYPE_ANIMATION_MS = 1000L
389+
private const val RETRO_MULTITASKING_HINT_TAG = "RETRO_MULTITASKING_HINT_TAG"
360390
}
361391
}

resources/src/main/res/values-ar/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@
313313
<string name="settings_keep_statistics_range_hint">في حال التفعيل، ستفتح الإحصائيات التفصيلية بنفس النطاق الزمني المحدد في الإحصائيات.</string>
314314
<string name="settings_retroactive_tracking_mode">تمكين تتبع الوقت بأثر رجعي</string>
315315
<string name="settings_retroactive_tracking_mode_hint">تتبع الوقت عن طريق تحديد النشاط الذي تم القيام به منذ المرة الأخيرة بدلاً من تحديد النشاط الذي سيتم القيام به من الآن.</string>
316+
<string name="settings_retroactive_multitasking_hint">تم تفعيل تعدد المهام. سيتم أيضًا تتبع جميع الأنشطة الأخيرة عند تتبع نشاط ما.</string>
316317
<string name="settings_start_of_day">توقيت بداية اليوم</string>
317318
<string name="settings_start_of_day_hint">سيتم تحويل بداية اليوم بمقدار الوقت المحدد ، للأمام أو للخلف حسب العلامة.</string>
318319
<string name="settings_start_of_day_hint_value">يبدأ اليوم في %s</string>

0 commit comments

Comments
 (0)