diff --git a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/backup/BackupPrefsRepo.kt b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/backup/BackupPrefsRepo.kt index dabc5c1d28..edcda4f02c 100644 --- a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/backup/BackupPrefsRepo.kt +++ b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/backup/BackupPrefsRepo.kt @@ -8,6 +8,7 @@ import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Compani import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Companion.KEY_ACTIVITY_REMINDER_RECURRENT import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Companion.KEY_ALLOW_MULTIPLE_ACTIVITY_FILTERS import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Companion.KEY_ALLOW_MULTITASKING +import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Companion.KEY_ALWAYS_SHOW_WIDGET_ACTIVITY_COLORS import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Companion.KEY_AUTOMATED_TRACKING_RECEIVE_QUERIES import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Companion.KEY_AUTOMATED_TRACKING_SEND_EVENTS import com.example.util.simpletimetracker.data_local.prefs.PrefsRepoImpl.Companion.KEY_AUTOSTART_POMODORO_ACTIVITIES @@ -252,6 +253,7 @@ class BackupPrefsRepo @Inject constructor( PrefsProcessor(KEY_AUTOMATED_TRACKING_RECEIVE_QUERIES, ::automatedTrackingReceiveQueries), PrefsProcessor(KEY_REPEAT_BUTTON_TYPE, ::repeatButtonType), PrefsProcessor(KEY_WIDGET_TRANSPARENCY_PERCENT, ::widgetBackgroundTransparencyPercent), + PrefsProcessor(KEY_ALWAYS_SHOW_WIDGET_ACTIVITY_COLORS, ::alwaysShowWidgetActivityColors), PrefsProcessor(KEY_DEFAULT_TYPES_HIDDEN, ::defaultTypesHidden), PrefsProcessor(KEY_IS_NAV_BAR_AT_THE_BOTTOM, ::isNavBarAtTheBottom), PrefsProcessor(KEY_IS_CATEGORIES_SEARCH_ENABLED, ::isCategoriesSearchEnabled), diff --git a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/prefs/PrefsRepoImpl.kt b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/prefs/PrefsRepoImpl.kt index 59a4bc5183..28f9fd49fb 100644 --- a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/prefs/PrefsRepoImpl.kt +++ b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/prefs/PrefsRepoImpl.kt @@ -443,6 +443,10 @@ class PrefsRepoImpl @Inject constructor( KEY_WIDGET_TRANSPARENCY_PERCENT, 60, ) + override var alwaysShowWidgetActivityColors: Boolean by prefs.delegate( + KEY_ALWAYS_SHOW_WIDGET_ACTIVITY_COLORS, false, + ) + override var defaultTypesHidden: Boolean by prefs.delegate( KEY_DEFAULT_TYPES_HIDDEN, false, ) @@ -831,6 +835,7 @@ class PrefsRepoImpl @Inject constructor( const val KEY_AUTOMATED_TRACKING_RECEIVE_QUERIES = "automatedTrackingReceiveQueries" const val KEY_REPEAT_BUTTON_TYPE = "repeatButtonType" const val KEY_WIDGET_TRANSPARENCY_PERCENT = "widgetTransparencyPercent" + const val KEY_ALWAYS_SHOW_WIDGET_ACTIVITY_COLORS = "alwaysShowWidgetActivityColors" const val KEY_DEFAULT_TYPES_HIDDEN = "defaultTypesHidden" const val KEY_IS_NAV_BAR_AT_THE_BOTTOM = "isNavBarAtTheBottom" const val KEY_IS_CATEGORIES_SEARCH_ENABLED = "isCategoriesSearchEnabled" diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/notifications/interactor/UpdateExternalViewsInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/notifications/interactor/UpdateExternalViewsInteractor.kt index 337e463c10..a4ca84a72f 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/notifications/interactor/UpdateExternalViewsInteractor.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/notifications/interactor/UpdateExternalViewsInteractor.kt @@ -449,6 +449,13 @@ class UpdateExternalViewsInteractor @Inject constructor( ) } + suspend fun onWidgetActivityColorsChange() { + runUpdates( + Update.WidgetSingleTypes, + Update.WidgetGrid, + ) + } + suspend fun onShowUntrackedInStatisticsChange() { runUpdates( Update.WidgetStatistics, diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/prefs/interactor/PrefsInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/prefs/interactor/PrefsInteractor.kt index 768579977c..86ff1c9a83 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/prefs/interactor/PrefsInteractor.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/prefs/interactor/PrefsInteractor.kt @@ -1030,6 +1030,14 @@ class PrefsInteractor @Inject constructor( prefsRepo.widgetBackgroundTransparencyPercent } + suspend fun setAlwaysShowWidgetActivityColors(value: Boolean) = withContext(Dispatchers.IO) { + prefsRepo.alwaysShowWidgetActivityColors = value + } + + suspend fun getAlwaysShowWidgetActivityColors(): Boolean = withContext(Dispatchers.IO) { + prefsRepo.alwaysShowWidgetActivityColors + } + suspend fun getDefaultTypesHidden(): Boolean = withContext(Dispatchers.IO) { prefsRepo.defaultTypesHidden } diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/prefs/repo/PrefsRepo.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/prefs/repo/PrefsRepo.kt index c7d1431dba..d59ac0a10c 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/prefs/repo/PrefsRepo.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/prefs/repo/PrefsRepo.kt @@ -195,6 +195,8 @@ interface PrefsRepo { var widgetBackgroundTransparencyPercent: Long + var alwaysShowWidgetActivityColors: Boolean + var defaultTypesHidden: Boolean var isNavBarAtTheBottom: Boolean diff --git a/features/feature_settings/api/src/main/java/com/example/util/simpletimetracker/feature_settings/api/SettingsBlock.kt b/features/feature_settings/api/src/main/java/com/example/util/simpletimetracker/feature_settings/api/SettingsBlock.kt index e57fb9096e..18ec525b2c 100644 --- a/features/feature_settings/api/src/main/java/com/example/util/simpletimetracker/feature_settings/api/SettingsBlock.kt +++ b/features/feature_settings/api/src/main/java/com/example/util/simpletimetracker/feature_settings/api/SettingsBlock.kt @@ -64,6 +64,7 @@ enum class SettingsBlock { DisplayGoalsOnSeparateTabs, DisplayNavBarAtTheBottom, DisplayWidgetBackground, + DisplayWidgetActivityColors, DisplayMilitaryFormat, DisplayMonthDayFormat, DisplayDurationFormat, diff --git a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsDisplayViewDataInteractor.kt b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsDisplayViewDataInteractor.kt index 2ed3556012..0f33c61f77 100644 --- a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsDisplayViewDataInteractor.kt +++ b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsDisplayViewDataInteractor.kt @@ -184,6 +184,12 @@ class SettingsDisplayViewDataInteractor @Inject constructor( selectedPosition = widgetTransparencyViewData.selectedPosition, processSameItemSelected = false, ) + result += SettingsCheckboxViewData( + block = SettingsBlock.DisplayWidgetActivityColors, + title = resourceRepo.getString(R.string.settings_always_show_widget_activity_colors), + subtitle = resourceRepo.getString(R.string.settings_always_show_widget_activity_colors_hint), + isChecked = prefsInteractor.getAlwaysShowWidgetActivityColors(), + ) result += SettingsCheckboxViewData( block = SettingsBlock.DisplayMilitaryFormat, title = resourceRepo.getString(R.string.settings_use_military_time), diff --git a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/delegate/SettingsDisplayViewModelDelegate.kt b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/delegate/SettingsDisplayViewModelDelegate.kt index ac4546b4e1..db6ac4f05c 100644 --- a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/delegate/SettingsDisplayViewModelDelegate.kt +++ b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/delegate/SettingsDisplayViewModelDelegate.kt @@ -96,6 +96,7 @@ class SettingsDisplayViewModelDelegate @Inject constructor( SettingsBlock.DisplayMilitaryFormat -> onUseMilitaryTimeClicked() SettingsBlock.DisplayMonthDayFormat -> onUseMonthDayTimeClicked() SettingsBlock.DisplayShowSeconds -> onShowSecondsClicked() + SettingsBlock.DisplayWidgetActivityColors -> onWidgetActivityColorsClicked() else -> { // Do nothing } @@ -182,6 +183,15 @@ class SettingsDisplayViewModelDelegate @Inject constructor( } } + private fun onWidgetActivityColorsClicked() { + delegateScope.launch { + val newValue = !prefsInteractor.getAlwaysShowWidgetActivityColors() + prefsInteractor.setAlwaysShowWidgetActivityColors(newValue) + parent?.updateContent() + externalViewsInteractor.onWidgetActivityColorsChange() + } + } + private fun onRecordTypeOrderSelected(position: Int) { onOrderSelected( type = CardOrderDialogParams.Type.RecordType( diff --git a/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/grid/WidgetGridRemoveViewsFactory.kt b/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/grid/WidgetGridRemoveViewsFactory.kt index 50dded2656..cdd6e1e243 100644 --- a/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/grid/WidgetGridRemoveViewsFactory.kt +++ b/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/grid/WidgetGridRemoveViewsFactory.kt @@ -82,6 +82,7 @@ class WidgetGridRemoveViewsFactory @Inject constructor( val runningRecords = runningRecordInteractor.getAll() val isDarkTheme = prefsInteractor.getDarkMode() val backgroundTransparency = prefsInteractor.getWidgetBackgroundTransparencyPercent() + val alwaysShowActivityColors = prefsInteractor.getAlwaysShowWidgetActivityColors() val prevRecords = if (prefsInteractor.getRetroactiveTrackingMode()) { recordInteractor.getAllPrev(timeStarted = System.currentTimeMillis()) } else { @@ -156,6 +157,7 @@ class WidgetGridRemoveViewsFactory @Inject constructor( allDailyCurrents = allDailyCurrents, isDarkTheme = isDarkTheme, backgroundTransparency = backgroundTransparency, + alwaysShowActivityColors = alwaysShowActivityColors, ) } val row = getRow(context, items, gridSize) @@ -216,8 +218,10 @@ class WidgetGridRemoveViewsFactory @Inject constructor( allDailyCurrents: Map, isDarkTheme: Boolean, backgroundTransparency: Long, + alwaysShowActivityColors: Boolean, ): RemoteViews { val isColored = when { + alwaysShowActivityColors -> true runningRecord != null -> true prevRecord != null -> true else -> false diff --git a/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/single/WidgetSingleProvider.kt b/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/single/WidgetSingleProvider.kt index 08f2302309..1e9e86cc16 100644 --- a/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/single/WidgetSingleProvider.kt +++ b/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/single/WidgetSingleProvider.kt @@ -140,6 +140,7 @@ class WidgetSingleProvider : AppWidgetProvider() { val view: View val recordTypeId = prefsInteractor.getWidget(appWidgetId) val backgroundTransparency = prefsInteractor.getWidgetBackgroundTransparencyPercent() + val alwaysShowActivityColors = prefsInteractor.getAlwaysShowWidgetActivityColors() val retroactiveTrackingModeEnabled = prefsInteractor.getRetroactiveTrackingMode() val typeIds = typeIdsToUpdate if (typeIds.isNotEmpty() && recordTypeId !in typeIds) return@launch @@ -192,6 +193,7 @@ class WidgetSingleProvider : AppWidgetProvider() { emptyList() } val isColored = when { + alwaysShowActivityColors && recordType != null -> true runningRecord != null -> recordType != null prevRecord != null -> true else -> false diff --git a/resources/src/main/res/values/strings.xml b/resources/src/main/res/values/strings.xml index 43a7cb3fa6..d4dd0f64ce 100644 --- a/resources/src/main/res/values/strings.xml +++ b/resources/src/main/res/values/strings.xml @@ -346,6 +346,8 @@ This allows you to see how much time you\'re spending on productive versus unpro Reverse order of records Days in calendar Widget background transparency + Always show activity colors in widgets + Show activity colors even when inactive in the Grid and Single Activity widgets. Running activities display a timer. Show activity filters on main screen Allow multiple activity filters If disabled, selecting a filter will disable other activity filters.