Implémenter l'UI du système

Android Automotive fournit une nouvelle UI système développée spécifiquement pour les véhicules. La plupart des composants de l'UI du système sont étroitement couplés aux services de framework. L'UI du système désigne tout élément affiché à l'écran qui ne fait pas partie d'une application. L'UI du système Automotive (dans le package d'éléments CarSystemUI) est une extension de l'UI du système Android (dans le package d'éléments System UI), qui a été personnalisée spécifiquement pour les véhicules.

Qu'est-ce que l'UI système ?

Les composants spécifiques à l'interface utilisateur du système automobile incluent les suivants:

Component Description
UI de l'écran de verrouillage Écran par lequel les utilisateurs sont authentifiés auprès d'un compte utilisateur spécifique.
Barre de navigation Barre système pouvant être positionnée à gauche, en bas ou à droite de l'écran, et pouvant inclure des boutons de facette pour la navigation vers différentes applications, l'activation/deactivation du panneau de notification et les commandes du véhicule (telles que la climatisation). Cela diffère de l'implémentation de l'UI du système Android, qui fournit les boutons Retour, Accueil et pile d'applications.
Barre d'état Barre système positionnée le long de l'écran et servant de barre de navigation. La barre d'état fournit également des fonctionnalités pour les éléments suivants:
  • Icônes de connectivité. y compris Bluetooth, Wi-Fi et point d'accès/connexion mobile.
  • Panneau de notification déroulant. (par exemple, en balayant l'écran de haut en bas).
  • Notifications prioritaires (HUN)
Interface Fait référence à tout élément affiché à l'écran qui ne fait pas partie d'une application.
UI du sélecteur d'utilisateur Écran permettant à un utilisateur de sélectionner un autre utilisateur.
UI du volume Boîte de dialogue affichée lorsque le pilote utilise des boutons de volume physiques pour régler le volume sur un appareil.

Comment fonctionne l'UI système ?

L'UI système est une application Android qui s'exécute lorsque l'appareil est allumé. L'application est démarrée par réflexion par SystemServer. Vous trouverez ci-dessous les points d'entrée les plus pertinents pour les aspects visibles de l'UI système. Utilisez ces composants pour personnaliser l'UI du système Android pour les fonctionnalités spécifiques à l'automobile.

  • config_statusBarComponent
  • config_systemUIFactoryComponent

CarSystemUI est une extension du package d'UI système, ce qui signifie que les classes et les ressources du package d'UI système peuvent être utilisées et remplacées par le package CarSystemUI.

Personnaliser l'UI du système

Superpositions

Bien que vous puissiez modifier le code source Android pour personnaliser l'UI du système, cela rend l'application des futures mises à jour Android plus difficile et complexe. À la place, Android prend en charge l'utilisation d'un répertoire en superposition, qui vous permet de remplacer les fichiers de ressources sans modifier le code source. Dans le système de compilation Android, le système de superposition remplace les fichiers de manière contrôlée. Tous les fichiers modifiés sont clairement identifiés sans parcourir l'ensemble de l'arborescence du code source AOSP.

Les fichiers de superposition doivent être placés dans le répertoire PRODUCT_PACKAGE_OVERLAYS et doivent avoir exactement les mêmes sous-dossiers que la structure racine AOSP d'origine. Pour Android 10 ou version ultérieure, PRODUCT_PACKAGE_OVERLAYS est défini sur:

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

L'UI du système Automotive utilise les ressources de l'UI système et des packages CarSystemUI. Cela signifie que les ressources de chaque emplacement peuvent être remplacées par des superpositions pour affecter l'apparence de l'UI du système Automotive.

Pour remplacer un fichier, répliquez la structure de répertoire du fichier à remplacer dans le répertoire /overlay que vous avez spécifié, puis incluez le remplacement dans ce répertoire. Par exemple, pour remplacer:

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

Ajoutez le fichier super_status_bar.xml de remplacement situé dans:

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

Pour remplacer frameworks/base/packages/SystemUI/res/values/config.xml (dans l'UI du système, et non dans CarSystemUI), ajoutez le fichier config.xml de remplacement à:

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

ou

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

Vous trouverez ci-dessous une description des deux principaux points d'entrée de personnalisation.

L'interface utilisateur du système Automotive peut comporter trois barres de navigation à gauche, en bas et à droite de l'écran. La visibilité de chaque barre système est activée ou désactivée avec les configurations suivantes:

  • config_enableLeftSystemBar
  • config_enableBottomSystemBar
  • config_enableRightSystemBar

Chaque barre a un état provisionné et non provisionné, qui peut être personnalisé en superposant les fichiers de mise en page respectifs:

  • car_left_system_bar.xml
  • car_left_system_bar_unprovisioned.xml
  • car_system_bar.xml (mise en page de la barre de navigation inférieure)
  • car_system_bar_unprovisioned.xml
  • car_right_system_bar.xml
  • car_right_system_bar_unprovisioned.xml

Ces mises en page doivent contenir com.android.systemui.car.systembar.CarSystemBarView au niveau supérieur, qui peut inclure toutes les autres vues nécessaires. Les boutons dans les barres de navigation peuvent être inclus à l'aide de com.android.systemui.car.systembar.CarSystemBarButton.

Ces vues sont gonflées dans CarSystemBar#createSystemBar, si l'appareil est correctement provisionné pour un utilisateur donné.

Barre d'état

Considérez la barre d'état comme une barre de navigation avec des fonctionnalités supplémentaires. Contrairement à la barre de navigation, la barre d'état ne comporte pas d'indicateur permettant de la désactiver. Vous pouvez modifier la barre d'état avec:

  • car_top_navigation_bar.xml
  • car_top_navigation_bar_unprovisioned.xml

Ces mises en page doivent contenir com.android.systemui.statusbar.car.CarNavigationBarView au niveau supérieur. La barre d'état contient des icônes d'état. Pour modifier la taille d'une icône, faites-la évoluer de manière uniforme à l'aide d'un facteur de mise à l'échelle au lieu de spécifier une taille spécifique. Par exemple, dans un fichier de superposition /overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml, ajoutez les dimensions suivantes pour doubler la taille des icônes:

<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>

La barre d'état se trouve dans une couche de fenêtre spéciale qui comprend également le panneau de notifications, le sélecteur d'utilisateur, les notifications heads-up (HUN) et le clavier de verrouillage. Les différentes mises en page sont incluses dans super_status_bar.xml.

Modifications apportées au code source de l'UI du système

Les superpositions peuvent ne pas offrir la flexibilité nécessaire pour personnaliser suffisamment le comportement de l'UI du système.

Alerte. Les modifications apportées au code source d'Android sont difficiles à mettre à jour dans les versions ultérieures d'Android. Nous vous recommandons vivement d'étendre le code de l'interface utilisateur du système automobile plutôt que de le modifier directement. De cette manière, le code source de l'interface utilisateur du système automobile sous-jacent peut être mis à niveau avec un minimum de conflits de fusion, car toutes les personnalisations sont implémentées via des surfaces d'API connues.

La plupart des aspects de l'UI système peuvent être personnalisés via ces deux points d'entrée:

  • config_statusBarComponent
  • config_systemUIFactoryComponent

Par exemple, si vous créez une classe nommée com.android.systemui.statusbar.car.custom.CustomCarStatusBar, qui étend CarStatusBar, mettez à jour config_statusBarComponent pour qu'elle pointe vers ce nouveau composant. L'extension de cette classe permet de personnaliser la plupart des éléments liés à la barre système et à la logique des notifications.

De même, vous pouvez créer CustomCarSystemUIFactory et le placer dans config_systemUIFactoryComponent. Utilisez cette classe pour mettre à jour la fonctionnalité de VolumeUI et de l'écran de verrouillage.

Personnaliser le changement d'utilisateur et le déverrouillage

Le contenu suivant explique comment personnaliser l'expérience de changement d'utilisateur.

Terme Description
Protection des touches Boîte de dialogue en plein écran pour éviter toute interaction accidentelle avec l'application au premier plan. Protège la confidentialité de chaque utilisateur lorsque plusieurs utilisateurs sont configurés.
Boîte de dialogue de chargement Écran de chargement affiché lors du changement d'utilisateur.
Écran de verrouillage, bouncer Écran demandant à l'utilisateur de saisir un code, un schéma ou un mot de passe.
Utilisateur Utilisateur Android.
Sélecteur d'utilisateurs Écran de sélection de l'utilisateur affiché au démarrage d'un appareil.
Commutateur d'utilisateur Commutateur d'utilisateur affiché lors du changement d'écran à partir de Réglages rapides.

Personnaliser le changement d'utilisateur

Protection des touches et bouncer

Dans Android Automotive OS, l'écran de verrouillage avec un sélecteur d'utilisateur ne s'affiche que lorsqu'un utilisateur clique sur le bouton "Annuler" sur l'écran de verrouillage. L'écran du clavier de verrouillage est présenté ci-dessous.

Écran de protection des touches

Figure 1. Écran de protection des touches

Un écran de verrouillage avec un rebondisseur s'affiche lorsque l'utilisateur a sélectionné un type de confidentialité pour déverrouiller l'appareil, comme illustré ci-dessous.

Écran de verrouillage

Figure 2 Écran de verrouillage.

Lorsque la serrure est configurée pour déclencher manuellement l'allumage ou l'arrêt, suivez les instructions suivantes:

adb shell input keyevent 26

Sélecteur d'utilisateurs

L'écran de sélection de l'utilisateur s'affiche lorsqu'un appareil intégré à la barre d'état de l'UI du système de la voiture et à Maps est redémarré. Pour en savoir plus, consultez FullscreenUserSwitcher.

Écran de chargement

Figure 3. Écran du sélecteur d'utilisateurs

Vous pouvez personnaliser la mise en page de cet écran dans car_fullscreen_user_switcher.xml.

Écran de chargement

L'écran de chargement s'affiche chaque fois qu'un utilisateur change, quel que soit le point d'entrée. Par exemple, via le sélecteur d'utilisateur ou l'écran "Paramètres". L'écran de chargement fait partie intégrante de l'UI du système du framework et correspond à la classe publique intitulée CarUserSwitchingDialog. Pour en savoir plus, consultez la figure 3 ci-dessus.

Le thème peut être personnalisé avec Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog.

Pour configurer l'utilisateur Android, le flux initial de l'assistant de configuration permet au conducteur de configurer un nom d'utilisateur pour lui-même. Si le conducteur associe ensuite l'utilisateur Android à un compte Google, le nom de l'utilisateur est sélectionné dans ce compte. Toutefois, si le conducteur spécifie un nom, par exemple DriverB, puis associe ce nom d'utilisateur à son compte Google avec le nom de Maddy, le nom attribué à l'origine (DriverB) n'est pas modifié, car ce nom a été défini explicitement. Le conducteur ne peut modifier le nom que dans le menu "Paramètres".

La mise en page peut être personnalisée dans car_user_switching_dialog.xml..

Les OEM peuvent masquer la barre d'état et de navigation à l'aide du thème nommé NoActionBar.Fullscreen. (Il s'agit de l'interface utilisateur système d'origine, mise à jour pour l'interface utilisateur de référence de la voiture.) Pour en savoir plus, consultez la section Personnalisation.

Bien que les OEM puissent fournir des points d'entrée d'interface utilisateur pour changer d'utilisateur, les résultats peuvent parfois être indésirables. Dans ce cas:

  1. L'OEM crée et affiche l'écran de chargement (ou la boîte de dialogue) personnalisé.
    • Spécifique à l'expérience utilisateur, l'OEM lance l'écran de chargement personnalisé lorsqu'un utilisateur sélectionne le moyen de basculer, qui peut être masqué une fois la bascule effectuée.
    • L'OEM doit définir la fenêtre de priorité selon ses préférences. Par exemple, un type de fenêtre ayant une priorité plus élevée. La priorité ne peut pas dépasser celle du clavier.
  2. L'OEM définit config_customUserSwitchUi=true dans le framework de base config.xml, comme décrit dans config_customuserswitchui. Par conséquent, le framework n'affiche pas CarUserSwitchingDialog.

Personnaliser l'écran de verrouillage

L'écran de verrouillage fait partie intégrante de l'UI du système, qui peut être personnalisée par l'OEM. Pour personnaliser le flux, commencez par frameworks/base/packages/CarSystemUI/.

Personnaliser la configuration de l'utilisateur pour la première fois

L'assistant de configuration effectue la configuration de l'utilisateur pour la première fois. Ce paramètre peut également être personnalisé. Vous pouvez utiliser les API UserManager pour créer un utilisateur. Dans certains cas, cela peut être implémenté en arrière-plan, ce qui simplifie le processus de l'assistant de configuration.