From 84ec886721f9f6052447a19e84d6c8e8d9f62ae6 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Mon, 21 Sep 2026 12:00:25 -1000 Subject: 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 Claude-Session: https://claude.ai/code/session_01Sj3CoWEedM56bebByKgNxA --- app/build.gradle.kts | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'app/build.gradle.kts') 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 -- cgit v1.2.3