feat: open watch again from the watched check, and give seasons a context menu
Nobody has claimed this yet.
- Dominant language
- Kotlin
- Stars
- 69
- Forks
- 8
- Avg merge
- 1d 9h
- Merged PRs (30d)
- 12
Description
Is your feature request related to a problem? Please describe.
Marking something as watched a second time is harder than it should be, and the most obvious control does the opposite of what it looks like.
On a movie, show or episode that is already watched, the purple check in the action bar is the natural "I watched this again" affordance. Tapping it opens the Remove from History confirmation instead. A filled check reads as "done", so tapping it again reads as "done again" — not "undo everything". Re-watching is possible today, but only by opening the overflow menu and picking Watch again, which is a second tap behind a menu.
Seasons are worse:
- The overflow on a season poster skips any menu and goes straight to the destructive Remove from History confirmation, unlike shows, movies and episodes, which all get a proper context menu first.
- The white watched chip on a season poster, and on watched episode rows inside a season, is decorative. Tapping it does nothing at all.
- Watch again is missing entirely from the overflow of a watched episode row inside a season — it only offers Remove from History.
There is also a bug underneath: addToWatched(season) filters out episodes that are already watched. On a fully watched season that resolves to an empty batch, so re-watching a season silently sends nothing.
Describe the solution you would like
Make the watched check mean "watched again" everywhere, and keep removal where destructive actions belong — behind the overflow menu.
- Movie / show / episode details — tapping the check while watched opens the same watch again flow the overflow menu already uses (date selection; for shows, the existing hold-to-confirm first). Removal stays in the overflow.
- Season overflow — opens a context sheet like every other media type, with Watch again and Remove from History, instead of jumping straight to the destructive confirmation.
- Season watched chip — tapping it starts the same watch again flow.
- Watched episode row inside a season — the overflow gains Watch again; tapping the watched chip on the episode cover opens that same menu.
- Season re-watch fix — a completed season re-watches every released episode; a partially watched season still fills only the gaps.
The user setting that disables multiple plays keeps its current meaning: with it on, the check still opens the removal confirmation and Watch again stays hidden, exactly as the overflow menu already behaves.
No new strings are needed — this reuses button_text_watch_again, button_text_track and button_text_remove_from_history, all already translated.
Describe alternatives you have considered
- Leaving the check as remove and relying on the overflow menu. This is the current behaviour. It keeps re-watching two taps deep and leaves the check reading as the opposite of what it does.
- A long press on the check for watch again. Undiscoverable, and the long press on media cards is already taken by the context menu.
- A real season-level
/sync/historyadd. The API accepts aseasons[]payload, so a season could be added in one request instead of fanning out to episode ids. That is a larger data-layer change and can be done separately; the fan-out path already exists and works. - Making the watched chip clickable app-wide. Rejected — the chip appears on every media card in home, discover and lists, where a tap should keep navigating. The change is opt-in per call site.
Additional context
I have this implemented and tested on a device, and I am opening a PR alongside this issue.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Trace the existing watch-again and removal flows from the action bar, season overflow, watched chips, and episode-row menus, then inspect addToWatched(season) and the multiple-plays setting. Done means watched checks and season controls follow the requested watch-again behavior, removal remains behind overflow menus, and completed seasons re-watch every released episode while partial seasons fill only gaps.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, kotlin
- Domain
- mobile
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 25/100