diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/navigation/SettingsNavigation.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/navigation/SettingsNavigation.kt index b17ac51b9..de6479782 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/navigation/SettingsNavigation.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/navigation/SettingsNavigation.kt @@ -126,7 +126,7 @@ fun EntryProviderScope.settingsGraph(backStack: NavBackStack) { entry { val viewModel: CleanNodeDatabaseViewModel = koinViewModel() - CleanNodeDatabaseScreen(viewModel = viewModel) + CleanNodeDatabaseScreen(viewModel = viewModel, onBack = dropUnlessResumed { backStack.removeLastOrNull() }) } ConfigRoute.entries.forEach { routeInfo -> diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/CleanNodeDatabaseScreen.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/CleanNodeDatabaseScreen.kt index 6ee9183c6..1ade81b11 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/CleanNodeDatabaseScreen.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/CleanNodeDatabaseScreen.kt @@ -27,6 +27,7 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Button import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold import androidx.compose.material3.Slider import androidx.compose.material3.Switch import androidx.compose.material3.Text @@ -46,6 +47,7 @@ import org.meshtastic.core.resources.clean_nodes_older_than import org.meshtastic.core.resources.clean_now import org.meshtastic.core.resources.clean_unknown_nodes import org.meshtastic.core.resources.nodes_queued_for_deletion +import org.meshtastic.core.ui.component.MainAppBar import org.meshtastic.core.ui.component.NodeChip /** @@ -53,40 +55,56 @@ import org.meshtastic.core.ui.component.NodeChip * nodes to be deleted updates automatically as filter criteria change. */ @Composable -fun CleanNodeDatabaseScreen(viewModel: CleanNodeDatabaseViewModel) { +fun CleanNodeDatabaseScreen(viewModel: CleanNodeDatabaseViewModel, onBack: () -> Unit) { val olderThanDays by viewModel.olderThanDays.collectAsStateWithLifecycle() val onlyUnknownNodes by viewModel.onlyUnknownNodes.collectAsStateWithLifecycle() val nodesToDelete by viewModel.nodesToDelete.collectAsStateWithLifecycle() LaunchedEffect(olderThanDays, onlyUnknownNodes) { viewModel.getNodesToDelete() } - Column(modifier = Modifier.padding(16.dp).verticalScroll(rememberScrollState())) { - Text(stringResource(Res.string.clean_node_database_title)) - Text(stringResource(Res.string.clean_node_database_description), style = MaterialTheme.typography.bodySmall) - Spacer(modifier = Modifier.height(16.dp)) + Scaffold( + topBar = { + MainAppBar( + title = stringResource(Res.string.clean_node_database_title), + ourNode = null, + showNodeChip = false, + canNavigateUp = true, + onNavigateUp = onBack, + actions = {}, + onClickChip = {}, + ) + }, + ) { paddingValues -> + Column(modifier = Modifier.padding(paddingValues).padding(16.dp).verticalScroll(rememberScrollState())) { + Text(stringResource(Res.string.clean_node_database_description), style = MaterialTheme.typography.bodySmall) + Spacer(modifier = Modifier.height(16.dp)) - DaysThresholdFilter( - olderThanDays = olderThanDays, - onlyUnknownNodes = onlyUnknownNodes, - onDaysChanged = viewModel::onOlderThanDaysChanged, - ) + DaysThresholdFilter( + olderThanDays = olderThanDays, + onlyUnknownNodes = onlyUnknownNodes, + onDaysChanged = viewModel::onOlderThanDaysChanged, + ) - Spacer(modifier = Modifier.height(8.dp)) + Spacer(modifier = Modifier.height(8.dp)) - UnknownNodesFilter(onlyUnknownNodes = onlyUnknownNodes, onCheckedChanged = viewModel::onOnlyUnknownNodesChanged) + UnknownNodesFilter( + onlyUnknownNodes = onlyUnknownNodes, + onCheckedChanged = viewModel::onOnlyUnknownNodesChanged, + ) - Spacer(modifier = Modifier.height(32.dp)) + Spacer(modifier = Modifier.height(32.dp)) - NodesDeletionPreview(nodesToDelete = nodesToDelete) + NodesDeletionPreview(nodesToDelete = nodesToDelete) - Spacer(modifier = Modifier.height(16.dp)) + Spacer(modifier = Modifier.height(16.dp)) - Button( - onClick = { if (nodesToDelete.isNotEmpty()) viewModel.requestCleanNodes() }, - modifier = Modifier.fillMaxWidth(), - enabled = nodesToDelete.isNotEmpty(), - ) { - Text(stringResource(Res.string.clean_now)) + Button( + onClick = { if (nodesToDelete.isNotEmpty()) viewModel.requestCleanNodes() }, + modifier = Modifier.fillMaxWidth(), + enabled = nodesToDelete.isNotEmpty(), + ) { + Text(stringResource(Res.string.clean_now)) + } } } }