Remove the unfocused watched control ring #69
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fm/tv-watched-ring"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Outcome
The watched eye no longer looks focused when focus is elsewhere. Justin (2026-11-07): ‘the watches icon on details pages has a border, making it look like it's active/selected.’ This supersedes the older inset-on-ring specification.
Change
Delete only the
option.on && !focusedborder fromTitleControl. Keep the existing open-eye/crossed-eye glyphs, Watched header, Mark as unwatched caption, selected accessibility semantics, and unchanged focus ring/scale/fill. No new colour, token, or icon. Update the local TV spec and Docker developer documentation.Shared-component inventory: before → after
Only Watched sets
TitleOption.on; favourite and watchlist are not controls built by this component.TitleRadioand selected season/filter chips are separate controls and are untouched.Verification
One native same-fixture Details-row before/after comparison covers watched off/on × unfocused/focused (Robolectric SDK 34, 1920×1080). The three unaffected full-frame PNGs are byte-identical before/after; only watched-on/unfocused changes. Visually checked the native comparison: open eye remains distinguishable, and the true focus ring stays on Audio/subtitles or the eye as appropriate.
Added and ran only
TitleCaptureTest.watchedRingBelongsOnlyToFocus. Failing-before: resting watched edge contained exactly three accent pixels. Passing-after: one test, zero failures; both resting states have no accent edge; both focused states keep identical accent edge pixels.Command (through shared-lock wrapper):
No full suite, APK build, TV, or box access. Native proof and test XML:
/root/.treehouse/firstmate-7bab20/2/firstmate/data/tv-watched-ring/(before/,after/,details-action-row-before-after.png; before left, after right; off/unfocused, on/unfocused, off/focused, on/focused top to bottom).Risk
Local presentation only. No action, persistence, navigation, token, or focus-painter change. AI-assisted implementation and PR description.
Review of the watched-ring fix at head
d73796742c1a4dee641576965320c0e086726c21(basefm/tv-round2).Code verdict: APPROVE (
review/code-claude= success).Design verdict: PASS (
review/design-claude= success). No blocking finding.The change. One production line is removed from
TitleControl: theoption.on && !focusedaccent border. The focus ring, scale, fill,selectedsemantics, glyphs and captions are untouched. No colour, token or icon is added.TitleRadiostill usesradioBorder, so that token stays in use.Shared component.
TitleOption.onis set in exactly one place, the Watched control (TitleState.kt:302). I grepped everyTitleOption(in the design and app sources and found no otheron =. Every other user of the component (Play, Restart, Version, Audio and subtitles, trailer, menu, Request, Not interested, Try again, Back, the sheet buttons, the receipt) cannot change. The PR's inventory table matches the code.On state is still readable. The control still switches between the open eye (watched) and the crossed-out eye, the focused caption reads
Mark as unwatchedorMark as watched, and theselectedaccessibility flag is kept. In the native before and after comparison the unfocused watched eye loses its ring and stays clearly different from the crossed eye. The focus rings on Audio and subtitles and on the eye are identical before and after. The three other states are byte-identical to before.Test.
TitleCaptureTest.watchedRingBelongsOnlyToFocusrenders all four watched and focus combinations and scans the control's left edge. Neither resting state has an accent pixel and both have the same edge. Both focused states keep an identical accent edge. The PR reports it failing before (three accent pixels) and passing after. It asserts the rendered result, not wiring.Docs. The spec gains a "Details watched control" paragraph and the README a matching one. Both cite Justin's quote with the date and say the state is carried by glyph, header and caption with no new token. The older "inset accent ring" wording is not in this repository's
spec.md, so nothing contradictory is left.Merge. A merge-tree check against current
fm/tv-round2is clean.Non-blocking notes:
spec.mdstill show the ring. The override paragraph is the pointer. Fold it into the next spec revision.Full report (review 7):
/root/.treehouse/firstmate-7bab20/2/firstmate/data/round2-review/report.md. Not run: Gradle/make, nothing on the box.