Skip to content

Add the watch's queue and now-playing screens (issue #276) - #283

Merged
mapitman merged 1 commit into
mainfrom
issue-276-wear-ui
Sep 2, 2026
Merged

mapitman merged 1 commit into
mainfrom
issue-276-wear-ui

Conversation

@mapitman

@mapitman mapitman commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Summary

Step 6 of #276 (see #278-282 for steps 1-5) -- the last step for phase 1. Replaces the placeholder MainActivity screen with two real Wear Compose screens over a SwipeDismissableNavHost:

  • QueueScreen: the local (synced) Next Up list as Chips, read-only (no reorder/remove -- those stay phone-side edits that sync down). Tapping an episode starts it via WearPlaybackController and navigates to the now-playing screen.
  • NowPlayingScreen: title/feed/position and a play/pause Chip, a thin pass-through to WearPlaybackController's state -- no seek bar/chapters/speed controls, trimmed the same way WearPlaybackUiState itself is.

QueueViewModel/NowPlayingViewModel are both thin StateFlow pass-throughs over QueueRepository/WearPlaybackController, mirroring :app's QueueViewModel/in-page player relationship to their own equivalents.

This closes out phase 1 (issue #276) -- phase 2 (#277) is sending downloaded episodes to the watch for offline playback.

Test plan

  • ./gradlew assembleDebug testDebugUnitTest lintDebug passes across :app/:core/:wear
  • Full end-to-end manual verification on the mycasts_wear_test emulator, since no phone pairing is available in this environment (same caveat as the sync bridge PR): seeded a test episode directly into the watch's local database, launched the app, confirmed the queue Chip renders correctly, tapped it, confirmed navigation to the now-playing screen, confirmed real audio actually streamed and played over the emulator's own network connection, and confirmed auto-advance correctly emptied the queue and reset the UI to "Nothing playing" once the episode finished

Step 6 of Wear OS phase 1 -- the last step before this is a real,
usable watch app. Replaces the placeholder MainActivity screen with
two Wear Compose screens over a SwipeDismissableNavHost:

- QueueScreen: the local (synced) Next Up list as Chips, read-only
  (no reorder/remove -- those stay phone-side edits that sync down).
  Tapping an episode starts it via WearPlaybackController and
  navigates to the now-playing screen.
- NowPlayingScreen: title/feed/position and a play/pause Chip, a
  thin pass-through to WearPlaybackController's state -- no seek
  bar/chapters/speed controls, trimmed the same way
  WearPlaybackUiState itself is.

QueueViewModel/NowPlayingViewModel are both thin StateFlow
pass-throughs over QueueRepository/WearPlaybackController, mirroring
:app's QueueViewModel/in-page player relationship to their own
equivalents.

Verified end-to-end on the mycasts_wear_test emulator: seeded a test
episode directly into the watch's local database (no phone pairing
available in this environment -- see the sync bridge PR's same
caveat), launched the app, confirmed the queue Chip renders, tapped
it, confirmed navigation to the now-playing screen, confirmed real
audio actually streamed and played over the emulator's network
connection, and confirmed auto-advance correctly emptied the queue
and reset the UI to "Nothing playing" once the episode finished.
@mapitman
mapitman merged commit e3bc30c into main Sep 2, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant