@@ -19,8 +19,6 @@ package org.nsh07.pomodoro.ui.settingsScreen
1919
2020import android.annotation.SuppressLint
2121import android.app.LocaleManager
22- import android.content.Intent
23- import android.net.Uri
2422import android.os.Build
2523import androidx.compose.animation.fadeIn
2624import androidx.compose.animation.fadeOut
@@ -55,7 +53,6 @@ import androidx.compose.runtime.setValue
5553import androidx.compose.runtime.snapshots.SnapshotStateList
5654import androidx.compose.ui.Alignment
5755import androidx.compose.ui.Modifier
58- import androidx.compose.ui.graphics.Color
5956import androidx.compose.ui.input.nestedscroll.nestedScroll
6057import androidx.compose.ui.platform.LocalContext
6158import androidx.compose.ui.res.painterResource
@@ -68,7 +65,6 @@ import androidx.lifecycle.viewmodel.compose.viewModel
6865import androidx.navigation3.runtime.entryProvider
6966import androidx.navigation3.ui.NavDisplay
7067import org.nsh07.pomodoro.R
71- import org.nsh07.pomodoro.service.TimerService
7268import org.nsh07.pomodoro.ui.Screen
7369import org.nsh07.pomodoro.ui.settingsScreen.components.AboutCard
7470import org.nsh07.pomodoro.ui.settingsScreen.components.ClickableListItem
@@ -77,7 +73,8 @@ import org.nsh07.pomodoro.ui.settingsScreen.components.PlusPromo
7773import org.nsh07.pomodoro.ui.settingsScreen.screens.AlarmSettings
7874import org.nsh07.pomodoro.ui.settingsScreen.screens.AppearanceSettings
7975import org.nsh07.pomodoro.ui.settingsScreen.screens.TimerSettings
80- import org.nsh07.pomodoro.ui.settingsScreen.viewModel.PreferencesState
76+ import org.nsh07.pomodoro.ui.settingsScreen.viewModel.SettingsAction
77+ import org.nsh07.pomodoro.ui.settingsScreen.viewModel.SettingsState
8178import org.nsh07.pomodoro.ui.settingsScreen.viewModel.SettingsViewModel
8279import org.nsh07.pomodoro.ui.settingsScreens
8380import org.nsh07.pomodoro.ui.theme.AppFonts.robotoFlexTopBar
@@ -92,8 +89,6 @@ fun SettingsScreenRoot(
9289 modifier : Modifier = Modifier ,
9390 viewModel : SettingsViewModel = viewModel(factory = SettingsViewModel .Factory )
9491) {
95- val context = LocalContext .current
96-
9792 val backStack = viewModel.backStack
9893
9994 DisposableEffect (Unit ) {
@@ -106,12 +101,8 @@ fun SettingsScreenRoot(
106101 val longBreakTimeInputFieldState = viewModel.longBreakTimeTextFieldState
107102
108103 val isPlus by viewModel.isPlus.collectAsStateWithLifecycle()
109- val alarmEnabled by viewModel.alarmEnabled.collectAsStateWithLifecycle(true )
110- val vibrateEnabled by viewModel.vibrateEnabled.collectAsStateWithLifecycle(true )
111- val dndEnabled by viewModel.dndEnabled.collectAsStateWithLifecycle(false )
112- val alarmSound by viewModel.alarmSound.collectAsStateWithLifecycle(viewModel.currentAlarmSound)
113104
114- val preferencesState by viewModel.preferencesState .collectAsStateWithLifecycle()
105+ val settingsState by viewModel.settingsState .collectAsStateWithLifecycle()
115106
116107 val sessionsSliderState = rememberSaveable(
117108 saver = SliderState .Saver (
@@ -124,30 +115,13 @@ fun SettingsScreenRoot(
124115
125116 SettingsScreen (
126117 isPlus = isPlus,
127- preferencesState = preferencesState ,
118+ settingsState = settingsState ,
128119 backStack = backStack,
129120 focusTimeInputFieldState = focusTimeInputFieldState,
130121 shortBreakTimeInputFieldState = shortBreakTimeInputFieldState,
131122 longBreakTimeInputFieldState = longBreakTimeInputFieldState,
132123 sessionsSliderState = sessionsSliderState,
133- alarmEnabled = alarmEnabled,
134- vibrateEnabled = vibrateEnabled,
135- dndEnabled = dndEnabled,
136- alarmSound = alarmSound,
137- onAlarmEnabledChange = viewModel::saveAlarmEnabled,
138- onVibrateEnabledChange = viewModel::saveVibrateEnabled,
139- onBlackThemeChange = viewModel::saveBlackTheme,
140- onAodEnabledChange = viewModel::saveAodEnabled,
141- onDndEnabledChange = viewModel::saveDndEnabled,
142- onAlarmSoundChanged = {
143- viewModel.saveAlarmSound(it)
144- Intent (context, TimerService ::class .java).apply {
145- action = TimerService .Actions .RESET .toString()
146- context.startService(this )
147- }
148- },
149- onThemeChange = viewModel::saveTheme,
150- onColorSchemeChange = viewModel::saveColorScheme,
124+ onAction = viewModel::onAction,
151125 setShowPaywall = setShowPaywall,
152126 modifier = modifier
153127 )
@@ -158,24 +132,13 @@ fun SettingsScreenRoot(
158132@Composable
159133private fun SettingsScreen (
160134 isPlus : Boolean ,
161- preferencesState : PreferencesState ,
135+ settingsState : SettingsState ,
162136 backStack : SnapshotStateList <Screen .Settings >,
163137 focusTimeInputFieldState : TextFieldState ,
164138 shortBreakTimeInputFieldState : TextFieldState ,
165139 longBreakTimeInputFieldState : TextFieldState ,
166140 sessionsSliderState : SliderState ,
167- alarmEnabled : Boolean ,
168- vibrateEnabled : Boolean ,
169- dndEnabled : Boolean ,
170- alarmSound : String ,
171- onAlarmEnabledChange : (Boolean ) -> Unit ,
172- onVibrateEnabledChange : (Boolean ) -> Unit ,
173- onBlackThemeChange : (Boolean ) -> Unit ,
174- onAodEnabledChange : (Boolean ) -> Unit ,
175- onDndEnabledChange : (Boolean ) -> Unit ,
176- onAlarmSoundChanged : (Uri ? ) -> Unit ,
177- onThemeChange : (String ) -> Unit ,
178- onColorSchemeChange : (Color ) -> Unit ,
141+ onAction : (SettingsAction ) -> Unit ,
179142 setShowPaywall : (Boolean ) -> Unit ,
180143 modifier : Modifier = Modifier
181144) {
@@ -312,38 +275,29 @@ private fun SettingsScreen(
312275
313276 entry<Screen .Settings .Alarm > {
314277 AlarmSettings (
315- preferencesState = preferencesState,
316- alarmEnabled = alarmEnabled,
317- vibrateEnabled = vibrateEnabled,
318- alarmSound = alarmSound,
319- onAlarmEnabledChange = onAlarmEnabledChange,
320- onVibrateEnabledChange = onVibrateEnabledChange,
321- onAlarmSoundChanged = onAlarmSoundChanged,
278+ settingsState = settingsState,
279+ onAction = onAction,
322280 onBack = backStack::removeLastOrNull
323281 )
324282 }
325283 entry<Screen .Settings .Appearance > {
326284 AppearanceSettings (
327- preferencesState = preferencesState ,
285+ settingsState = settingsState ,
328286 isPlus = isPlus,
329- onBlackThemeChange = onBlackThemeChange,
330- onThemeChange = onThemeChange,
331- onColorSchemeChange = onColorSchemeChange,
287+ onAction = onAction,
332288 setShowPaywall = setShowPaywall,
333289 onBack = backStack::removeLastOrNull
334290 )
335291 }
336292 entry<Screen .Settings .Timer > {
337293 TimerSettings (
338294 isPlus = isPlus,
339- aodEnabled = preferencesState.aodEnabled,
340- dndEnabled = dndEnabled,
295+ settingsState = settingsState,
341296 focusTimeInputFieldState = focusTimeInputFieldState,
342297 shortBreakTimeInputFieldState = shortBreakTimeInputFieldState,
343298 longBreakTimeInputFieldState = longBreakTimeInputFieldState,
344299 sessionsSliderState = sessionsSliderState,
345- onAodEnabledChange = onAodEnabledChange,
346- onDndEnabledChange = onDndEnabledChange,
300+ onAction = onAction,
347301 setShowPaywall = setShowPaywall,
348302 onBack = backStack::removeLastOrNull,
349303 )
0 commit comments