From 38679c4959862e01f22af96b214dd563c309d0a2 Mon Sep 17 00:00:00 2001 From: austinried <4966622+austinried@users.noreply.github.com> Date: Sat, 26 Sep 2026 03:15:14 +0000 Subject: [PATCH] address feedback: focus detail screens anywhere in the stack, brighter sheet - navigateDetail scans the whole back stack and pops back to a matching album/artist/ playlist, not just the top, so artist -> album -> now playing -> view artist focuses the existing artist instead of pushing a second one - raise the sheet container to surfaceContainerHigh so it reads against the background behind it --- app/src/main/kotlin/com/subtracks/ui/AppRoot.kt | 16 +++++++++++++--- .../subtracks/ui/components/ItemContextMenu.kt | 1 + .../com/subtracks/ui/library/LibraryScreen.kt | 1 + 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/subtracks/ui/AppRoot.kt b/app/src/main/kotlin/com/subtracks/ui/AppRoot.kt index a6bca62d..cbc09266 100644 --- a/app/src/main/kotlin/com/subtracks/ui/AppRoot.kt +++ b/app/src/main/kotlin/com/subtracks/ui/AppRoot.kt @@ -52,6 +52,7 @@ import androidx.lifecycle.ViewModelStoreOwner import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner +import androidx.navigation.NavBackStackEntry import androidx.navigation.NavType import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -187,9 +188,18 @@ private fun MainNavigation() { value: String, route: String, ) { - val top = navController.currentBackStackEntry - if (top?.destination?.route == pattern && top.arguments?.getString(argument) == value) return - navController.navigate(route) + val matches: (NavBackStackEntry?) -> Boolean = { entry -> + entry?.destination?.route == pattern && entry.arguments?.getString(argument) == value + } + if (matches(navController.currentBackStackEntry)) return + if (navController.currentBackStack.value.none(matches)) { + navController.navigate(route) + return + } + var guard = navController.currentBackStack.value.size + while (guard-- > 0 && !matches(navController.currentBackStackEntry) && navController.popBackStack()) { + // pop until the matching entry is back on top + } } LaunchedEffect(Unit) { playbackController.connect() } LaunchedEffect(Unit) { if (nowPlayingOpen) nowPlayingProgress = 1f } diff --git a/app/src/main/kotlin/com/subtracks/ui/components/ItemContextMenu.kt b/app/src/main/kotlin/com/subtracks/ui/components/ItemContextMenu.kt index b48e9d0f..f5774296 100644 --- a/app/src/main/kotlin/com/subtracks/ui/components/ItemContextMenu.kt +++ b/app/src/main/kotlin/com/subtracks/ui/components/ItemContextMenu.kt @@ -141,6 +141,7 @@ fun ItemContextMenu( onDismissRequest = { dismiss() }, sheetState = sheetState, dragHandle = null, + containerColor = MaterialTheme.colorScheme.surfaceContainerHigh, ) { MenuHeader(target) when (target) { diff --git a/app/src/main/kotlin/com/subtracks/ui/library/LibraryScreen.kt b/app/src/main/kotlin/com/subtracks/ui/library/LibraryScreen.kt index 4ba142bd..bac39527 100644 --- a/app/src/main/kotlin/com/subtracks/ui/library/LibraryScreen.kt +++ b/app/src/main/kotlin/com/subtracks/ui/library/LibraryScreen.kt @@ -528,6 +528,7 @@ fun LibraryScreen( ModalBottomSheet( onDismissRequest = { showOptions = false }, dragHandle = null, + containerColor = MaterialTheme.colorScheme.surfaceContainerHigh, ) { ListOptionsSheet( listQuery = listQuery,