Introduce a Connecting state so the UI reflects user intent immediately, centralize navigation in MainActivity via state transitions, and replace the pauseRequested volatile flag with controller state as single source of truth. Made-with: Cursor
2.3 KiB
2.3 KiB
UI polish: navigation, pause, artwork, scrollability
Date: 2026-03-09
Task description
Five UI/UX improvements after manual testing.
Changes made
1. Auto-navigate to Now Playing on station tap (StationListScreen.kt)
onPlaycallback now callsonNavigateToNowPlaying()immediately afterviewModel.playStation().
2. Auto-navigate back to station list on stop (NowPlayingScreen.kt)
LaunchedEffect(playbackState)watches forPlaybackState.Idleand callsonBack().- Removed the "Nothing playing" dead-end screen.
3. Pause/resume support
- PlaybackState.kt: Added
Paused(station, metadata, sessionStartedAt)state. - RadioController.kt: Added
pause()method sendingACTION_PAUSE. - RadioPlaybackService.kt:
handlePause()setspauseRequested = trueand stops engine. InhandlePlay's finally block, if paused: updates state toPaused, keeps listening session alive, doesn't cleanup service. On resume (ACTION_PLAY with same station while paused), reuses the session. - NowPlayingViewModel.kt: Added
pause()andresume(). Session timer keeps ticking during pause. - NowPlayingScreen.kt: Transport controls adapt to state — paused shows large play/resume button + stop; playing shows skip-ahead + pause + stop.
4. Artwork in mini player and station list
- MiniPlayer.kt: Shows 40dp rounded artwork thumbnail from ICY StreamUrl or station's
defaultArtworkUrl. Shows "Paused"/"Reconnecting..." subtitle as appropriate. - StationListScreen.kt: Station rows show a 36dp circular artwork thumbnail from
defaultArtworkUrl(EXTIMG) when available.
5. Scrollability / drag-n-drop readiness
- LazyColumn was already scrollable. Added
padding(vertical = 4.dp)to station rows for better touch targets. All items have stable keys (station.id,"playlist_header_${playlist.id}") ready for reorderable integration.
Files changed
app/src/main/java/.../service/PlaybackState.ktapp/src/main/java/.../service/RadioController.ktapp/src/main/java/.../service/RadioPlaybackService.ktapp/src/main/java/.../ui/screens/nowplaying/NowPlayingScreen.ktapp/src/main/java/.../ui/screens/nowplaying/NowPlayingViewModel.ktapp/src/main/java/.../ui/screens/stationlist/StationListScreen.ktapp/src/main/java/.../ui/components/MiniPlayer.kt