diff --git a/feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt b/feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt index 123c84d1c..526a2a1cd 100644 --- a/feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt +++ b/feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt @@ -16,14 +16,23 @@ package com.google.samples.apps.nowinandroid.feature.settings +import android.app.UiModeManager +import android.content.Context +import android.os.Build +import android.os.Build.VERSION_CODES +import androidx.appcompat.app.AppCompatDelegate import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig +import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig.DARK +import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig.FOLLOW_SYSTEM +import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig.LIGHT import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Loading import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Success import dagger.hilt.android.lifecycle.HiltViewModel +import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.flow.SharingStarted.Companion.WhileSubscribed import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.map @@ -35,6 +44,7 @@ import kotlin.time.Duration.Companion.seconds @HiltViewModel class SettingsViewModel @Inject constructor( private val userDataRepository: UserDataRepository, + @ApplicationContext private val context: Context, ) : ViewModel() { val settingsUiState: StateFlow = userDataRepository.userData @@ -62,6 +72,21 @@ class SettingsViewModel @Inject constructor( fun updateDarkThemeConfig(darkThemeConfig: DarkThemeConfig) { viewModelScope.launch { userDataRepository.setDarkThemeConfig(darkThemeConfig) + val splashMode = when (darkThemeConfig) { + FOLLOW_SYSTEM -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM + LIGHT -> AppCompatDelegate.MODE_NIGHT_NO + DARK -> AppCompatDelegate.MODE_NIGHT_YES + } + AppCompatDelegate.setDefaultNightMode(splashMode) + if (Build.VERSION.SDK_INT >= VERSION_CODES.S) { + val uiModeMode = when (darkThemeConfig) { + FOLLOW_SYSTEM -> UiModeManager.MODE_NIGHT_AUTO + LIGHT -> UiModeManager.MODE_NIGHT_NO + DARK -> UiModeManager.MODE_NIGHT_YES + } + (context.getSystemService(Context.UI_MODE_SERVICE) as? UiModeManager) + ?.setApplicationNightMode(uiModeMode) + } } }