diff --git a/android/app/src/main/kotlin/com/novasonic/app/ui/AppNavigation.kt b/android/app/src/main/kotlin/com/novasonic/app/ui/AppNavigation.kt index a2c693a..929bb89 100644 --- a/android/app/src/main/kotlin/com/novasonic/app/ui/AppNavigation.kt +++ b/android/app/src/main/kotlin/com/novasonic/app/ui/AppNavigation.kt @@ -126,16 +126,6 @@ fun AppNavigation() { backDispatcher.addCallback(cb) onDispose { cb.remove() } } - DisposableEffect(exploreOverlayBack, backDispatcher) { - val action = exploreOverlayBack - if (action == null || backDispatcher == null) return@DisposableEffect onDispose {} - val cb = object : OnBackPressedCallback(true) { - override fun handleOnBackPressed() { action() } - } - backDispatcher.addCallback(cb) - onDispose { cb.remove() } - } - fun coverUrl(coverId: String?) = repo.coverArtUrl(coverId, 600) fun heroCoverUrl(coverId: String?) = repo.coverArtUrl(coverId, 1000) @@ -152,6 +142,20 @@ fun AppNavigation() { val currentRoute = currentBackEntry?.destination?.route val isTopLevel = TopLevel.entries.any { it.route == currentRoute } + // Root-level back for the Erkunden (Apple) overlay. Keyed on currentBackEntry as well, so the + // callback is re-added (bumped to the top of the OnBackPressedDispatcher) after every navigation + // — otherwise, once the NavHost re-registers its own callback during an album drill-down or tab + // switch, it could regain priority and pop Erkunden → Home on the next back ("sometimes" bug). + DisposableEffect(exploreOverlayBack, backDispatcher, currentBackEntry) { + val action = exploreOverlayBack + if (action == null || backDispatcher == null) return@DisposableEffect onDispose {} + val cb = object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { action() } + } + backDispatcher.addCallback(cb) + onDispose { cb.remove() } + } + val bgGlow = Brush.radialGradient( colors = listOf(Color(0x0AE8A020), Color(0x00000000)), center = Offset.Unspecified, radius = 900f,