HMI Overview

Android Automotive is an in-car infotainment platform solution provided with the Android Open Source Project (AOSP). The articles in this topic introduce the key concepts and components provided by the Android Automotive System UI and core apps needed to build an effective Human Machine Interface (HMI) system for OEMs, third-party developers, and end users.

  • AOSP Host Integration Guide. The App Host allows 3P car apps to render OEM-styled user interface (UI) components on its behalf.
  • Car Settings Structure. Car Settings provides a car-centric visual user interface, basic driver distraction optimizations, and additional customization entry points for OEMs.
  • Car UI Library Integration Guide. The Car UI Library provides a UI development framework to enable all apps present in the car to achieve consistency and customization.
  • Customize Status Bar System Icons. The Status bar is a component of the Android System UI used to persistently display important information to users. Learn how to customize the Status bar system icons.
  • Heads-Up Notifications. Learn how to customize Heads-Up Notifications.
  • Dialer. Use this Android system app to implement a distraction-optimized (DO) experience for Bluetooth calling, contact browsing, and call management.
  • Media. With just a few settings and a service, developers can extend existing media apps. While apps must adhere to the Automotive Media template, developers can customize template colors, fonts, icons, and more to create a branded experience.
  • Notifications. Learn how to change the appearance and configurations of notifications.

Terminology

These terms are used in HMI and related articles:

Term Definition
Core apps The key set of applications critical to system functionality, including Settings, Radio, HVAC, Media, Dialer, and Keyboard.
Compatibility Definition Document (CDD) Enumerates the requirements that must be met for devices to be compatible with the latest version of Android.
Compatibility Test Suite (CTS) Free, commercial-grade testing suite, available for download at Compatibility Test Suite Downloads.
Customization The exercise of modifying an AOSP implementation to meet the requirements of an OEM. Typically, this involves the use of resource overlays to apply cosmetic changes while also ensuring compliance with the CDD, CTS, and all relevant User Experience guidelines.
Hero apps A set of key apps critical to all aspects of Android, including functionality, upgradability, third-party developer ecosystem, and end users. Hero apps include Notifications, Settings, Media, and the Communication Center/Dialer. Corresponding AOSP implementations should be of production quality.
Resource overlays To affect the rendering of the user interface, use this mechanism to replace colors, change dimensions, enable drawing, and apply layout resources either at compile time (most common) or at runtime (Runtime Resource Overlays (RRO)).
System UI The user interface outside an application that belongs to the system, such as the navigation bar, status bar, lock screen, and volume dialog.
Theme A collection of colors and styles used to determine the look-and-feel of the components and apps that inherit the theme.
User Experience (UX) The field of User Interface (UI) design and its usability.

Customization

The AOSP implementation of the System UI and other core system applications serves as a strong foundation for starting the HMI development process. The exercise of modifying the AOSP implementation (primarily through the use of resource overlays) to meet an OEM's branding, business, and legal requirements is referred to as customization.

While the overall system is designed and built to be flexible, different components are expected to be customized to different degrees:

  • System UI. OEM can customize or replace the AOSP implementation within the bounds afforded by the CDD and CTS and any other applicable UX guidelines.

  • Non-hero system apps (also known as reference). OEMs can customize or replace the AOSP implementation.

  • Hero apps. Each app comes with a set of detailed customization guidelines. OEMs are strongly encouraged to use the AOSP implementation and then customize it within the bounds afforded by those guidelines.

Density configuration

To ensure that UI elements render properly given the physical display configuration, the density property must be set to the bucket (Display Metrics) that matches the physical density most closely, such as this entry in the build file:

PRODUCT_PROPERTY_OVERRIDES := \
        ro.sf.lcd_density=160

UX restrictions engine

CarUxRestrictionsManager provides a hook for applications to listen for changes related to driving state to modify the user experience appropriately. OEMs can overlay the configuration file at packages/services/Car/service/res/xml/car_ux_restrictions_map.xml to affect the behavior of the system.

System theme

The theme that prescribes the system-wide default set of items such as colors and text styles is DeviceDefault. OEMs are encouraged to start the overall customization process by modifying the DeviceDefault theme. By default, the system UI, and all the system apps in AOSP, inherit from this theme. OEM-developed system apps are also encouraged to inherit DeviceDefault. Third-party developed apps are not expected to inherit DeviceDefault but to instead use Theme.Car provided in the androidx.car library. Files are located as follows:

  • Core. /frameworks/base/core/res/res/values/themes_device_defaults.xml
  • Colors. /frameworks/base/core/res/res/values/colors_car.xml
  • Styles. /frameworks/base/core/res/res/values/styles_car.xml
  • Car overlay.
    /packages/services/Car/car_product/overlay/.../values/themes_device_defaults.xml

OEMs are expected to have a parallel overlay structure to the car_product directory in their vendor directory that further extends the car_product overlay.

Theme Playground app

This app streamlines the process of customizing the DeviceDefault theme by visualizing all theme attributes in one place. Also, by comparing how certain styles render in this app as comparied to other system apps, developers can quickly debug theme issues. This app is available at:

  /packages/services/Car/tests/ThemePlayground

System UI

System UI includes all the UI under /frameworks/base, primarily in /frameworks/base/packages/CarSystemUI. This includes the Navigation bar, Status bar, lock screen, volume dialog, toasts, user picker, and permission dialogs. OEMs can customize the system UI components extensively via resource overlays and theming, provided each is within the requirements of the CDD, CTS, and other applicable UX guidelines.

System applications

Android Automotive includes a set of core system applications critical to overall system functionality. Of these, Communication Center, Media, Notifications, and Settings are considered hero applications.

  • Communication Center
  • HVAC
  • IME (keyboard)
  • Launcher (home screen)
  • Local Media Player
  • Media
  • Messenger
  • Notifications
  • Radio
  • Settings

Home screen

The Home screen, known as the Car Launcher, is the landing page for the HMI experience. The AOSP implementation serves as a reference only and OEMs are expected to replace the implementation with their own, which often combines navigation, media playback, communication, and other system states, as needed. Often, the Car Launcher app is displays the applications available on the system. To learn how to handle events such as recents, package changes, and headless (no launcher Activity) apps, see the reference implementation.

Notifications

Notifications are an integral component of the Android OS and the same constructs (including heads-up notification, notification list/center, Notification APIs, ranking, and inline actions) have been included in Android Automotive. For details, see the handheld Notifications Overview. To optimize automotive use cases, the following modifications have been made (as compared to the handheld notification stack):

  • Reduction in overall notification content visible to users. Removal of ongoing media playback, ongoing navigation, and "unimportant" (importance of LOW and below) foreground service notifications of system apps from the notification list/center, with the understanding that these notifications are either made redundant (eg. cluster showing media state) or are not useful.

  • Removal of complex contextual controls (such as long press and swipe-length-based controls).

  • Respecting the UX Restrictions engine configuration.

    • Messaging notification content preview may be hidden based on drive-state.
    • All strings capped at max length.
  • Addition of new notification categories specifically for cars in Android 9, only available to bundled system apps running as android.uid.system.

  • CATEGORY_CAR_EMERGENCY. Ranked at the top of the notification list. Bypasses Do-Not-Disturb (DND) controls.

  • CATEGORY_CAR_WARNING. Ranked below emergency and above others (bypasses DND).
  • CATEGORY_CAR_INFORMATION. Ranked with the rest of the notifications based on "importance" and recency.

The end-to-end implementation of the notification stack, from Notification APIs to the UI, is considered a hero app. To guarantee consistent API interoperability across all HUs and to maximize upgradeability, OEMs are strongly encouraged to take the AOSP implementation and then customize it lightly.

Customization

The standard DeviceDefault theming and resource overlays apply. A very limited number of behavioral customization knobs are available at:

packages/apps/Car/Notification/res/values/config.xml

Settings

The Settings application (Car Settings) is one of the hero apps that exposes knobs, which the user can use to configure aspects of the Android OS and the rest of the car. The Settings application exposes more than 200 features in the OS, which are tightly coupled with each major Android release. To enable upgradeability and to avoid fragmentation, OEMs are strongly encouraged to take the AOSP implementation and then customize it (instead of forking the implementation).

Customization

The Settings application takes customization into account and exposes several avenues for customization.

  • Theming. Enables the visual customization of how each Preference object type is to be rendered, including:

    • Preference.DeviceDefault.CheckBoxPreference

    • Preference.DeviceDefault.DialogPreference.EditTextPreference

  • Hierarchy customization. To enable the:

    • Launch into an arbitrary root fragment, overlay the value of config_settings_hierarchy_root_fragment in the file entitled Settings/res/values/config.xml

    • Customization of items such as order, grouping, text, and icons, overlay Settings/res/xml/*.xml

  • Static injection. While setting up an overlay project, OEMs can add proprietary screens by defining and then adding the additional Fragment and Controller classes to the hierarchy.

  • Dynamic injection. If a separate application (apk) hosts a Settings screen that must be linked from the main Settings app, the separate application can be dynamically injected. For more information, see Dynamic Preferences.

Media

Media is a hero app that provides the front-end user experience on behalf of media applications that implement the MediaSession and MediaBrowser APIs. Media applications can be third-party apps (such as Spotify and Pandora) as well as other media sources, such as Bluetooth (BT) streaming and local media.

Hundreds of media apps are available in Android Auto (Projection), all of which implement these media APIs as described in Providing Audio Playback for Auto. Media APIs evolve with each major Android release and with releases of the Androidx library. To guarantee API interoperability across all media apps and future versions of Android, OEMs are strongly encouraged to take the AOSP implementation and then customize it.

Customization

Standard theming through the DeviceDefault theme also applies to Media. In addition, further customization of the look-and-feel is possible with resource overlays, provided the customization is within the bounds of the UX guidelines.

Other Media apps

USB Media and Media Sources

To the extent possible, it is highly recommended these media sources be plugged in to Media through an implementation of the MediaSession and MediaBrowser APIs (this is true of any third party media app). See the LocalMediaPlayer app in the AOSP. This app surfaces local media files and is displayed as a source in Media.