the vehicle: CarPropertyManager CarPowerManager CarDiagnosticManager CarBluetoothManager etc… Android Automotive OS Designed for cars, not bikes Apps CarLauncher SystemUI Other apps Services Android Services Car Services HAL Standard HAL Vehicle HAL BSP Linux Kernel
use custom implementations to overcome limitations Android Automotive OS Apps CarLauncher SystemUI Other apps Services Android Services Car Services Custom Services HAL Standard HAL Vehicle HAL BSP Linux Kernel
the whole user experience No need for CarLauncher or SystemUI Android Automotive OS The Drivemode Experience Apps Drivemode ecosystem Services HAL Standard HAL Vehicle HAL BSP Linux Kernel Any Interface
must either work anywhere, or only on a single vehicle Standard Modular Architecture Familiar Android / Gradle architecture Runs anywhere, no bike needed Phone/tablets Raspberry Pi or other boards Emulator No Requirement for AAOS Runs on standard Android builds
(including desktop) Unique tasks Custom gradle plugin architecture Plugin handles common dependencies/setup to reduce build.gradle.kts boilerplate Simplify integration with the AOSP Generate Android.mk files Inject build properties Focus on making the developer’s job easy Automate common tasks and handle system app deployment
Environment UAT Production Develop Type Release Production Release Scooter Variant Multi-dimensional variants Environment - Which backends? Vehicle - What hardware? Build Type - Develop or Release For example: stagingBikeDevelop productionScooterRelease Build Variants
not be available Even with a touchscreen Difficult to interact with using gloves Requires looking at the screen Disabled while bike is in motion Interactions
have no focus ring/indicator Those that do are lists Easily tracked inside a view model Focus Recents Jeff John Carl Missed Outgoing Incoming Favorites Pagable Lists Directional Actions
layout Outer group considered the bounding box DSL-style API Similar to creating a UI in Compose Nested rows/columns Can mix items and groups Focus Groups
items Links UI interactions to actions onClick UI animations (e.g. selection or OOB) Designed for consistent behavior and ease of use Focus Group State
model View model ... Higher priority redirector KeyRedirectorStore observes KeyPressEmitter KeyRedirectorStore distributes the key event Sent downstream to KeyRedirectors Unhandled key events propagate via priority Connecting Key Inputs to the UI Priority
come through handleKeyPress Key inputs are mapped to FocusGroupState as required, or another action on screens without focus UI Connecting Key Inputs to the UI
is lost Selecting the correct road UI Overlay Notifications Media Reverse Other important info Custom UI components Components must conform to safety standards