diff --git a/app/src/main/java/com/m57/hermescontrol/MainActivity.kt b/app/src/main/java/com/m57/hermescontrol/MainActivity.kt index bcba7d1f..ffc26e5d 100644 --- a/app/src/main/java/com/m57/hermescontrol/MainActivity.kt +++ b/app/src/main/java/com/m57/hermescontrol/MainActivity.kt @@ -7,6 +7,8 @@ import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import com.m57.hermescontrol.data.local.AuthManager import com.m57.hermescontrol.notification.NotificationReplyReceiver @@ -21,11 +23,8 @@ class MainActivity : ComponentActivity() { enableEdgeToEdge() setContent { - // B6 (Jun 18 2026, kanban t_86e9be9b): read the stored theme - // preference at startup so HermesControlTheme actually applies - // the user's SYSTEM/LIGHT/DARK choice rather than defaulting to - // SYSTEM on every cold start. - HermesControlTheme(themePreference = AuthManager.getThemePreference()) { + val themePreference by AuthManager.themePreferenceFlow.collectAsState() + HermesControlTheme(themePreference = themePreference) { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background, diff --git a/app/src/main/java/com/m57/hermescontrol/data/local/AuthManager.kt b/app/src/main/java/com/m57/hermescontrol/data/local/AuthManager.kt index 0a39a7f1..d5061410 100644 --- a/app/src/main/java/com/m57/hermescontrol/data/local/AuthManager.kt +++ b/app/src/main/java/com/m57/hermescontrol/data/local/AuthManager.kt @@ -41,6 +41,9 @@ object AuthManager { private val _bottomNavItemsFlow = MutableStateFlow>(emptyList()) val bottomNavItemsFlow: StateFlow> = _bottomNavItemsFlow.asStateFlow() + private val _themePreferenceFlow = MutableStateFlow(ThemePreference.SYSTEM) + val themePreferenceFlow: StateFlow = _themePreferenceFlow.asStateFlow() + private val gson = com.google.gson.Gson() /** @@ -67,6 +70,7 @@ object AuthManager { ) _bottomNavItemsFlow.value = getBottomNavItems() + _themePreferenceFlow.value = getThemePreference() } } @@ -206,6 +210,7 @@ object AuthManager { fun setThemePreference(theme: ThemePreference) { requirePrefs().edit().putString(KEY_THEME_PREFERENCE, theme.name).apply() + _themePreferenceFlow.value = theme } /** Convenience: build the base URL from current host + port. diff --git a/app/src/main/java/com/m57/hermescontrol/ui/settings/SettingsViewModel.kt b/app/src/main/java/com/m57/hermescontrol/ui/settings/SettingsViewModel.kt index 16244565..b6947c89 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/settings/SettingsViewModel.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/settings/SettingsViewModel.kt @@ -119,6 +119,7 @@ class SettingsViewModel : ViewModel() { fun onThemeChange(theme: ThemePreference) { _uiState.update { it.copy(themePreference = theme, isSaved = false) } + AuthManager.setThemePreference(theme) } fun onTypingEffectEnabledChange(enabled: Boolean) {