Skip to content

Make Settings scrollable and fix sync-mode radio semantics - #116

Merged
in-jun merged 1 commit into
mainfrom
fix/settingsscreen
Jul 18, 2026
Merged

Make Settings scrollable and fix sync-mode radio semantics#116
in-jun merged 1 commit into
mainfrom
fix/settingsscreen

Conversation

@in-jun

@in-jun in-jun commented Jul 18, 2026

Copy link
Copy Markdown
Owner

Two accessibility fixes for the Settings screen.

  • Wrap the settings content Column in verticalScroll(rememberScrollState()) so that at large font scales or in landscape the lower controls (Wi-Fi-only switch, mass-deletion guard) stay reachable instead of being pushed off-screen, matching the pattern already used in SetupScreen.
  • Give the sync-mode rows role = Role.RadioButton on .selectable and drop the inner RadioButton's own onClick (set to null) so each option is announced as a single radio option with one focus stop, instead of two separately focusable targets.

Fixes #48
Fixes #101

@in-jun in-jun left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both changes look correct and match the analysis in #48 and #101.

Scrollability (#48): Wrapping the content Column in verticalScroll(rememberScrollState()) fixes the off-screen-controls problem at large font scales / landscape. Worth noting the modifier ordering differs slightly from SetupScreen: here the .padding(16.dp) sits inside the scroll region while the Scaffold inset .padding(padding) stays outside it. That's actually the better arrangement — the nav-bar inset stays fixed and non-scrollable, and the 16.dp gives the last control trailing space when fully scrolled. No layout regression.

Radio semantics (#101): role = Role.RadioButton on .selectable plus onClick = null on the inner RadioButton is the canonical Compose pattern — the button becomes purely visual and its semantics merge into the single selectable row, so TalkBack announces one correctly-labeled radio option with a single focus stop instead of two targets.

Imports are all used, ModeOption is private with no other call sites, and the change is minimal and self-contained. LGTM.

@in-jun
in-jun merged commit a05c478 into main Jul 18, 2026
1 check passed
@in-jun
in-jun deleted the fix/settingsscreen branch July 18, 2026 15:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant