diff --git a/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/AppViewModel.kt b/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/AppViewModel.kt index 2246810..60347f2 100644 --- a/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/AppViewModel.kt +++ b/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/AppViewModel.kt @@ -8,6 +8,8 @@ import com.digitoolsolutions.app.torquevaultkmp.data.storage.AppStorage import com.digitoolsolutions.app.torquevaultkmp.data.storage.ReferKeys import com.digitoolsolutions.app.torquevaultkmp.data.storage.TokenManager import com.digitoolsolutions.app.torquevaultkmp.data.storage.load +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch @@ -22,6 +24,9 @@ class AppViewModel( private val _sessionExpired = mutableStateOf(false) val sessionExpired: State = _sessionExpired + private val _showLogs = MutableStateFlow(false) + val showLogs: StateFlow = _showLogs + init { viewModelScope.launch { tokenManager.sessionExpired.collectLatest { @@ -42,4 +47,8 @@ class AppViewModel( _isDarkTheme.value = isDark storage.save(ReferKeys.THEME, isDark) } + + fun setShowLogs(enabled: Boolean) { + _showLogs.value = enabled + } } diff --git a/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/screens/MainScreen.kt b/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/screens/MainScreen.kt index d65f463..554486a 100644 --- a/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/screens/MainScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/screens/MainScreen.kt @@ -12,7 +12,7 @@ import androidx.compose.material3.NavigationBarItemDefaults import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier @@ -36,13 +36,11 @@ import com.digitoolsolutions.app.torquevaultkmp.screens.logs.LogDestination import com.digitoolsolutions.app.torquevaultkmp.screens.logs.LogScreen import com.digitoolsolutions.app.torquevaultkmp.screens.scanner.ScannerDestination import com.digitoolsolutions.app.torquevaultkmp.screens.scanner.ScannerScreen -import com.digitoolsolutions.app.torquevaultkmp.screens.scanner.ScannerViewModel import com.digitoolsolutions.app.torquevaultkmp.screens.settings.SettingDestination import com.digitoolsolutions.app.torquevaultkmp.screens.settings.SettingScreen import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource import org.koin.compose.koinInject -import org.koin.compose.viewmodel.koinViewModel import torquevaultkmp.composeapp.generated.resources.Res import torquevaultkmp.composeapp.generated.resources.btn_login import kotlin.uuid.ExperimentalUuidApi @@ -55,13 +53,14 @@ fun MainScreen( isLoggedIn: Boolean, viewModel: AppViewModel = koinInject() ) { - val destinations = listOf( - HomeDestination, - ScannerDestination, - BondedDestination, - LogDestination, - SettingDestination, - ) + val showLogs by viewModel.showLogs.collectAsState() + val destinations = buildList { + add(HomeDestination) + add(ScannerDestination) + add(BondedDestination) + if (showLogs) add(LogDestination) + add(SettingDestination) + } val navController = rememberNavController() val navBackStackEntry by navController.currentBackStackEntryAsState() val currentDestination = navBackStackEntry?.destination diff --git a/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/screens/settings/SettingScreen.kt b/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/screens/settings/SettingScreen.kt index 88925cc..e4b289b 100644 --- a/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/screens/settings/SettingScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/screens/settings/SettingScreen.kt @@ -33,11 +33,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalFocusManager -import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.navigation.NavController +import com.digitoolsolutions.app.torquevaultkmp.AppViewModel import com.digitoolsolutions.app.torquevaultkmp.components.AppBar import com.digitoolsolutions.app.torquevaultkmp.screens.auth.AuthDestination import com.digitoolsolutions.app.torquevaultkmp.utils.AppInfo @@ -63,16 +62,20 @@ import torquevaultkmp.composeapp.generated.resources.token fun SettingScreen( navController: NavController, isDarkTheme: Boolean, - onThemeToggle: (Boolean) -> Unit, + onThemeToggle: (Boolean) -> Unit ) { val viewModel = koinViewModel() + val appViewModel = koinInject() val serverUrl by viewModel.serverUrl.collectAsState() val token by viewModel.refreshToken.collectAsState() val autoConnect by viewModel.autoConnect.collectAsState() + val showLogs by appViewModel.showLogs.collectAsState() SettingContent( isDarkTheme = isDarkTheme, onThemeToggle = onThemeToggle, + isShowLogs = showLogs, + onToggleLogs = { appViewModel.setShowLogs(it) }, serverUrl = serverUrl, onServerUrlChange = { viewModel.updateServerUrl(it) }, token = token, @@ -94,6 +97,8 @@ fun SettingScreen( fun SettingContent( isDarkTheme: Boolean, onThemeToggle: (Boolean) -> Unit, + isShowLogs: Boolean, + onToggleLogs: (Boolean) -> Unit, serverUrl: String, onServerUrlChange: (String) -> Unit, token: String, @@ -170,6 +175,18 @@ fun SettingContent( ) } Spacer(modifier = Modifier.height(8.dp)) + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.fillMaxWidth() + ) { + Text("Show logs") + Spacer(modifier = Modifier.weight(1f)) + Switch( + checked = isShowLogs, + onCheckedChange = { onToggleLogs(it) } + ) + } + Spacer(modifier = Modifier.height(8.dp)) OutlinedTextField( value = serverUrl, onValueChange = { onServerUrlChange(it) }, @@ -225,21 +242,4 @@ fun SettingContent( ) } } -} - -@Preview(showBackground = true) -@Composable -private fun SettingScreenPreview() { - SettingContent( - isDarkTheme = true, - onThemeToggle = {}, - serverUrl = "https://example.com", - onServerUrlChange = {}, - token = "dummy_token", - onTokenChange = {}, - onSaveSettings = {}, - onLogout = {}, - autoConnect = false, - onChangeAutoConnect = {}, - ) -} +} \ No newline at end of file