Implémenter l'interface utilisateur du système

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

Qu’est-ce que l’interface utilisateur système ?

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

Composant Description
Interface utilisateur de l'écran de verrouillage Écran par lequel les utilisateurs sont authentifiés sur un compte utilisateur spécifique.
Barre de navigation Barre système qui peut être positionnée à gauche, en bas ou à droite de l'écran et qui peut inclure des boutons à facettes pour la navigation vers différentes applications, basculer le panneau de notification et fournir des commandes du véhicule (telles que CVC). Cela diffère de l'implémentation de l'interface utilisateur 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 qui sert de barre de navigation. La barre d'état fournit également des fonctionnalités pour prendre en charge :
  • Icônes de connectivité. Y compris Bluetooth, Wi-Fi et connexion Hotspot/Mobile.
  • Panneau de notification déroulant. Par exemple, en faisant glisser votre doigt depuis le haut de l'écran.
  • Notifications tête haute (HUN).
Interface utilisateur du système Désigne tout élément affiché à l'écran qui ne fait pas partie d'une application.
Interface utilisateur du sélecteur d'utilisateurs Écran à travers lequel un utilisateur peut sélectionner un autre utilisateur.
Interface utilisateur des volumes Boîte de dialogue affichée lorsque le pilote utilise les boutons de volume physiques pour modifier le volume sur un périphérique.

Comment fonctionne l’interface utilisateur du système ?

L'interface utilisateur système est une application Android qui s'exécute lorsqu'un appareil est allumé. L'application est démarrée par réflexion par le SystemServer . Les points d’entrée les plus pertinents pour les aspects visibles par l’utilisateur de l’interface utilisateur du système sont répertoriés ci-dessous. Utilisez ces composants pour personnaliser l'interface utilisateur du système Android pour les fonctionnalités spécifiques à l'automobile.

  • config_statusBarComponent
  • config_systemUIFactoryComponent

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

Personnaliser l'interface utilisateur du système

Superpositions

Bien que vous puissiez modifier le code source d'Android pour personnaliser l'interface utilisateur du système, cela rend plus difficile et plus complexe l'application des futures mises à jour d'Android. Au lieu de cela, Android prend en charge l'utilisation d'un répertoire superposé, qui vous permet de remplacer les fichiers de ressources sans modifier le code source. Dans le système de build 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 toute 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'interface utilisateur du système automobile utilise les ressources de l'interface utilisateur système et des packages CarSystemUI, ce qui signifie que les ressources de chaque emplacement peuvent être remplacées par des superpositions pour affecter l'apparence de l'interface utilisateur du système automobile.

Pour remplacer un fichier, répliquez la structure de répertoires 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 de remplacement super_status_bar.xml 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'interface utilisateur système, pas 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/

Les descriptions des deux principaux points d’entrée de personnalisation sont fournies ci-dessous.

L'interface utilisateur du système automobile peut comporter trois barres de navigation à gauche, en bas et à droite de l'écran. La visibilité de chaque barre système est basculé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 (disposition 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 toute autre vue nécessaire. Les boutons à l’intérieur des 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 configuré 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 n'a pas d'indicateur pour 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, redimensionnez l'icône uniformément avec un facteur d'é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 réside dans une couche de fenêtrage spéciale qui comprend également le panneau de notifications, le sélecteur d'utilisateur, les notifications principales (HUN) et le protège-clavier. Les différentes mises en page de ceux-ci sont incluses dans super_status_bar.xml .

Modifications du code source de l'interface utilisateur du système

Les superpositions peuvent ne pas offrir la flexibilité nécessaire pour personnaliser suffisamment le comportement de l'interface utilisateur 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 fortement d'étendre le code de l'interface utilisateur du système automobile au lieu de modifier directement le code. De cette façon, le code source sous-jacent de l'interface utilisateur du système automobile peut être mis à niveau avec un minimum de conflits de fusion, car toutes les personnalisations sont implémentées via des surfaces API connues.

La plupart des aspects de l'interface utilisateur du 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 pointer vers ce nouveau composant. L'extension de cette classe permet la personnalisation de la plupart des éléments relatifs à 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 les fonctionnalités de VolumeUI et de l'écran de verrouillage.

Personnalisez le changement et le déverrouillage des utilisateurs

Le matériel suivant décrit comment personnaliser l’expérience de changement d’utilisateur.

Terme Description
Protège-clavier Boîte de dialogue plein écran pour éviter toute interaction accidentelle avec l'application de 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 basculement entre les utilisateurs.
Écran de verrouillage, videur Écran demandant à une personne de saisir un code PIN, un schéma ou un mot de passe.
Utilisateur Utilisateur Android.
Sélecteur d'utilisateurs Écran de sélection d'utilisateur affiché lors du démarrage d'un périphérique.
Sélecteur d'utilisateur Sélecteur d'utilisateur affiché lors du changement d'écran à partir de QuickSettings.

Personnaliser le changement d'utilisateur

Protège-clés et videur

Dans le système d'exploitation Android Automotive, l'écran Keyguard avec un sélecteur d'utilisateur s'affiche uniquement lorsqu'un utilisateur clique sur le bouton Annuler de l'écran de verrouillage. L’écran Keyguard est illustré ci-dessous.

Écran de protection du clavier

Figure 1. Écran de protection du clavier

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

Écran verrouillé

Figure 2. Écran de verrouillage.

Lorsque le verrou est configuré pour déclencher manuellement la mise sous ou hors tension, suivez les instructions suivantes :

adb shell input keyevent 26

Sélecteur d'utilisateurs

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

Écran de chargement

Figure 3. Écran de sélection d'utilisateurs

La disposition de cet écran peut être personnalisée 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'interface utilisateur du système du framework et correspond à la classe publique intitulée CarUserSwitchingDialog . Voir la figure 3 ci-dessus pour un exemple.

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 pilote de définir lui-même un nom d'utilisateur. Si le pilote associe ensuite l'utilisateur Android à un compte Google, le nom d'utilisateur est sélectionné dans ce compte. Cependant, si le pilote spécifie un nom, par exemple DriverB, puis associe ultérieurement ce nom d'utilisateur à son compte Google avec le nom de Maddy, le nom initialement attribué (DriverB) n'est pas modifié car ce nom a été explicitement défini. Le conducteur peut modifier le nom uniquement 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 en utilisant le 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 plus d'informations, voir Personnalisation .

Même si les constructeurs OEM peuvent fournir des points d’entrée dans l’interface utilisateur pour changer d’utilisateur, les résultats peuvent parfois s’avérer indésirables. Si cela se produit :

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

Personnaliser l'écran de verrouillage

Le Lockscreen fait partie intégrante de l’interface utilisateur du système, qui peut être personnalisée par l’OEM. Pour personnaliser le flux, commencez par frameworks/base/packages/CarSystemUI/ .

Personnaliser la configuration du premier utilisateur

L'assistant de configuration effectue la première configuration utilisateur. Cela aussi peut ê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, rationalisant ainsi le processus de l'assistant d'installation.