fix: add navigation to Logs screen from Settings and Lists screens
This commit is contained in:
+1
@@ -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") {
|
||||||
|
|||||||
+30
-40
@@ -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 A–Z"
|
||||||
|
PreferencesManager.SORT_NAME_DESC -> "Name Z–A"
|
||||||
|
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 (A–Z)") },
|
||||||
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 (Z–A)") },
|
||||||
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 (A–Z)", PreferencesManager.SORT_NAME_ASC)
|
|
||||||
ItemOption("Name (Z–A)", 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(
|
||||||
|
|||||||
Reference in New Issue
Block a user