Skip to main content

System bars

System bars are the persistent chrome of the AAOS experience: navigation affordances, app entry points, and system-level actions that frame application content.

MVP implementable spec: specs/system-bar.md (Views-first). This page is the overview; the spec is the contract.

Purpose

  • Provide consistent wayfinding across OEM launchers and system UI.
  • Remain usable under driving restrictions with large targets.
  • Host OEM brand marks via tokens without custom forks.

Typical contents

ElementNotes
Home / map / app grid entryCore navigation
HVAC peek / shortcutMay deep-link to HVAC
Media mini controlsOptional; see media
Notifications shade entryRestriction-aware
OEM Quick controlsExtension slots

Exact layout is OEM-specific; Cabin standardizes slots, sizes, and compliance behavior.

States

  • Default / scrolled (if content influences chrome)
  • Driving-restricted (hide or substitute dense entries)
  • Night / day schemes
  • Focused (rotary)

Compliance

ConcernRule
DrivingLimit entries that open setup/keyboard-heavy flows (driving)
UXMin touch targets for all tappable slots (ux)
Safety classConvenience chrome; do not bury safety controls exclusively here
GlanceIcons + short labels; stable positions

Token dependencies

  • cabin.component.systemBar.height
  • cabin.component.systemBar.iconSize
  • cabin.color.semantic.surface / onSurface
  • cabin.size.touch.minimum

Planned Compose API

// Planned — often used in app-level mock system UI / embedded chrome
@Composable
fun CabinSystemBar(
slots: CabinSystemBarSlots,
compliance: CabinCompliance = LocalCabinCompliance.current,
modifier: Modifier = Modifier,
)

Planned Views API

<!-- Planned -->
<dev.decoupled.cabin.views.CabinSystemBarView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cabinSlots="@xml/oem_system_bar_slots" />

System UI integrations typically prefer the Views path.

Parity notes

Slot model and restriction substitution must match. Visual height and icon sizes resolve from the same tokens.

Acceptance criteria

  • Slot configuration without core fork
  • Driving substitutes applied
  • Touch minima enforced
  • Day/night correct
  • Dual-stack parity for shared apps / previews