Skip to content

Operator Setup tab rail is not scrollable — System clipped on small phones #134

Description

@erik-sutton95

Maintainer + testers: on smaller phones, Operator Setup’s System tab is gone. You have to rotate to portrait to reach it.

What went wrong?

Seven tabs (Link → Sharing → View Assist → Controls → Display → Storage → System). Landscape uses a vertical rail that does not scroll. Each row is 43 pt + 5 pt gap (≈343 pt plus padding). Landscape height on SE / Mini / many phones is ~375 pt after the Operator Setup header and safe area — Storage/System clip off the bottom. Portrait already uses a horizontal ScrollView / horizontalScroll, so rotating “to vertical” is the workaround.

Already in tree

iOS SettingsRootView:

  • Portrait: settingsTabStripScrollView(.horizontal)
  • Landscape: settingsRailVStack of tabs, .frame(maxHeight: .infinity, alignment: .top), no ScrollView

Android OperatorSetup.kt:

  • Portrait: SettingsTabStriphorizontalScroll
  • Landscape: SettingsTabRailColumn(fillMaxHeight), no verticalScroll

Content panes already scroll (SettingsTabScrollArea / verticalScroll + ScrollMoreCue). The tab list does not.

Do

  • iOS landscape rail: vertical ScrollView (indicators optional). System must be reachable on a 375-pt-tall landscape (SE-class) without rotating.
  • Keep hit targets; do not shrink the 43 pt rows just to fake a fit.
  • Android SettingsTabRail: same verticalScroll. Cue if the rail can scroll (content already has ScrollMoreCue).
  • Portrait strip stays horizontally scrollable; confirm System is on-screen or a flick away on a 320-pt-wide phone.
  • A11y: System is still a tab, not only reachable by guessing a scroll.
  • Layout test: SE-class landscape viewport — last tab’s frame is inside the rail scroll content, not clipped by the parent.

Out of scope

Dropping tabs. Moving System into another pane. Changing the seven-tab set.

Done when

Physical small phone, landscape: you can scroll the rail to System (legal / GitHub / keep screen awake). Portrait still works. Both shells.

Verify

Physical iPhone SE-class or Mini, landscape Operator Setup from live and from home. Android small/short landscape. just native-check / just android-check for the layout test.

Metadata

Metadata

Assignees

Labels

P1High priority — important for current cyclearea:androidAndroid / Jetpack Compose workarea:iosiOS SwiftUI shell (ios/OpenPocketCine)area:uiGeneral UI/UX, layout, design systembugSomething isn't workingreadyTriaged and ready to pick up

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions