diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-09-21 12:00:25 -1000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-09-23 22:50:55 -1000 |
| commit | 84ec886721f9f6052447a19e84d6c8e8d9f62ae6 (patch) | |
| tree | aea029473ab9a0fc70deb92a61b0f3f4007798b1 /app/build.gradle.kts | |
| parent | af92823efb95cd8b29a81f244916e56d70b02150 (diff) | |
Add artwork, a real player screen, and queue drag-reorder
Closes three of the four Phase 1 gaps in CLAUDE.md's "Known gaps": artwork was
parsed and passed to the lock screen but never rendered, playback had a
transport bar with no scrubbing or per-show speed, and QueueOrdering.move was
tested but unreachable from any screen. Android Auto real-car verification
stays deferred, per Peter's call.
- Artwork: new Artwork.preferredUrl (episode image falling back to the show's),
resolved once at EpisodeEntity.toMediaItem's MediaMetadata boundary so the
lock screen, Android Auto, the now-playing bar and the new player screen all
read it from one place. Coil3 wired to the app's own OkHttpClient. Pinned to
3.3.0: later releases require a newer Kotlin stdlib or Compose than this
project runs (Compose 1.12 needs compileSdk 37, one above what AGP 8.13.2
supports).
- Player screen: scrubbing (PlayerConnection.seekTo, committed on drag release)
and per-show speed (PlayerViewModel.setShowSpeed persists
SubscriptionEntity.playbackSpeed via a new SubscriptionDao.updateSpeed) --
the field existed since Phase 1 with nothing to reach it. Opened by tapping
the now-playing bar's title/artwork; Up Next moved to its own icon there.
- Queue reorder: drag-and-drop via sh.calvin.reorderable, backed by a new
QueueRepository.reorder that writes the final order once on drag release
rather than per drag step (the gesture reports intermediate positions
continuously).
Coverage baseline drop (62.10% -> 61.15%) is entirely in already-0%-covered
Media3 glue -- see COVERAGE_EXCEPTION. The new pure logic (Artwork,
QueueRepository.reorder) is fully covered by new tests.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Sj3CoWEedM56bebByKgNxA
Diffstat (limited to 'app/build.gradle.kts')
| -rw-r--r-- | app/build.gradle.kts | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b8bfb12..f680a08 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -84,6 +84,18 @@ dependencies { implementation("androidx.compose.material3:material3") implementation("androidx.compose.material:material-icons-extended") + // Artwork loading. Wired to the app's own OkHttpClient (see AppGraph.imageLoader) + // rather than Coil's default, so image fetches share connection pooling and timeouts + // with the rest of the app. Pinned to 3.3.0: 3.4.0+ requires a newer Kotlin stdlib than + // this project's 2.2.21, and 3.6.0+ pulls Compose 1.12, which needs compileSdk 37 -- + // one above the max AGP 8.13.2 supports. + val coil = "3.3.0" + implementation("io.coil-kt.coil3:coil-compose:$coil") + implementation("io.coil-kt.coil3:coil-network-okhttp:$coil") + + // Drag-to-reorder for the queue screen, backing QueueOrdering.move. + implementation("sh.calvin.reorderable:reorderable:3.1.0") + // Media3 is the whole playback stack: ExoPlayer for decode and speed control, // MediaSessionService for lock-screen and Bluetooth transport, and its DownloadManager, // which shares a cache with playback so a partly-downloaded episode streams the remainder |
