The user noticed the mini-player ribbon vanished whenever navigating
into an artist/album/settings screen, and asked for the full-player
transport controls to stay anchored to a fixed spot and for long
titles to marquee like Spotify instead of wrapping.
- Mini-player was owned by MainScreen's own Scaffold, so it unmounted
entirely on any sibling nav destination (ArtistDetail/AlbumDetail/
Settings). Hoisted it to DeepwaveNavHost, wrapping the whole
authenticated NavHost in an outer Scaffold whose bottomBar shows
the mini-player on every route except Login and NowPlaying itself.
MainScreen no longer needs PlayerViewModel at all as a result -
reverted it to a single previewable composable.
- That hoist exposed a real inset bug: MiniPlayerBar is a plain Row,
not a Material3 NavigationBar/BottomAppBar, so it doesn't handle
system-bar insets on its own - it only ever looked right because it
sat above the inset-aware BottomNavBar in the same Column. Standing
alone, it rendered underneath the gesture nav bar. Fixed with an
explicit navigationBarsPadding().
- NowPlayingScreen: the artwork/title/artist block now gets weight(1f)
in the Column, so the seek bar and transport controls always land
at a fixed distance from the bottom regardless of title length -
previously a long title wrapped to 2-3 lines and pushed the controls
down inconsistently.
- Long titles now use maxLines = 1 + Modifier.basicMarquee() instead
of wrapping, on both NowPlayingScreen and MiniPlayerBar's title.
Fixed navController.currentBackStackEntryAsState()-based route
comparison to use route-string equality rather than the hasRoute<T>()
generic (that API isn't available in navigation-compose 2.9.8, this
project's pinned version - only the KClass-less String overload
exists here).
Verified on-device: mini-player now persists correctly through
Home -> Album Detail -> Now Playing and back, sits above the system
nav bar, and the transport controls stay in the same position across
tracks with short and long titles.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>