- 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