From 5ce9ca9e6272a9674f5e708b481e4d27532f924b Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Thu, 28 May 2026 01:09:33 -0400 Subject: [PATCH] fix(android): NowPlaying go-to-album/artist navigates atomically (audit v3 Bug-5) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The kebab "Go to album/artist" did popBackStack() then navigate() — two transactions, leaving a visible frame on whichever shell tab sat under NowPlaying before the detail pushed. Replaced with a single navigate(...) { popUpTo(NowPlaying) { inclusive = true } } so the modal is removed and the detail pushed in one atomic transaction, no intermediate frame. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../minstrel/player/ui/NowPlayingScreen.kt | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/android/app/src/main/java/com/fabledsword/minstrel/player/ui/NowPlayingScreen.kt b/android/app/src/main/java/com/fabledsword/minstrel/player/ui/NowPlayingScreen.kt index 8c3bb295..3a770dfc 100644 --- a/android/app/src/main/java/com/fabledsword/minstrel/player/ui/NowPlayingScreen.kt +++ b/android/app/src/main/java/com/fabledsword/minstrel/player/ui/NowPlayingScreen.kt @@ -67,6 +67,7 @@ import com.fabledsword.minstrel.nav.ArtistDetail import com.fabledsword.minstrel.nav.HERO_KEY_NOW_PLAYING_COVER import com.fabledsword.minstrel.nav.LocalAnimatedContentScope import com.fabledsword.minstrel.nav.LocalSharedTransitionScope +import com.fabledsword.minstrel.nav.NowPlaying import com.fabledsword.minstrel.nav.Queue import com.fabledsword.minstrel.shared.widgets.LikeButton import com.fabledsword.minstrel.shared.widgets.trackactions.TrackActionsButton @@ -293,13 +294,18 @@ private fun BottomActionsRow( TrackActionsButton( track = track, hideQueueActions = true, + // Single atomic transaction — navigate to the detail while + // popping NowPlaying off the back stack, so there's no + // intermediate frame on the shell tab underneath (Bug-5). onNavigateToAlbum = { id -> - navController.popBackStack() - navController.navigate(AlbumDetail(id)) + navController.navigate(AlbumDetail(id)) { + popUpTo(NowPlaying) { inclusive = true } + } }, onNavigateToArtist = { id -> - navController.popBackStack() - navController.navigate(ArtistDetail(id)) + navController.navigate(ArtistDetail(id)) { + popUpTo(NowPlaying) { inclusive = true } + } }, ) }