Skip to content

Make the app usable with a d-pad on Android TV - #486

Merged
LivingWithHippos merged 1 commit into
LivingWithHippos:masterfrom
ElCruncharino:feat/tv-focus-reachability
Aug 19, 2026
Merged

LivingWithHippos merged 1 commit into
LivingWithHippos:masterfrom
ElCruncharino:feat/tv-focus-reachability

Conversation

@ElCruncharino

Copy link
Copy Markdown
Contributor

Every interactive control now draws a colored ring while focused, since there was often no visible feedback for where the remote's selection currently was. Covers buttons, FABs, checkboxes, list item cards and the toolbar's back and overflow icons.

A number of controls were not actually reachable with the d-pad in the first place. FloatingActionButtons across the app were clickable but never focusable. NestedScrollView also claims focus for itself in its own constructor, which hid the real content underneath it, so scrolling screens now use a small NonFocusableNestedScrollView instead.

This also fixes the two remote issues described in #376: pressing back while focus is inside a long list now moves focus to the bottom navigation bar instead of doing nothing, and the landscape torrents list's refresh button can now be reached with the d-pad (its nextFocusDown pointed at a view id that does not exist in that layout).

Bundled in is one small unrelated fix: a refresh button was missing from the portrait downloads and torrents lists, already present in landscape.

Validated on a real Google TV Streamer, but this touches a lot of screens so more testing and review is welcome.

Related to #376
Related to #452

Every interactive control now draws a colored ring while focused, covering
buttons, FABs, checkboxes, the toolbar's back and overflow icons, and list
item cards. The ring is a foreground overlay invisible unless focused, so
nothing changes for touch users.

A number of controls were not actually reachable by d-pad in the first
place. FloatingActionButtons across the app were clickable but never
focusable. NestedScrollView also claims focus for itself in its own
constructor, hiding the real content underneath it, so scrolling screens
now use a small NonFocusableNestedScrollView instead. The color picker's
quick select swatches are plain Views built in code and are not focusable
by default either, so they got the same treatment.

Two navigation bugs are fixed too. Pressing back while focus is inside a
long list now moves focus to the bottom nav instead of doing nothing,
since there was otherwise no way to reach the nav bar again from deep in
an endless list. The toolbar's overflow button, being first in the
layout, was silently grabbing default focus on every new screen, so
focus now lands on the bottom nav there as well. The landscape torrents
list also had its nextFocusDown pointed at a view id that does not exist
in that layout, and the portrait list had no focus wiring at all.

Bundled in is one small unrelated fix: a refresh button was missing from
the portrait downloads and torrents lists, already present in landscape.

Related to LivingWithHippos#376
Related to LivingWithHippos#452
@LivingWithHippos
LivingWithHippos merged commit 28fc047 into LivingWithHippos:master Aug 19, 2026
3 checks passed
@ElCruncharino
ElCruncharino deleted the feat/tv-focus-reachability branch September 24, 2026 17:12
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.

2 participants