refactor: rename "preferences" to "settings" to maintain consistency

This commit is contained in:
Nishant Mishra
2025-11-09 09:17:55 +05:30
parent f4fa16b5df
commit 538c984d40
7 changed files with 62 additions and 52 deletions

View File

@@ -50,15 +50,15 @@ class MainActivity : ComponentActivity() {
} }
setContent { setContent {
val preferencesState by settingsViewModel.preferencesState.collectAsStateWithLifecycle() val settingsState by settingsViewModel.settingsState.collectAsStateWithLifecycle()
val darkTheme = when (preferencesState.theme) { val darkTheme = when (settingsState.theme) {
"dark" -> true "dark" -> true
"light" -> false "light" -> false
else -> isSystemInDarkTheme() else -> isSystemInDarkTheme()
} }
val seed = preferencesState.colorScheme.toColor() val seed = settingsState.colorScheme.toColor()
val isPlus by settingsViewModel.isPlus.collectAsStateWithLifecycle() val isPlus by settingsViewModel.isPlus.collectAsStateWithLifecycle()
val isPurchaseStateLoaded by settingsViewModel.isPurchaseStateLoaded.collectAsStateWithLifecycle() val isPurchaseStateLoaded by settingsViewModel.isPurchaseStateLoaded.collectAsStateWithLifecycle()
@@ -77,7 +77,7 @@ class MainActivity : ComponentActivity() {
TomatoTheme( TomatoTheme(
darkTheme = darkTheme, darkTheme = darkTheme,
seedColor = seed, seedColor = seed,
blackTheme = preferencesState.blackTheme blackTheme = settingsState.blackTheme
) { ) {
val colorScheme = colorScheme val colorScheme = colorScheme
LaunchedEffect(colorScheme) { LaunchedEffect(colorScheme) {
@@ -86,7 +86,7 @@ class MainActivity : ComponentActivity() {
AppScreen( AppScreen(
isPlus = isPlus, isPlus = isPlus,
isAODEnabled = preferencesState.aodEnabled, isAODEnabled = settingsState.aodEnabled,
setTimerFrequency = { setTimerFrequency = {
appContainer.appTimerRepository.timerFrequency = it appContainer.appTimerRepository.timerFrequency = it
} }

View File

@@ -73,8 +73,8 @@ import org.nsh07.pomodoro.ui.settingsScreen.components.PlusPromo
import org.nsh07.pomodoro.ui.settingsScreen.screens.AlarmSettings import org.nsh07.pomodoro.ui.settingsScreen.screens.AlarmSettings
import org.nsh07.pomodoro.ui.settingsScreen.screens.AppearanceSettings import org.nsh07.pomodoro.ui.settingsScreen.screens.AppearanceSettings
import org.nsh07.pomodoro.ui.settingsScreen.screens.TimerSettings import org.nsh07.pomodoro.ui.settingsScreen.screens.TimerSettings
import org.nsh07.pomodoro.ui.settingsScreen.viewModel.PreferencesState
import org.nsh07.pomodoro.ui.settingsScreen.viewModel.SettingsAction import org.nsh07.pomodoro.ui.settingsScreen.viewModel.SettingsAction
import org.nsh07.pomodoro.ui.settingsScreen.viewModel.SettingsState
import org.nsh07.pomodoro.ui.settingsScreen.viewModel.SettingsViewModel import org.nsh07.pomodoro.ui.settingsScreen.viewModel.SettingsViewModel
import org.nsh07.pomodoro.ui.settingsScreens import org.nsh07.pomodoro.ui.settingsScreens
import org.nsh07.pomodoro.ui.theme.AppFonts.robotoFlexTopBar import org.nsh07.pomodoro.ui.theme.AppFonts.robotoFlexTopBar
@@ -106,7 +106,7 @@ fun SettingsScreenRoot(
val dndEnabled by viewModel.dndEnabled.collectAsStateWithLifecycle(false) val dndEnabled by viewModel.dndEnabled.collectAsStateWithLifecycle(false)
val alarmSound by viewModel.alarmSound.collectAsStateWithLifecycle(viewModel.currentAlarmSound) val alarmSound by viewModel.alarmSound.collectAsStateWithLifecycle(viewModel.currentAlarmSound)
val preferencesState by viewModel.preferencesState.collectAsStateWithLifecycle() val settingsState by viewModel.settingsState.collectAsStateWithLifecycle()
val sessionsSliderState = rememberSaveable( val sessionsSliderState = rememberSaveable(
saver = SliderState.Saver( saver = SliderState.Saver(
@@ -119,7 +119,7 @@ fun SettingsScreenRoot(
SettingsScreen( SettingsScreen(
isPlus = isPlus, isPlus = isPlus,
preferencesState = preferencesState, settingsState = settingsState,
backStack = backStack, backStack = backStack,
focusTimeInputFieldState = focusTimeInputFieldState, focusTimeInputFieldState = focusTimeInputFieldState,
shortBreakTimeInputFieldState = shortBreakTimeInputFieldState, shortBreakTimeInputFieldState = shortBreakTimeInputFieldState,
@@ -140,7 +140,7 @@ fun SettingsScreenRoot(
@Composable @Composable
private fun SettingsScreen( private fun SettingsScreen(
isPlus: Boolean, isPlus: Boolean,
preferencesState: PreferencesState, settingsState: SettingsState,
backStack: SnapshotStateList<Screen.Settings>, backStack: SnapshotStateList<Screen.Settings>,
focusTimeInputFieldState: TextFieldState, focusTimeInputFieldState: TextFieldState,
shortBreakTimeInputFieldState: TextFieldState, shortBreakTimeInputFieldState: TextFieldState,
@@ -287,7 +287,7 @@ private fun SettingsScreen(
entry<Screen.Settings.Alarm> { entry<Screen.Settings.Alarm> {
AlarmSettings( AlarmSettings(
preferencesState = preferencesState, settingsState = settingsState,
alarmEnabled = alarmEnabled, alarmEnabled = alarmEnabled,
vibrateEnabled = vibrateEnabled, vibrateEnabled = vibrateEnabled,
alarmSound = alarmSound, alarmSound = alarmSound,
@@ -297,7 +297,7 @@ private fun SettingsScreen(
} }
entry<Screen.Settings.Appearance> { entry<Screen.Settings.Appearance> {
AppearanceSettings( AppearanceSettings(
preferencesState = preferencesState, settingsState = settingsState,
isPlus = isPlus, isPlus = isPlus,
onAction = onAction, onAction = onAction,
setShowPaywall = setShowPaywall, setShowPaywall = setShowPaywall,
@@ -307,7 +307,7 @@ private fun SettingsScreen(
entry<Screen.Settings.Timer> { entry<Screen.Settings.Timer> {
TimerSettings( TimerSettings(
isPlus = isPlus, isPlus = isPlus,
aodEnabled = preferencesState.aodEnabled, aodEnabled = settingsState.aodEnabled,
dndEnabled = dndEnabled, dndEnabled = dndEnabled,
focusTimeInputFieldState = focusTimeInputFieldState, focusTimeInputFieldState = focusTimeInputFieldState,
shortBreakTimeInputFieldState = shortBreakTimeInputFieldState, shortBreakTimeInputFieldState = shortBreakTimeInputFieldState,

View File

@@ -65,8 +65,8 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.nsh07.pomodoro.R import org.nsh07.pomodoro.R
import org.nsh07.pomodoro.ui.settingsScreen.SettingsSwitchItem import org.nsh07.pomodoro.ui.settingsScreen.SettingsSwitchItem
import org.nsh07.pomodoro.ui.settingsScreen.viewModel.PreferencesState
import org.nsh07.pomodoro.ui.settingsScreen.viewModel.SettingsAction import org.nsh07.pomodoro.ui.settingsScreen.viewModel.SettingsAction
import org.nsh07.pomodoro.ui.settingsScreen.viewModel.SettingsState
import org.nsh07.pomodoro.ui.theme.AppFonts.robotoFlexTopBar import org.nsh07.pomodoro.ui.theme.AppFonts.robotoFlexTopBar
import org.nsh07.pomodoro.ui.theme.CustomColors.listItemColors import org.nsh07.pomodoro.ui.theme.CustomColors.listItemColors
import org.nsh07.pomodoro.ui.theme.CustomColors.switchColors import org.nsh07.pomodoro.ui.theme.CustomColors.switchColors
@@ -78,7 +78,7 @@ import org.nsh07.pomodoro.ui.theme.TomatoShapeDefaults.topListItemShape
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) @OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)
@Composable @Composable
fun AlarmSettings( fun AlarmSettings(
preferencesState: PreferencesState, settingsState: SettingsState,
alarmEnabled: Boolean, alarmEnabled: Boolean,
vibrateEnabled: Boolean, vibrateEnabled: Boolean,
alarmSound: String, alarmSound: String,
@@ -126,8 +126,8 @@ fun AlarmSettings(
} }
val switchItems = remember( val switchItems = remember(
preferencesState.blackTheme, settingsState.blackTheme,
preferencesState.aodEnabled, settingsState.aodEnabled,
alarmEnabled, alarmEnabled,
vibrateEnabled vibrateEnabled
) { ) {
@@ -242,9 +242,9 @@ fun AlarmSettings(
@Preview @Preview
@Composable @Composable
fun AlarmSettingsPreview() { fun AlarmSettingsPreview() {
val preferencesState = PreferencesState() val settingsState = SettingsState()
AlarmSettings( AlarmSettings(
preferencesState = preferencesState, settingsState = settingsState,
alarmEnabled = true, alarmEnabled = true,
vibrateEnabled = false, vibrateEnabled = false,
alarmSound = "", alarmSound = "",

View File

@@ -49,8 +49,8 @@ import org.nsh07.pomodoro.ui.settingsScreen.SettingsSwitchItem
import org.nsh07.pomodoro.ui.settingsScreen.components.ColorSchemePickerListItem import org.nsh07.pomodoro.ui.settingsScreen.components.ColorSchemePickerListItem
import org.nsh07.pomodoro.ui.settingsScreen.components.PlusDivider import org.nsh07.pomodoro.ui.settingsScreen.components.PlusDivider
import org.nsh07.pomodoro.ui.settingsScreen.components.ThemePickerListItem import org.nsh07.pomodoro.ui.settingsScreen.components.ThemePickerListItem
import org.nsh07.pomodoro.ui.settingsScreen.viewModel.PreferencesState
import org.nsh07.pomodoro.ui.settingsScreen.viewModel.SettingsAction import org.nsh07.pomodoro.ui.settingsScreen.viewModel.SettingsAction
import org.nsh07.pomodoro.ui.settingsScreen.viewModel.SettingsState
import org.nsh07.pomodoro.ui.theme.AppFonts.robotoFlexTopBar import org.nsh07.pomodoro.ui.theme.AppFonts.robotoFlexTopBar
import org.nsh07.pomodoro.ui.theme.CustomColors.listItemColors import org.nsh07.pomodoro.ui.theme.CustomColors.listItemColors
import org.nsh07.pomodoro.ui.theme.CustomColors.switchColors import org.nsh07.pomodoro.ui.theme.CustomColors.switchColors
@@ -62,7 +62,7 @@ import org.nsh07.pomodoro.utils.toColor
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) @OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)
@Composable @Composable
fun AppearanceSettings( fun AppearanceSettings(
preferencesState: PreferencesState, settingsState: SettingsState,
isPlus: Boolean, isPlus: Boolean,
onAction: (SettingsAction) -> Unit, onAction: (SettingsAction) -> Unit,
setShowPaywall: (Boolean) -> Unit, setShowPaywall: (Boolean) -> Unit,
@@ -103,7 +103,7 @@ fun AppearanceSettings(
} }
item { item {
ThemePickerListItem( ThemePickerListItem(
theme = preferencesState.theme, theme = settingsState.theme,
onThemeChange = { onAction(SettingsAction.SaveTheme(it)) }, onThemeChange = { onAction(SettingsAction.SaveTheme(it)) },
items = if (isPlus) 3 else 1, items = if (isPlus) 3 else 1,
index = 0 index = 0
@@ -116,7 +116,7 @@ fun AppearanceSettings(
item { item {
ColorSchemePickerListItem( ColorSchemePickerListItem(
color = preferencesState.colorScheme.toColor(), color = settingsState.colorScheme.toColor(),
items = 3, items = 3,
index = if (isPlus) 1 else 0, index = if (isPlus) 1 else 0,
isPlus = isPlus, isPlus = isPlus,
@@ -125,7 +125,7 @@ fun AppearanceSettings(
} }
item { item {
val item = SettingsSwitchItem( val item = SettingsSwitchItem(
checked = preferencesState.blackTheme, checked = settingsState.blackTheme,
icon = R.drawable.contrast, icon = R.drawable.contrast,
label = R.string.black_theme, label = R.string.black_theme,
description = R.string.black_theme_desc, description = R.string.black_theme_desc,
@@ -173,10 +173,10 @@ fun AppearanceSettings(
@Preview @Preview
@Composable @Composable
fun AppearanceSettingsPreview() { fun AppearanceSettingsPreview() {
val preferencesState = PreferencesState() val settingsState = SettingsState()
TomatoTheme(dynamicColor = false) { TomatoTheme(dynamicColor = false) {
AppearanceSettings( AppearanceSettings(
preferencesState = preferencesState, settingsState = settingsState,
isPlus = false, isPlus = false,
onAction = {}, onAction = {},
setShowPaywall = {}, setShowPaywall = {},

View File

@@ -1,19 +0,0 @@
/*
* Copyright (c) 2025 Nishant Mishra
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.nsh07.pomodoro.ui.settingsScreen.viewModel
import androidx.compose.runtime.Immutable
import androidx.compose.ui.graphics.Color
@Immutable
data class PreferencesState(
val theme: String = "auto",
val colorScheme: String = Color.White.toString(),
val blackTheme: Boolean = false,
val aodEnabled: Boolean = false
)

View File

@@ -0,0 +1,29 @@
/*
* Copyright (c) 2025 Nishant Mishra
*
* This file is part of Tomato - a minimalist pomodoro timer for Android.
*
* Tomato is free software: you can redistribute it and/or modify it under the terms of the GNU
* General Public License as published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* Tomato is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with Tomato.
* If not, see <https://www.gnu.org/licenses/>.
*/
package org.nsh07.pomodoro.ui.settingsScreen.viewModel
import androidx.compose.runtime.Immutable
import androidx.compose.ui.graphics.Color
@Immutable
data class SettingsState(
val theme: String = "auto",
val colorScheme: String = Color.White.toString(),
val blackTheme: Boolean = false,
val aodEnabled: Boolean = false
)

View File

@@ -59,8 +59,8 @@ class SettingsViewModel(
private val _isSettingsLoaded = MutableStateFlow(false) private val _isSettingsLoaded = MutableStateFlow(false)
val isSettingsLoaded = _isSettingsLoaded.asStateFlow() val isSettingsLoaded = _isSettingsLoaded.asStateFlow()
private val _preferencesState = MutableStateFlow(PreferencesState()) private val _settingsState = MutableStateFlow(SettingsState())
val preferencesState = _preferencesState.asStateFlow() val settingsState = _settingsState.asStateFlow()
val focusTimeTextFieldState by lazy { val focusTimeTextFieldState by lazy {
TextFieldState((timerRepository.focusTime / 60000).toString()) TextFieldState((timerRepository.focusTime / 60000).toString())
@@ -203,7 +203,7 @@ class SettingsViewModel(
private fun saveColorScheme(colorScheme: Color) { private fun saveColorScheme(colorScheme: Color) {
viewModelScope.launch { viewModelScope.launch {
_preferencesState.update { currentState -> _settingsState.update { currentState ->
currentState.copy(colorScheme = colorScheme.toString()) currentState.copy(colorScheme = colorScheme.toString())
} }
preferenceRepository.saveStringPreference("color_scheme", colorScheme.toString()) preferenceRepository.saveStringPreference("color_scheme", colorScheme.toString())
@@ -212,7 +212,7 @@ class SettingsViewModel(
private fun saveTheme(theme: String) { private fun saveTheme(theme: String) {
viewModelScope.launch { viewModelScope.launch {
_preferencesState.update { currentState -> _settingsState.update { currentState ->
currentState.copy(theme = theme) currentState.copy(theme = theme)
} }
preferenceRepository.saveStringPreference("theme", theme) preferenceRepository.saveStringPreference("theme", theme)
@@ -221,7 +221,7 @@ class SettingsViewModel(
private fun saveBlackTheme(blackTheme: Boolean) { private fun saveBlackTheme(blackTheme: Boolean) {
viewModelScope.launch { viewModelScope.launch {
_preferencesState.update { currentState -> _settingsState.update { currentState ->
currentState.copy(blackTheme = blackTheme) currentState.copy(blackTheme = blackTheme)
} }
preferenceRepository.saveBooleanPreference("black_theme", blackTheme) preferenceRepository.saveBooleanPreference("black_theme", blackTheme)
@@ -230,7 +230,7 @@ class SettingsViewModel(
private fun saveAodEnabled(aodEnabled: Boolean) { private fun saveAodEnabled(aodEnabled: Boolean) {
viewModelScope.launch { viewModelScope.launch {
_preferencesState.update { currentState -> _settingsState.update { currentState ->
currentState.copy(aodEnabled = aodEnabled) currentState.copy(aodEnabled = aodEnabled)
} }
preferenceRepository.saveBooleanPreference("aod_enabled", aodEnabled) preferenceRepository.saveBooleanPreference("aod_enabled", aodEnabled)
@@ -238,7 +238,7 @@ class SettingsViewModel(
} }
fun resetPaywalledSettings() { fun resetPaywalledSettings() {
_preferencesState.update { currentState -> _settingsState.update { currentState ->
currentState.copy( currentState.copy(
aodEnabled = false, aodEnabled = false,
blackTheme = false, blackTheme = false,
@@ -257,7 +257,7 @@ class SettingsViewModel(
val aodEnabled = preferenceRepository.getBooleanPreference("aod_enabled") val aodEnabled = preferenceRepository.getBooleanPreference("aod_enabled")
?: preferenceRepository.saveBooleanPreference("aod_enabled", false) ?: preferenceRepository.saveBooleanPreference("aod_enabled", false)
_preferencesState.update { currentState -> _settingsState.update { currentState ->
currentState.copy( currentState.copy(
theme = theme, theme = theme,
colorScheme = colorScheme, colorScheme = colorScheme,