Skip to content

Commit

Permalink
Refactor Preference
Browse files Browse the repository at this point in the history
  • Loading branch information
Faltenreich committed Mar 31, 2024
1 parent a45d74c commit 058991b
Show file tree
Hide file tree
Showing 9 changed files with 28 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import androidx.compose.ui.Modifier
import com.faltenreich.diaguard.onboarding.FirstStart
import com.faltenreich.diaguard.onboarding.OnboardingViewModel
import com.faltenreich.diaguard.onboarding.OnboardingViewState
import com.faltenreich.diaguard.preference.store.ColorScheme
import com.faltenreich.diaguard.preference.ColorScheme
import com.faltenreich.diaguard.shared.di.inject
import com.faltenreich.diaguard.shared.theme.ThemeViewModel
import com.faltenreich.diaguard.shared.view.LoadingIndicator
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ package com.faltenreich.diaguard.navigation
import com.faltenreich.diaguard.navigation.screen.DashboardScreen
import com.faltenreich.diaguard.navigation.screen.LogScreen
import com.faltenreich.diaguard.navigation.screen.TimelineScreen
import com.faltenreich.diaguard.preference.StartScreenPreference
import com.faltenreich.diaguard.preference.StartScreen
import com.faltenreich.diaguard.preference.store.GetPreferenceUseCase
import com.faltenreich.diaguard.preference.store.StartScreen
import com.faltenreich.diaguard.shared.architecture.ViewModel
import com.faltenreich.diaguard.shared.di.inject
import kotlinx.coroutines.flow.map
Expand All @@ -18,7 +17,7 @@ class NavigationViewModel(
val canNavigateBack: CanNavigateBackUseCase = inject(),
) : ViewModel<NavigationViewState, NavigationIntent>() {

override val state = getPreference(StartScreenPreference).map { startScreen ->
override val state = getPreference(StartScreen.Preference).map { startScreen ->
NavigationViewState(
startScreen = when (startScreen) {
StartScreen.DASHBOARD -> DashboardScreen
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.faltenreich.diaguard.preference.store
package com.faltenreich.diaguard.preference

import com.faltenreich.diaguard.MR
import dev.icerock.moko.resources.StringResource
Expand All @@ -21,10 +21,10 @@ enum class ColorScheme(
),
;

companion object {

fun valueOf(stableId: Int): ColorScheme? {
return entries.firstOrNull { it.stableId == stableId }
}
}
data object Preference : com.faltenreich.diaguard.preference.Preference<Int, ColorScheme>(
key = MR.strings.preference_theme,
default = SYSTEM,
onRead = { stableId -> entries.firstOrNull { it.stableId == stableId } },
onWrite = ColorScheme::stableId,
)
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,10 @@
package com.faltenreich.diaguard.preference

import com.faltenreich.diaguard.MR
import com.faltenreich.diaguard.preference.store.ColorScheme
import com.faltenreich.diaguard.preference.store.StartScreen
import dev.icerock.moko.resources.StringResource

sealed class Preference<Store, Domain>(
val key: StringResource,
val default: Domain,
val onRead: (Store) -> Domain?,
val onWrite: (Domain) -> Store,
)

data object ColorSchemePreference : Preference<Int, ColorScheme>(
key = MR.strings.preference_theme,
default = ColorScheme.SYSTEM,
onRead = ColorScheme::valueOf,
onWrite = ColorScheme::stableId,
)

data object StartScreenPreference : Preference<Int, StartScreen>(
key = MR.strings.preference_start_screen,
default = StartScreen.DASHBOARD,
onRead = StartScreen::valueOf,
onWrite = StartScreen::stableId,
)
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ package com.faltenreich.diaguard.preference
import com.faltenreich.diaguard.preference.list.GetDefaultPreferencesUseCase
import com.faltenreich.diaguard.preference.list.PreferenceListViewModel
import com.faltenreich.diaguard.preference.list.item.PreferenceListItem
import com.faltenreich.diaguard.preference.store.GetAppVersionUseCase
import com.faltenreich.diaguard.preference.store.GetPreferenceUseCase
import com.faltenreich.diaguard.preference.store.PreferenceStore
import com.faltenreich.diaguard.preference.store.SetPreferenceUseCase
import com.faltenreich.diaguard.shared.config.GetAppVersionUseCase
import org.koin.core.module.dsl.singleOf
import org.koin.dsl.module

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.faltenreich.diaguard.preference.store
package com.faltenreich.diaguard.preference

import com.faltenreich.diaguard.MR
import dev.icerock.moko.resources.StringResource
Expand All @@ -22,10 +22,10 @@ enum class StartScreen(
),
;

companion object {

fun valueOf(stableId: Int): StartScreen? {
return entries.firstOrNull { it.stableId == stableId }
}
}
data object Preference : com.faltenreich.diaguard.preference.Preference<Int, StartScreen>(
key = MR.strings.preference_start_screen,
default = DASHBOARD,
onRead = { stableId -> entries.firstOrNull { it.stableId == stableId } },
onWrite = StartScreen::stableId,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,14 @@ import com.faltenreich.diaguard.MR
import com.faltenreich.diaguard.navigation.NavigateToScreenUseCase
import com.faltenreich.diaguard.navigation.screen.MeasurementPropertyListScreen
import com.faltenreich.diaguard.navigation.screen.TagListScreen
import com.faltenreich.diaguard.preference.ColorSchemePreference
import com.faltenreich.diaguard.preference.StartScreenPreference
import com.faltenreich.diaguard.preference.ColorScheme
import com.faltenreich.diaguard.preference.StartScreen
import com.faltenreich.diaguard.preference.list.item.PreferenceListItem
import com.faltenreich.diaguard.preference.list.item.PreferenceListListItem
import com.faltenreich.diaguard.preference.list.item.preferences
import com.faltenreich.diaguard.preference.store.ColorScheme
import com.faltenreich.diaguard.preference.store.GetAppVersionUseCase
import com.faltenreich.diaguard.preference.store.GetPreferenceUseCase
import com.faltenreich.diaguard.preference.store.SetPreferenceUseCase
import com.faltenreich.diaguard.preference.store.StartScreen
import com.faltenreich.diaguard.shared.config.GetAppVersionUseCase
import com.faltenreich.diaguard.shared.localization.getString
import com.faltenreich.diaguard.shared.networking.UrlOpener
import kotlinx.coroutines.flow.Flow
Expand All @@ -29,8 +27,8 @@ class GetDefaultPreferencesUseCase(

operator fun invoke(): Flow<List<PreferenceListItem>> {
return combine(
getPreference(ColorSchemePreference),
getPreference(StartScreenPreference),
getPreference(ColorScheme.Preference),
getPreference(StartScreen.Preference),
getAppVersion(),
) { colorScheme, startScreen, appVersion ->
preferences {
Expand All @@ -41,7 +39,7 @@ class GetDefaultPreferencesUseCase(
PreferenceListListItem.Option(
label = { getString(value.labelResource) },
isSelected = value == colorScheme,
onSelected = { setPreference(ColorSchemePreference, value) },
onSelected = { setPreference(ColorScheme.Preference, value) },
)
}
}
Expand All @@ -52,7 +50,7 @@ class GetDefaultPreferencesUseCase(
PreferenceListListItem.Option(
label = { getString(value.labelResource) },
isSelected = value == startScreen,
onSelected = { setPreference(StartScreenPreference, value) },
onSelected = { setPreference(StartScreen.Preference, value) },
)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.faltenreich.diaguard.preference.store
package com.faltenreich.diaguard.shared.config

import com.faltenreich.diaguard.shared.config.BuildConfig
import com.faltenreich.diaguard.shared.di.inject
import com.faltenreich.diaguard.shared.primitive.format
import kotlinx.coroutines.flow.Flow
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.faltenreich.diaguard.shared.theme

import com.faltenreich.diaguard.preference.ColorSchemePreference
import com.faltenreich.diaguard.preference.store.ColorScheme
import com.faltenreich.diaguard.preference.ColorScheme
import com.faltenreich.diaguard.preference.store.GetPreferenceUseCase
import com.faltenreich.diaguard.shared.architecture.ViewModel
import com.faltenreich.diaguard.shared.di.inject
Expand All @@ -11,7 +10,7 @@ class ThemeViewModel(
getPreference: GetPreferenceUseCase = inject(),
) : ViewModel<ColorScheme, Unit>() {

override val state: Flow<ColorScheme> = getPreference(ColorSchemePreference)
override val state: Flow<ColorScheme> = getPreference(ColorScheme.Preference)

override fun onIntent(intent: Unit) = Unit
}

0 comments on commit 058991b

Please sign in to comment.