Implementieren Sie die System-Benutzeroberfläche

Android Automotive bietet eine neue System-Benutzeroberfläche, die speziell für Fahrzeuge entwickelt wurde. Die meisten Komponenten der System-Benutzeroberfläche sind eng mit Framework-Diensten verknüpft. Die System-Benutzeroberfläche bezieht sich auf jedes auf dem Bildschirm angezeigte Element, das nicht Teil einer App ist. Die Automotive System UI (im CarSystemUI-Elementpaket) ist eine Erweiterung der Android System UI (im System UI-Paket), die speziell für Fahrzeuge angepasst wurde.

Was ist die System-Benutzeroberfläche?

Zu den spezifischen Komponenten der Automotive System-Benutzeroberfläche gehören:

Komponente Beschreibung
Sperrbildschirm-Benutzeroberfläche Bildschirm, über den Benutzer bei einem bestimmten Benutzerkonto authentifiziert werden.
Navigationsleiste Systemleiste, die links, unten oder rechts auf dem Bildschirm positioniert werden kann und Facettenschaltflächen für die Navigation zu verschiedenen Apps, das Umschalten des Benachrichtigungsfelds und die Bereitstellung von Fahrzeugsteuerungen (z. B. Klimaanlage) enthalten kann. Dies unterscheidet sich von der Android-System-UI-Implementierung, die die Schaltflächen „Zurück“, „Home“ und „App-Stack“ bereitstellt.
Statusleiste Systemleiste, die entlang des Bildschirms positioniert ist und als Navigationsleiste dient. Die Statusleiste bietet außerdem Funktionen zur Unterstützung von:
  • Konnektivitätssymbole. Einschließlich Bluetooth, WLAN und Hotspot-/Mobilfunkverbindung.
  • Pulldown-Benachrichtigungsfeld. Wischen Sie beispielsweise vom oberen Bildschirmrand nach unten.
  • Heads-up-Benachrichtigungen (HUN).
System-Benutzeroberfläche Bezieht sich auf jedes auf dem Bildschirm angezeigte Element, das nicht Teil einer App ist.
Benutzer-Umschalter-Benutzeroberfläche Bildschirm, über den ein Benutzer einen anderen Benutzer auswählen kann.
Lautstärke-Benutzeroberfläche Dialogfeld, das angezeigt wird, wenn der Treiber physische Lautstärketasten verwendet, um die Lautstärke eines Geräts zu ändern.

Wie funktioniert die System-Benutzeroberfläche?

System UI ist eine Android-App, die ausgeführt wird, wenn ein Gerät eingeschaltet ist. Die App wird durch Reflektion durch den SystemServer gestartet. Die relevantesten Einstiegspunkte für für den Benutzer sichtbare Aspekte der System-Benutzeroberfläche sind unten aufgeführt. Verwenden Sie diese Komponenten, um die Benutzeroberfläche des Android-Systems für automobilspezifische Funktionen anzupassen.

  • config_statusBarComponent
  • config_systemUIFactoryComponent

CarSystemUI ist eine Erweiterung des System-UI-Pakets, was bedeutet, dass Klassen und Ressourcen im System-UI-Paket vom CarSystemUI-Paket verwendet und überschrieben werden können.

Passen Sie die Systembenutzeroberfläche an

Überlagerungen

Sie können zwar den Android-Quellcode ändern, um die Benutzeroberfläche des Systems anzupassen, dies macht es jedoch schwieriger und komplexer, zukünftige Android-Updates anzuwenden. Stattdessen unterstützt Android die Verwendung eines Overlay-Verzeichnisses, das es Ihnen ermöglicht, Ressourcendateien zu ersetzen, ohne den Quellcode zu ändern. Im Android-Build-System überschreibt das Overlay-System Dateien auf kontrollierte Weise. Alle geänderten Dateien werden eindeutig identifiziert, ohne dass der gesamte Baum des AOSP-Quellcodes durchlaufen werden muss.

Overlay-Dateien müssen im Verzeichnis PRODUCT_PACKAGE_OVERLAYS abgelegt werden und genau die gleichen Unterordner wie die ursprüngliche AOSP-Stammstruktur haben. Für Android 10 oder höher ist PRODUCT_PACKAGE_OVERLAYS eingestellt auf:

PRODUCT_PACKAGE_OVERLAYS := packages/services/Car/car_product/overlay

Die Automotive-System-Benutzeroberfläche nutzt Ressourcen aus der System-Benutzeroberfläche und den CarSystemUI-Paketen. Dies bedeutet, dass Ressourcen von jedem Standort mit Überlagerungen überschrieben werden können, um das Erscheinungsbild der Automotive-System-Benutzeroberfläche zu beeinflussen.

Um eine Datei zu ersetzen, replizieren Sie die Verzeichnisstruktur der zu ersetzenden Datei im von Ihnen angegebenen /overlay Verzeichnis und fügen Sie dann die Ersetzung in dieses Verzeichnis ein. Zum Beispiel ersetzen:

frameworks/base/packages/CarSystemUI/res/layout/super_status_bar.xml

Fügen Sie die Ersatzdatei super_status_bar.xml hinzu, die sich in folgendem Verzeichnis befindet:

packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/

Um frameworks/base/packages/SystemUI/res/values/config.xml zu ersetzen (in der System-Benutzeroberfläche, nicht in CarSystemUI), fügen Sie die Ersatzdatei config.xml hinzu:

packages/services/Car/car_product/overlay/frameworks/base/packages/SystemUI/res/layout/

oder

packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/

Nachfolgend finden Sie Beschreibungen der beiden primären Einstiegspunkte für die Anpassung.

Die Benutzeroberfläche des Automotive-Systems kann über drei Navigationsleisten links, unten und rechts auf dem Bildschirm verfügen. Die Sichtbarkeit jeder Systemleiste wird mit den folgenden Konfigurationen umgeschaltet:

  • config_enableLeftSystemBar
  • config_enableBottomSystemBar
  • config_enableRightSystemBar

Jede Leiste verfügt über einen bereitgestellten und einen nicht bereitgestellten Status, der durch Überlagern der jeweiligen Layoutdateien angepasst werden kann:

  • car_left_system_bar.xml
  • car_left_system_bar_unprovisioned.xml
  • car_system_bar.xml (Layout für die untere Navigationsleiste)
  • car_system_bar_unprovisioned.xml
  • car_right_system_bar.xml
  • car_right_system_bar_unprovisioned.xml

Diese Layouts müssen auf der obersten Ebene com.android.systemui.car.systembar.CarSystemBarView enthalten, das alle anderen erforderlichen Ansichten enthalten kann. Schaltflächen in den Navigationsleisten können mit com.android.systemui.car.systembar.CarSystemBarButton eingebunden werden.

Diese Ansichten werden in CarSystemBar#createSystemBar erweitert, wenn das Gerät für einen bestimmten Benutzer ordnungsgemäß bereitgestellt wird.

Statusleiste

Betrachten Sie die Statusleiste als Navigationsleiste mit zusätzlichen Funktionen. Im Gegensatz zur Navigationsleiste verfügt die Statusleiste nicht über eine Markierung zum Deaktivieren. Sie können die Statusleiste ändern mit:

  • car_top_navigation_bar.xml
  • car_top_navigation_bar_unprovisioned.xml

Diese Layouts müssen com.android.systemui.statusbar.car.CarNavigationBarView auf der obersten Ebene enthalten. Die Statusleiste enthält Statussymbole. Um die Größe eines Symbols zu ändern, skalieren Sie das Symbol gleichmäßig mit einem Skalierungsfaktor, anstatt eine bestimmte Größe anzugeben. Fügen Sie beispielsweise in einer Overlay-Datei /overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml die folgenden Abmessungen hinzu, um die Größe der Symbole zu verdoppeln:

<resources>
    <!-- The amount by which to scale up the status bar icons.-->
    <item name="status_bar_icon_scale_factor" format="float" type="dimen">2</item>
</resources>

Die Statusleiste befindet sich in einer speziellen Fensterebene, die auch das Benachrichtigungsfeld, den Benutzerumschalter, Heads-up-Benachrichtigungen (HUNs) und den Tastenschutz umfasst. Die verschiedenen Layouts hierfür sind in super_status_bar.xml enthalten.

Änderungen am Quellcode der System-Benutzeroberfläche

Overlays bieten möglicherweise nicht die erforderliche Flexibilität, um das Verhalten der System-Benutzeroberfläche ausreichend anzupassen.

Alarm. Am Android-Quellcode vorgenommene Änderungen lassen sich in späteren Android-Versionen nur schwer aktualisieren. Wir empfehlen dringend, dass Sie den Automotive System UI-Code erweitern, anstatt den Code direkt zu ändern. Auf diese Weise kann der zugrunde liegende Automotive System UI-Quellcode mit minimalen Zusammenführungskonflikten aktualisiert werden, da alle Anpassungen über bekannte API-Oberflächen implementiert werden.

Die meisten Aspekte der Systembenutzeroberfläche können über diese beiden Einstiegspunkte angepasst werden:

  • config_statusBarComponent
  • config_systemUIFactoryComponent

Wenn Sie beispielsweise eine Klasse mit dem Namen com.android.systemui.statusbar.car.custom.CustomCarStatusBar erstellen, die CarStatusBar erweitert, aktualisieren Sie config_statusBarComponent so, dass es auf diese neue Komponente verweist. Die Erweiterung dieser Klasse ermöglicht die Anpassung der meisten Elemente, die sich auf die Systemleiste und die Benachrichtigungslogik beziehen.

Ebenso können Sie CustomCarSystemUIFactory erstellen und in config_systemUIFactoryComponent platzieren. Verwenden Sie diese Klasse, um die Funktionalität von VolumeUI und Sperrbildschirm zu aktualisieren.

Passen Sie den Benutzerwechsel und das Entsperren an

Im folgenden Material wird beschrieben, wie Sie das Benutzerwechselerlebnis anpassen können.

Begriff Beschreibung
Schlüsselschutz Vollbilddialog, um eine versehentliche Interaktion mit der Vordergrund-App zu verhindern. Schützt die Privatsphäre jedes Benutzers, wenn mehrere Benutzer eingerichtet sind.
Ladedialog Der Ladebildschirm wird beim Wechseln zwischen Benutzern angezeigt.
Sperrbildschirm, Türsteher Bildschirm, auf dem eine Person eine PIN, ein Muster oder ein Passwort eingeben muss.
Benutzer Android-Benutzer.
Benutzerauswahl Der Benutzerauswahlbildschirm wird angezeigt, wenn ein Gerät gestartet wird.
Benutzerumschalter Benutzerumschalter wird beim Wechseln von Bildschirmen über QuickSettings angezeigt.

Passen Sie den Benutzerwechsel an

Schlüsselschutz und Türsteher

Im Android Automotive OS wird der Keyguard-Bildschirm mit einer Benutzerauswahl nur angezeigt, wenn ein Benutzer auf dem Sperrbildschirm auf die Schaltfläche „Abbrechen“ klickt. Der Keyguard-Bildschirm wird unten angezeigt.

Keyguard-Bildschirm

Abbildung 1. Bildschirm „Tastensperre“.

Ein Sperrbildschirm mit einem Türsteher wird angezeigt, wenn der Benutzer einen Datenschutztyp zum Entsperren des Geräts ausgewählt hat, wie unten gezeigt.

Sperrbildschirm

Abbildung 2. Sperrbildschirm.

Wenn die Sperre so eingestellt ist, dass sie das Ein- oder Ausschalten manuell auslöst, befolgen Sie die folgenden Anweisungen:

adb shell input keyevent 26

Benutzerauswahl

Der Benutzerauswahlbildschirm wird angezeigt, wenn ein Gerät, das in die System-UI-Statusleiste und in Maps des Fahrzeugs integriert ist, neu gestartet wird. Weitere Informationen finden Sie unter FullscreenUserSwitcher .

Ladebildschirm

Abbildung 3. Bildschirm zur Benutzerauswahl

Das Layout dieses Bildschirms kann in car_fullscreen_user_switcher.xml angepasst werden.

Ladebildschirm

Der Ladebildschirm wird bei jedem Benutzerwechsel angezeigt, unabhängig vom Einstiegspunkt. Zum Beispiel über die Benutzerauswahl oder den Einstellungsbildschirm. Der Ladebildschirm ist integraler Bestandteil der System-Benutzeroberfläche des Frameworks und wird der öffentlichen Klasse mit dem Namen CarUserSwitchingDialog zugeordnet. Ein Beispiel finden Sie in Abbildung 3 oben.

Das Theme kann mit Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog angepasst werden.

Um den Android-Benutzer einzurichten, ermöglicht der anfängliche Ablauf des Setup-Assistenten dem Fahrer, einen Benutzernamen für sich selbst einzurichten. Ordnet der Fahrer den Android-Benutzer dann einem Google-Konto zu, wird der Benutzername aus diesem Konto ausgewählt. Wenn der Fahrer jedoch einen Namen angibt, beispielsweise FahrerB, und diesen Benutzernamen später seinem Google-Konto mit dem Namen Maddy zuordnet, wird der ursprünglich zugewiesene Name (FahrerB) nicht geändert, da dieser Name explizit festgelegt wurde. Der Fahrer kann den Namen nur im Menü „Einstellungen“ ändern.

Das Layout kann in car_user_switching_dialog.xml .

OEMs können die Status- und Navigationsleiste verbergen, indem sie das Design mit dem Namen NoActionBar.Fullscreen verwenden. (Dies ist die ursprüngliche System-Benutzeroberfläche, aktualisiert für die Auto-Referenz-Benutzeroberfläche.) Weitere Informationen finden Sie unter Anpassung .

Während OEMs Einstiegspunkte für Benutzeroberflächen bereitstellen können, um Benutzer zu wechseln, können die Ergebnisse manchmal unerwünscht sein. Sollte dies passieren:

  1. Der OEM erstellt den benutzerdefinierten Ladebildschirm (oder Dialog) und zeigt ihn an.
    • Speziell für die UX startet der OEM den benutzerdefinierten Ladebildschirm, wenn ein Benutzer die Möglichkeit zum Wechseln auswählt. Dieser kann ausgeblendet werden, wenn der Benutzerwechsel abgeschlossen ist.
    • Der OEM muss das Prioritätsfenster nach seinen Wünschen festlegen. Beispielsweise ein Fenstertyp mit höherer Priorität. Die Prioritätspriorität darf die des Keyguards nicht überschreiten.
  2. Der OEM legt config_customUserSwitchUi=true im Kernframework config.xml fest, wie in config_customuserswitchui beschrieben. Infolgedessen zeigt das Framework CarUserSwitchingDialog nicht an.

Passen Sie den Sperrbildschirm an

Der Sperrbildschirm ist ein integraler Bestandteil der System-Benutzeroberfläche, der vom OEM angepasst werden kann. Um den Ablauf anzupassen, beginnen Sie mit frameworks/base/packages/CarSystemUI/ .

Passen Sie die Einrichtung für Erstbenutzer an

Der Setup-Assistent führt die erstmalige Benutzereinrichtung durch. Auch dies kann individuell angepasst werden. Sie können die UserManager-APIs verwenden, um einen Benutzer zu erstellen. In einigen Fällen kann dies im Hintergrund implementiert werden, wodurch der Setup-Assistent-Prozess optimiert wird.