AppBar headers on AlbumDetail / ArtistDetail / PlaylistDetail now
render the real title during the Loading state instead of the
"Album" / "Artist" / "Playlist" placeholder. Mirrors Flutter's
go_router extra: seed pattern.
Implementation:
* DetailSeedCache — process-singleton with three LRU buckets
(albums / artists / playlists, 32 entries each). Hilt-injected
into MainActivity and exposed via LocalDetailSeedCache so any
composable can stash before navigating.
* AlbumCard / ArtistCard / PlaylistCard stash their Ref on click;
every existing nav call site automatically benefits — no
callback shape change needed.
* Each detail VM peeks the cache in refresh() and emits
Loading(seed) so the AppBar reads from the carried seed. State
carries across pull-to-refresh too (refresh keeps the seed of
the previous Success / Loading rather than blanking to "Album").
* AlbumDetailUiState.Loading, ArtistDetailUiState.Loading, and
PlaylistDetailUiState.Loading evolved from data object to
data class Loading(val seed: T?) — backwards-compatible
pattern-matching with is checks.
Track-level "Go to album" / "Go to artist" call sites (TrackRow
and NowPlaying TrackActions) only have an id, no Ref, so the
AppBar still shows the placeholder for those — matches Flutter.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>