feat(settings): reset settings when subscription expires
This commit is contained in:
@@ -61,6 +61,18 @@ class MainActivity : ComponentActivity() {
|
||||
val seed = preferencesState.colorScheme.toColor()
|
||||
|
||||
val isPlus by settingsViewModel.isPlus.collectAsStateWithLifecycle()
|
||||
val isPurchaseStateLoaded by settingsViewModel.isPurchaseStateLoaded.collectAsStateWithLifecycle()
|
||||
val isSettingsLoaded by settingsViewModel.isSettingsLoaded.collectAsStateWithLifecycle()
|
||||
|
||||
LaunchedEffect(isPurchaseStateLoaded, isPlus, isSettingsLoaded) {
|
||||
if (isPurchaseStateLoaded && isSettingsLoaded) {
|
||||
if (!isPlus) {
|
||||
settingsViewModel.resetPaywalledSettings()
|
||||
} else {
|
||||
settingsViewModel.reloadSettings()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TomatoTheme(
|
||||
darkTheme = darkTheme,
|
||||
|
||||
@@ -21,4 +21,5 @@ import kotlinx.coroutines.flow.StateFlow
|
||||
|
||||
interface BillingManager {
|
||||
val isPlus: StateFlow<Boolean>
|
||||
val isLoaded: StateFlow<Boolean>
|
||||
}
|
||||
@@ -54,6 +54,10 @@ class SettingsViewModel(
|
||||
val backStack = mutableStateListOf<Screen.Settings>(Screen.Settings.Main)
|
||||
|
||||
val isPlus = billingManager.isPlus
|
||||
val isPurchaseStateLoaded = billingManager.isLoaded
|
||||
|
||||
private val _isSettingsLoaded = MutableStateFlow(false)
|
||||
val isSettingsLoaded = _isSettingsLoaded.asStateFlow()
|
||||
|
||||
private val _preferencesState = MutableStateFlow(PreferencesState())
|
||||
val preferencesState = _preferencesState.asStateFlow()
|
||||
@@ -94,23 +98,8 @@ class SettingsViewModel(
|
||||
|
||||
init {
|
||||
viewModelScope.launch {
|
||||
val theme = preferenceRepository.getStringPreference("theme")
|
||||
?: preferenceRepository.saveStringPreference("theme", "auto")
|
||||
val colorScheme = preferenceRepository.getStringPreference("color_scheme")
|
||||
?: preferenceRepository.saveStringPreference("color_scheme", Color.White.toString())
|
||||
val blackTheme = preferenceRepository.getBooleanPreference("black_theme")
|
||||
?: preferenceRepository.saveBooleanPreference("black_theme", false)
|
||||
val aodEnabled = preferenceRepository.getBooleanPreference("aod_enabled")
|
||||
?: preferenceRepository.saveBooleanPreference("aod_enabled", false)
|
||||
|
||||
_preferencesState.update { currentState ->
|
||||
currentState.copy(
|
||||
theme = theme,
|
||||
colorScheme = colorScheme,
|
||||
blackTheme = blackTheme,
|
||||
aodEnabled = aodEnabled
|
||||
)
|
||||
}
|
||||
reloadSettings()
|
||||
_isSettingsLoaded.value = true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -235,6 +224,36 @@ class SettingsViewModel(
|
||||
}
|
||||
}
|
||||
|
||||
fun resetPaywalledSettings() {
|
||||
_preferencesState.update { currentState ->
|
||||
currentState.copy(
|
||||
aodEnabled = false,
|
||||
blackTheme = false,
|
||||
colorScheme = Color.White.toString()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun reloadSettings() {
|
||||
val theme = preferenceRepository.getStringPreference("theme")
|
||||
?: preferenceRepository.saveStringPreference("theme", "auto")
|
||||
val colorScheme = preferenceRepository.getStringPreference("color_scheme")
|
||||
?: preferenceRepository.saveStringPreference("color_scheme", Color.White.toString())
|
||||
val blackTheme = preferenceRepository.getBooleanPreference("black_theme")
|
||||
?: preferenceRepository.saveBooleanPreference("black_theme", false)
|
||||
val aodEnabled = preferenceRepository.getBooleanPreference("aod_enabled")
|
||||
?: preferenceRepository.saveBooleanPreference("aod_enabled", false)
|
||||
|
||||
_preferencesState.update { currentState ->
|
||||
currentState.copy(
|
||||
theme = theme,
|
||||
colorScheme = colorScheme,
|
||||
blackTheme = blackTheme,
|
||||
aodEnabled = aodEnabled
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
val Factory: ViewModelProvider.Factory = viewModelFactory {
|
||||
initializer {
|
||||
|
||||
Reference in New Issue
Block a user