Repository navigation
Continue Watching home-screen widget - #17
Merged
Merged
Conversation
A 4x3 card showing the newest unfinished title: still, badge, progress bar, title and episode name. With nothing to continue it shows an empty state and opens Home. Everything on the card comes from Room, so it is complete offline; only the poster needs the network. RemoteViews, not Glance, so there is no new dependency. Glance's Image cannot fetch anything either, so both routes decode the bitmap in the app; all Glance adds here is declarative syntax. A RemoteViews widget also cannot scroll without a RemoteViewsService and an R8 keep rule, and the launcher shortcut already jumps straight to the newest item, so one card matches what the app does. Reading and drawing both happen in the app's process; only inflation happens in the launcher's. So onUpdate reads Room inside goAsync() and a flow subscription from the Application scope repaints on every progress change. No WorkManager and no snapshot: a periodic job would be inexact, Doze-deferred, and would leave the first render showing nothing for up to its interval. continueWatching follows the active profile, so switching profiles repaints too. PlaybackSession is untouched - every mutation already flows through WatchProgressRepository. The tap is a TMDB VIEW intent, which MainActivity's existing deep link path already turns into Details, so no navigation code is needed. Details and Home use different request codes and data, so the two PendingIntents stay distinct. The layout uses plain colour resources rather than theme attributes, because a RemoteViews layout is inflated in the launcher and ?attr/... would resolve against the launcher's theme. values-v31 aliases the system Material You roles for dynamic colour at reduced fidelity: it follows the wallpaper, not the app's dynamicColor setting, because a resource alias cannot be conditional. Dark mode follows the system setting, not AppSettings.themeMode - a user who forces Light while the system is dark gets a dark widget. WatchProgress.badge() moves to presentation/components so the rail and the widget cannot drift on the up-next case, where the fraction is 0 and an unconditional progress bar would read as broken. Not verified on a device; CLAUDE.md says the maintainer tests. Compiled and assembled, and the receiver was checked in the merged manifest. The release build's R8 behaviour was not exercised. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a 4x3 home-screen card showing the newest unfinished title: still, badge, progress bar, title and episode name. With nothing to continue it shows an empty state and opens Home.
Stacked on #16 (both branches touch \docs/ROADMAP.md\ and \CLAUDE.md). *Base is
oadmap/refresh, not \main* — merge #16 first and this retargets automatically.
No new dependencies
Two deliberate rejections, both to keep \libs.versions.toml\ untouched:
Behaviour worth knowing
Reduced fidelity, deliberately
Both are noted in the code and the manifest comments so they are not mistaken for bugs.
Verified
Not verified
Not tested on a device. Per \CLAUDE.md\ the maintainer tests. Widgets genuinely cannot be JVM-tested, so please place it on the home screen and check the forward/back round trip and the empty state before merging. Release-build R8 behaviour was also not exercised.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com