feat: implement first run tracking; update PreferencesManager to manage first run state and integrate with MainApp

This commit is contained in:
2025-11-28 13:55:29 +01:00
parent c4de060fe4
commit 2b6d4939ea
2 changed files with 7 additions and 1 deletions
@@ -16,6 +16,9 @@ class PreferencesManager(
private val _serverUrl = MutableStateFlow(getServerUrl()) private val _serverUrl = MutableStateFlow(getServerUrl())
val serverUrl: StateFlow<String> = _serverUrl.asStateFlow() val serverUrl: StateFlow<String> = _serverUrl.asStateFlow()
private val _isFirstRun = MutableStateFlow(isFirstRun())
val isFirstRunFlow: StateFlow<Boolean> = _isFirstRun.asStateFlow()
private val _themeMode = MutableStateFlow(getThemeMode()) private val _themeMode = MutableStateFlow(getThemeMode())
val themeMode: StateFlow<String> = _themeMode.asStateFlow() val themeMode: StateFlow<String> = _themeMode.asStateFlow()
@@ -64,6 +67,7 @@ class PreferencesManager(
fun setIsFirstRun(isFirstRun: Boolean) { fun setIsFirstRun(isFirstRun: Boolean) {
prefs.edit().putBoolean(KEY_FIRST_RUN, isFirstRun).apply() prefs.edit().putBoolean(KEY_FIRST_RUN, isFirstRun).apply()
_isFirstRun.value = isFirstRun
} }
fun getServerPassword(): String? = prefs.getString(KEY_SERVER_PASSWORD, null) fun getServerPassword(): String? = prefs.getString(KEY_SERVER_PASSWORD, null)
@@ -16,6 +16,7 @@ import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@@ -47,9 +48,10 @@ private object Routes {
fun MainApp() { fun MainApp() {
val context = LocalContext.current val context = LocalContext.current
val prefs = remember { PreferencesManager.getInstance(context) } val prefs = remember { PreferencesManager.getInstance(context) }
val isFirstRun by prefs.isFirstRunFlow.collectAsState()
// Show setup flow until completed; then show main app with bottom nav // Show setup flow until completed; then show main app with bottom nav
if (prefs.isFirstRun()) { if (isFirstRun) {
val navController = rememberNavController() val navController = rememberNavController()
NavHost(navController, startDestination = Routes.SETUP) { NavHost(navController, startDestination = Routes.SETUP) {
composable(Routes.SETUP) { composable(Routes.SETUP) {