Commit Graph

20 Commits

Author SHA1 Message Date
cottongin
6481d74d95 feat: tabbed station libraries, SomaFM integration, and settings panel
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
2026-03-10 20:16:09 -04:00
cottongin
5dd7a411ed fix: refactor player state machine to eliminate race conditions
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
2026-03-10 05:15:31 -04:00
cottongin
49bbb54bb9 fix: star visibility, station switching, skip-ahead, and latency optimizations
- 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
2026-03-10 04:41:40 -04:00
cottongin
c143483f33 feat: wire album art to UI and handle Android 13+ notification permission
Made-with: Cursor
2026-03-10 03:11:09 -04:00
cottongin
89b58477c9 feat: add album art resolution with MusicBrainz and fallback chain
Made-with: Cursor
2026-03-10 03:07:32 -04:00
cottongin
20daa86b52 feat: add Settings screen with export, history, and track search
Made-with: Cursor
2026-03-10 02:49:38 -04:00
cottongin
7678b2b12a feat: add Now Playing screen with dual timers and latency indicator
Made-with: Cursor
2026-03-10 02:48:26 -04:00
cottongin
30b4bc9814 feat: add Station List screen with playlists, starring, and import
Made-with: Cursor
2026-03-10 02:42:25 -04:00
cottongin
cacbb0d98d feat: add Material 3 theme and screen navigation
Made-with: Cursor
2026-03-10 02:37:26 -04:00
cottongin
ca7b757812 feat: add foreground playback service with Stay Connected reconnection
Made-with: Cursor
2026-03-10 02:30:48 -04:00
cottongin
cfb04d3200 feat: integrate audio engine pipeline with MediaCodec and AudioTrack
Made-with: Cursor
2026-03-10 02:18:36 -04:00
cottongin
7814d682f6 feat: add HTTP stream connection with ICY header support
Made-with: Cursor
2026-03-10 02:14:46 -04:00
cottongin
fd73caf181 fix: correct MP3 frame header values in tests
Made-with: Cursor
2026-03-10 02:01:46 -04:00
cottongin
3d4d163508 feat: add MP3 frame synchronizer with re-sync and validation
Made-with: Cursor
2026-03-10 01:51:24 -04:00
cottongin
1a3a58b8f0 fix: add metaint validation and mid-metadata truncation test
Made-with: Cursor
2026-03-10 01:22:31 -04:00
cottongin
45a946f829 feat: add ICY metadata parser with artist/title extraction
Made-with: Cursor
2026-03-10 01:18:51 -04:00
cottongin
bb14a6af53 fix: sanitize station names and validate URLs in parsers
Made-with: Cursor
2026-03-10 01:12:46 -04:00
cottongin
fcf02c2595 feat: add M3U/PLS import and export with EXTIMG support
Made-with: Cursor
2026-03-10 01:10:07 -04:00
cottongin
b3d22650c7 feat: add Room entities, DAOs, database, and DataStore preferences
Made-with: Cursor
2026-03-10 01:04:55 -04:00
cottongin
2a9b21b67f feat: scaffold Android project with dependencies
Made-with: Cursor
2026-03-10 00:49:16 -04:00