Make Settings scrollable and fix sync-mode radio semantics - #116
Conversation
in-jun
left a comment
There was a problem hiding this comment.
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.
Two accessibility fixes for the Settings screen.
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.role = Role.RadioButtonon.selectableand drop the innerRadioButton's ownonClick(set tonull) so each option is announced as a single radio option with one focus stop, instead of two separately focusable targets.Fixes #48
Fixes #101