From 0895106163e5166ac7ac242475c711c6994d1884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rton=20Braun?= Date: Mon, 10 Feb 2025 23:38:37 +0100 Subject: [PATCH] Remove default values from NotificationSettings --- .../jetbrains/kotlinconf/ConferenceService.kt | 7 ++----- .../kotlin/org/jetbrains/kotlinconf/Model.kt | 6 +++--- .../kotlinconf/screens/SettingsScreen.kt | 17 +++++++++-------- .../kotlinconf/screens/SettingsViewModel.kt | 9 ++++++--- .../screens/StartNotificationsViewModel.kt | 7 +++++-- .../storage/MultiplatformSettingsStorage.kt | 3 +-- 6 files changed, 26 insertions(+), 23 deletions(-) diff --git a/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/ConferenceService.kt b/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/ConferenceService.kt index b0a1df98..dae1c09c 100644 --- a/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/ConferenceService.kt +++ b/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/ConferenceService.kt @@ -142,17 +142,14 @@ class ConferenceService( fun requestNotificationPermissions() { scope.launch { storage.setNotificationsAllowed(true) - storage.setNotificationSettings(NotificationSettings()) // Set default values (all true) notificationManager.requestPermission() } } fun getNotificationSettings(): Flow = storage.getNotificationSettings() - fun setNotificationSettings(settings: NotificationSettings) { - scope.launch { - storage.setNotificationSettings(settings) - } + suspend fun setNotificationSettings(settings: NotificationSettings) { + storage.setNotificationSettings(settings) } /** diff --git a/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/Model.kt b/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/Model.kt index df8db3d2..35284a5a 100644 --- a/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/Model.kt +++ b/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/Model.kt @@ -100,7 +100,7 @@ class NewsItem( @Serializable data class NotificationSettings( - val scheduleUpdates: Boolean = true, - val kotlinConfNews: Boolean = true, - val jetbrainsNews: Boolean = true, + val scheduleUpdates: Boolean, + val kotlinConfNews: Boolean, + val jetbrainsNews: Boolean, ) diff --git a/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/SettingsScreen.kt b/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/SettingsScreen.kt index 478d7f62..60dfd25b 100644 --- a/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/SettingsScreen.kt +++ b/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/SettingsScreen.kt @@ -142,14 +142,15 @@ private fun SettingsScreenImpl( Divider(thickness = 1.dp, color = KotlinConfTheme.colors.strokePale) - val notificationSettings by viewModel.notificationSettings.collectAsStateWithLifecycle() - NotificationSettings( - notificationSettings = notificationSettings, - onChangeSettings = { newSettings -> - viewModel.setNotificationSettings(newSettings) - onNotificationSettingsChange(newSettings) - } - ) + val notificationSettings = viewModel.notificationSettings.collectAsStateWithLifecycle().value + if (notificationSettings != null) + NotificationSettings( + notificationSettings = notificationSettings, + onChangeSettings = { newSettings -> + viewModel.setNotificationSettings(newSettings) + onNotificationSettingsChange(newSettings) + } + ) } } } diff --git a/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/SettingsViewModel.kt b/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/SettingsViewModel.kt index 3ab5c7a7..1a82ec2f 100644 --- a/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/SettingsViewModel.kt +++ b/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/SettingsViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.viewModelScope import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch import org.jetbrains.kotlinconf.ConferenceService import org.jetbrains.kotlinconf.NotificationSettings import org.jetbrains.kotlinconf.Theme @@ -15,14 +16,16 @@ class SettingsViewModel( val theme: StateFlow = service.getTheme() .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), Theme.SYSTEM) - val notificationSettings: StateFlow = service.getNotificationSettings() - .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), NotificationSettings()) + val notificationSettings: StateFlow = service.getNotificationSettings() + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), null) fun setTheme(theme: Theme) { service.setTheme(theme) } fun setNotificationSettings(settings: NotificationSettings) { - service.setNotificationSettings(settings) + viewModelScope.launch { + service.setNotificationSettings(settings) + } } } diff --git a/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/StartNotificationsViewModel.kt b/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/StartNotificationsViewModel.kt index db63dc9b..05cc8db6 100644 --- a/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/StartNotificationsViewModel.kt +++ b/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/StartNotificationsViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.viewModelScope import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch import org.jetbrains.kotlinconf.ConferenceService import org.jetbrains.kotlinconf.NotificationSettings @@ -12,10 +13,12 @@ class StartNotificationsViewModel( private val service: ConferenceService, ) : ViewModel() { val notificationSettings: StateFlow = service.getNotificationSettings() - .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), NotificationSettings()) + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), NotificationSettings(true, true, true)) fun setNotificationSettings(settings: NotificationSettings) { - service.setNotificationSettings(settings) + viewModelScope.launch { + service.setNotificationSettings(settings) + } } fun requestNotificationPermissions() { diff --git a/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/storage/MultiplatformSettingsStorage.kt b/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/storage/MultiplatformSettingsStorage.kt index 00f733eb..4957e459 100644 --- a/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/storage/MultiplatformSettingsStorage.kt +++ b/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/storage/MultiplatformSettingsStorage.kt @@ -53,8 +53,7 @@ class MultiplatformSettingsStorage(context: ApplicationContext) : ApplicationSto override fun getNotificationSettings(): Flow = settings.getStringOrNullFlow(Keys.NOTIFICATION_SETTINGS) - .map { it?.let { Json.decodeFromString(it) } ?: NotificationSettings() } - + .map { it?.let { Json.decodeFromString(it) } ?: NotificationSettings(true, true, true) } override suspend fun setNotificationSettings(value: NotificationSettings) = settings.set( Keys.NOTIFICATION_SETTINGS, Json.encodeToString(value)