Skip to content

Fix RTL layout on Android TV details screen and top toolbar - #1249

Merged
RadicalMuffinMan merged 2 commits into
Moonfin-Client:mainfrom
controlfix87:fix/rtl-android-tv-details-and-toolbar
Aug 23, 2026
Merged

Fix RTL layout on Android TV details screen and top toolbar#1249
RadicalMuffinMan merged 2 commits into
Moonfin-Client:mainfrom
controlfix87:fix/rtl-android-tv-details-and-toolbar

Conversation

@controlfix87

@controlfix87 controlfix87 commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Summary

Split out of #1239 at reviewer request — this PR contains only the RTL fixes, with the remote-control feature left in #1239.

  • Details screen action-button row's D-pad Left/Right was hardcoded to a fixed index step, so a physical Right press moved focus left under RTL. The step direction now flips under RTL, matching the pattern already used in LockedFocusRow/focusable_action_bar.dart.
  • The action-button row and the Cast/Crew/Studios/Details/Similar tab bar stayed pinned to the physical-left edge instead of following the RTL locale; both now use AlignmentDirectional so they sit on the correct (reading-start) side.
  • Mirrored the top toolbar under RTL: icon row order, avatar, and clock now mirror instead of staying pinned to a fixed LTR layout. Also fixed the avatar's hardcoded "arrowRight jumps to Home" special case (now handled generically by the existing geometry-based toolbar traversal) and made the Settings button's edge-swallow/inline-libraries-trigger jump RTL-aware. The clock's HH:MM text is pinned to LTR text direction so Unicode bidi can't reorder the digit groups (same fix already applied to the Quick Connect code).

Related

Platform

  • Android (Android TV)
  • tvOS

Reverses the earlier product decision to keep the top navbar pinned to a
fixed LTR order across all locales. The icon row (Home...Settings), the
avatar, and the clock now all mirror under RTL like the rest of the app:

- Removed the outer Directionality(ltr) wrapper around the toolbar so the
  icon row's Row and the start/end Aligns follow ambient Directionality.
- Switched the avatar/back-arrow slot and the clock slot from physical
  Alignment.centerLeft/centerRight to AlignmentDirectional.centerStart/
  centerEnd, so the avatar now sits on the physical-right and the clock on
  the physical-left under RTL.
- Removed the avatar's hardcoded arrowRight-jumps-to-Home special case; the
  existing geometry-based _moveWithinToolbar already handles this correctly
  regardless of which side the row mirrors to.
- Made the Settings button's edge-swallow and its jump to the inline
  libraries trigger button RTL-aware, since Settings is no longer always
  the toolbar's rightmost item.
- Pinned TopMusicBar's own Directionality to ltr explicitly, since it was
  previously shielded by the removed wrapper and hasn't been audited for
  RTL - keeps its behavior unchanged.
- Guarded the clock's HH:MM text with an explicit LTR textDirection so the
  Unicode bidi algorithm can't reorder the digit groups, same fix already
  applied to the Quick Connect code display.
The movie/show details screen's action button row (Play/Subtitles/
Trailer/etc.) had its D-pad Left/Right hardcoded to a fixed index step,
so a physical Right press moved focus left under RTL. The step
direction now flips under RTL, matching the fix already applied
elsewhere (LockedFocusRow, focusable_action_bar.dart). The action row
and the Cast/Crew/Studios/Details/Similar tab bar also hugged the
physical-left edge regardless of locale; both now use
AlignmentDirectional so they sit on the correct (reading-start) side
under RTL.

Split out of Moonfin-Client#1239 at reviewer request.
@RadicalMuffinMan
RadicalMuffinMan merged commit 5d08d81 into Moonfin-Client:main Aug 23, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants