- Wrap SettingsScreen in Scaffold to fix invisible text in dark mode
- Fix notification showing raw ICY metadata instead of parsed track info
- Add proper white-on-transparent notification icon
- Create branded adaptive launcher icon (amber tower on BlueGray900)
- Add edge-to-edge support with proper window inset handling
- Add About section to Settings with version and app info
- Enable BuildConfig generation for version display
Made-with: Cursor
Redesign Now Playing screen with blurred album art background, dominant
color extraction, bounce marquee for long text, cross-fade artwork
transitions, icon-labeled timers, and stream quality badge (bitrate,
codec, SSL). Add StreamInfo propagation from connection through to UI.
Fix MediaCodec PTS spam by providing incrementing presentation timestamps.
Made-with: Cursor
Add tabbed playlist UI with SomaFM as a built-in library including live
listener counts, station hiding, and stream quality selection. Implement
settings panel with quality preferences, listening history, and playlist
import/export improvements. Includes DB migrations 1-4, SomaFM seed
data, stream resolver, and now-playing history logging.
Made-with: Cursor
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
- Star icons now use distinct tint colors (primary vs faded) for clear state
- Station switching no longer races — old playback job is cancelled before new
- Skip-ahead drops ~1s of buffered audio per tap via atomic counter
- Custom SocketFactory with SO_RCVBUF=16KB and TCP_NODELAY for minimal TCP buffering
- Catch-up drain: discards pre-buffered frames until network reads block (live edge)
- AudioTrack PERFORMANCE_MODE_LOW_LATENCY for smallest hardware buffer
Made-with: Cursor
Covers project scaffolding, Room data layer, PLS/M3U import/export,
audio engine stages (IcyParser, Mp3FrameSync, StreamConnection),
engine integration, foreground service with Stay Connected,
Compose UI (station list, now playing, settings), album art
resolution with MusicBrainz fallback chain, and final integration.
Made-with: Cursor
Design doc covers: custom raw audio pipeline (OkHttp → IcyParser →
Mp3FrameSync → MediaCodec → AudioTrack), foreground service with
aggressive reconnection, Room DB with future-proofed schema, Compose UI,
and ICY metadata with album art fallback chain.
Made-with: Cursor