fix: add navigation to Logs screen from Settings and Lists screens

This commit is contained in:
2025-10-26 17:29:56 +01:00
parent f401409517
commit e073a6ffda
3 changed files with 36 additions and 40 deletions
@@ -72,6 +72,7 @@ fun AppNavigation() {
composable("settings") { composable("settings") {
SettingsScreen( SettingsScreen(
onNavigateBack = { navController.popBackStack() }, onNavigateBack = { navController.popBackStack() },
onNavigateToLogs = { navController.navigate("logs") },
onLeaveServer = { onLeaveServer = {
// Navigate back to server setup and clear entire back stack // Navigate back to server setup and clear entire back stack
navController.navigate("server_setup") { navController.navigate("server_setup") {
@@ -32,6 +32,8 @@ import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -90,12 +92,6 @@ fun ListsScreen(
val context = LocalContext.current val context = LocalContext.current
val prefsLocal = remember { PreferencesManager.getInstance(context) } val prefsLocal = remember { PreferencesManager.getInstance(context) }
ConnectionStatusAction(prefs = prefsLocal) ConnectionStatusAction(prefs = prefsLocal)
IconButton(onClick = { viewModel.manualSync() }) {
Icon(Icons.Default.Refresh, contentDescription = "Sync")
}
IconButton(onClick = onNavigateToLogs) {
Icon(Icons.Default.List, contentDescription = "Logs")
}
SortMenu(prefs = prefs) SortMenu(prefs = prefs)
IconButton(onClick = onNavigateToSettings) { IconButton(onClick = onNavigateToSettings) {
Icon( Icon(
@@ -408,44 +404,38 @@ private fun RenameListDialog(
@Composable @Composable
private fun SortMenu(prefs: PreferencesManager) { private fun SortMenu(prefs: PreferencesManager) {
val context = LocalContext.current
var expanded by remember { mutableStateOf(false) }
val currentOrder by prefs.sortOrder.collectAsState(initial = prefs.getSortOrder()) val currentOrder by prefs.sortOrder.collectAsState(initial = prefs.getSortOrder())
var expanded by remember { mutableStateOf(false) }
val label = when (currentOrder) {
PreferencesManager.SORT_UPDATED_DESC -> "Updated ↓"
PreferencesManager.SORT_UPDATED_ASC -> "Updated ↑"
PreferencesManager.SORT_NAME_ASC -> "Name AZ"
PreferencesManager.SORT_NAME_DESC -> "Name ZA"
else -> "Sort"
}
Box { Box {
IconButton(onClick = { expanded = true }) { TextButton(onClick = { expanded = true }) {
Icon(Icons.Default.Sort, contentDescription = "Sort") Text(label)
} }
androidx.compose.material3.DropdownMenu( DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
expanded = expanded, DropdownMenuItem(
onDismissRequest = { expanded = false }, text = { Text("Updated (newest first)") },
) { onClick = { prefs.setSortOrder(PreferencesManager.SORT_UPDATED_DESC); expanded = false },
@Composable )
fun ItemOption( DropdownMenuItem(
label: String, text = { Text("Updated (oldest first)") },
value: String, onClick = { prefs.setSortOrder(PreferencesManager.SORT_UPDATED_ASC); expanded = false },
) { )
androidx.compose.material3.DropdownMenuItem( DropdownMenuItem(
text = { text = { Text("Name (AZ)") },
Row(verticalAlignment = Alignment.CenterVertically) { onClick = { prefs.setSortOrder(PreferencesManager.SORT_NAME_ASC); expanded = false },
Text(label) )
if (currentOrder == value) { DropdownMenuItem(
Spacer(modifier = Modifier.weight(1f)) text = { Text("Name (ZA)") },
Text("") onClick = { prefs.setSortOrder(PreferencesManager.SORT_NAME_DESC); expanded = false },
} )
}
},
onClick = {
prefs.setSortOrder(value)
expanded = false
},
)
}
ItemOption("Updated (newest first)", PreferencesManager.SORT_UPDATED_DESC)
ItemOption("Updated (oldest first)", PreferencesManager.SORT_UPDATED_ASC)
ItemOption("Name (AZ)", PreferencesManager.SORT_NAME_ASC)
ItemOption("Name (ZA)", PreferencesManager.SORT_NAME_DESC)
} }
} }
} }
@@ -16,6 +16,7 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material.icons.filled.DarkMode import androidx.compose.material.icons.filled.DarkMode
import androidx.compose.material.icons.filled.LightMode import androidx.compose.material.icons.filled.LightMode
import androidx.compose.material.icons.filled.List
import androidx.compose.material.icons.filled.SettingsBrightness import androidx.compose.material.icons.filled.SettingsBrightness
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
@@ -71,6 +72,7 @@ import android.net.Uri
fun SettingsScreen( fun SettingsScreen(
onNavigateBack: () -> Unit, onNavigateBack: () -> Unit,
onLeaveServer: () -> Unit = {}, onLeaveServer: () -> Unit = {},
onNavigateToLogs: () -> Unit = {},
) { ) {
val context = LocalContext.current val context = LocalContext.current
val preferencesManager = remember { PreferencesManager.getInstance(context) } val preferencesManager = remember { PreferencesManager.getInstance(context) }
@@ -144,6 +146,9 @@ fun SettingsScreen(
}, },
actions = { actions = {
ConnectionStatusAction(prefs = preferencesManager) ConnectionStatusAction(prefs = preferencesManager)
IconButton(onClick = onNavigateToLogs) {
Icon(Icons.Default.List, contentDescription = "Logs")
}
}, },
colors = colors =
TopAppBarDefaults.topAppBarColors( TopAppBarDefaults.topAppBarColors(