Restrictions relatives à l'expérience utilisateur de la voiture

Avant de continuer, consultez les lignes directrices sur la distraction au volant .

Cette page décrit les règles de restrictions de l'expérience utilisateur automobile (UX) que vous pouvez utiliser pour créer plusieurs configurations de règles de restrictions UX (par exemple, Union européenne contre Japon), puis déterminer l'ensemble de règles à appliquer au moment de l'exécution. Pour plus d’informations, consultez CarUxRestrictions .

Le service Car UX Restrictions permet aux développeurs de définir une nouvelle configuration de restrictions Car UX. Si un développeur souhaite modifier les règles de restriction (par exemple pour se conformer aux normes de sécurité locales), il peut utiliser l'API pour définir la nouvelle configuration.

L'API permettant de définir la configuration persiste uniquement dans la nouvelle configuration. Autrement dit, la configuration ne prend pas effet immédiatement. Au lieu de cela, la nouvelle configuration est chargée lorsque le service Restrictions UX redémarre et que la voiture est en stationnement. Le service automobile s'assure que la voiture est en stationnement avant de recharger la nouvelle configuration.

En plus de la nouvelle méthode de service UX Restrictions, des API sont fournies pour construire la configuration. L'état de sélection des rapports et de vitesse est converti en l'un des trois états de conduite :

  • Garé. Équipement dans le parc.
  • Au ralenti. Le rapport n'est pas en position de stationnement et la vitesse est nulle.
  • En mouvement. Le rapport n'est pas en position de stationnement et la vitesse n'est pas nulle.

Pour savoir comment les applications consomment l'état de conduite d'une voiture et les restrictions UX correspondantes, consultez Consommation de l'état de conduite d'une voiture et restrictions UX .

Configuration des restrictions en fonction des états des lecteurs

Pour éviter toute distraction du conducteur, Android mappe l'état de conduite à un ensemble de restrictions UX. /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Garé. Libre.
  • Au ralenti. Pas de vidéo et pas d'écran de configuration.
  • En mouvement. Entièrement restreint (toutes les restrictions sont requises).

Le mappage illustré ci-dessus est prédéterminé et configuré en tant que ressource XML. Le /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java enregistre ensuite les règles en mémoire. Le service mappe ensuite l'état de conduite actuel aux restrictions UX et diffuse les restrictions actuelles à l'ensemble du système.

<!-- No restrictions when car is parked -->
<DrivingState car:state="parked">
    <Restrictions car:requiresDistractionOptimization="false"
                  car:uxr="baseline"/>
</DrivingState>

<!-- Restrictions when car is idling -->
<DrivingState car:state="idling">
    <Restrictions car:requiresDistractionOptimization="true"
                  car:uxr="no_video|no_config"/>
</DrivingState>

<!-- Restrictions for speed >= 0 m/s -->
<DrivingState car:state="moving" car:minSpeed="0.0">
    <Restrictions car:requiresDistractionOptimization="true"
                  car:uxr="fully_restricted"/>
</DrivingState>

Configurations pour plusieurs écrans

Par défaut, aucune restriction n'est appliquée aux affichages supplémentaires. Pour créer des configurations de restriction pour plusieurs écrans, incluez la balise RestrictionMapping avec le port physique de cet écran. Les restrictions appropriées sont automatiquement appliquées à chaque affichage. Dans l'exemple suivant, les écrans avec les ID de port physique 1 et 2 ont des configurations différentes :

<RestrictionMapping car:physicalPort="1">
       <DrivingState car:state="moving">
           <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_keyboard|no_video"/>
       </DrivingState>
   </RestrictionMapping>

   <RestrictionMapping car:physicalPort="2">
       <DrivingState car:state="moving">
           <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
       </DrivingState>
  </RestrictionMapping>

Configurations pour les modes de restriction

Vous pouvez sélectionner n'importe quel nom pour le mode, tel que teen . Dans l'exemple suivant, différentes restrictions sont configurées pour les modes par défaut et passager (auparavant, seul le mode passager était pris en charge) :

<DrivingState car:state="idling">
    <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/>
    <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
</DrivingState>
</Restrictions>
Vous pouvez utiliser l'API pour définir n'importe quel nom de chaîne pour le mode. Par exemple, la méthode setRestrictionMode(@NonNull String mode) dans CarUxRestrictionsManager. (Auparavant, vous utilisiez la méthode setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) dans CarUxRestrictionsManager).

API CarUxRestrictionsConfiguration

Restrictions avec CarUxRestrictionsConfiguration

La nouvelle classe CarUxRestrictionsConfiguration est mappée 1:1 au schéma de configuration XML actuel. CarUxRestrictionsConfiguration peut être construit avec CarUxRestrictions. Builder , qui valide la configuration lors de build().

new CarUxRestrictionsConfiguration.Builder()
        // Explicitly set restrictions for each driving state.
        .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_PARKED,
                /* requiresOptimization= */ false,
                /* restrictions= */ UX_RESTRICTIONS_BASELINE)
        .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_IDLING,
                true,
                UX_RESTRICTIONS_NO_VIDEO|UX_RESTRICTIONS_NO_SETUP)
        .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_MOVING,
                true,
                UX_RESTRICTIONS_FULLY_RESTRICTED)
        // Set restriction parameters.
        .setMaxStringLength(int max)
        .setMaxCumulativeContentItems(int max)
        .setMaxContentDepth(int max)
        // Build a new CarUxRestrictionsConfiguration.
        .build();

API CarUxRestrictionsManager

Définissez CarUxRestrictionsConfiguration pour le prochain lecteur avec CarUxRestrictionsManager . Cette méthode nécessite l'autorisation, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION .

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

Conserver une nouvelle configuration de restrictions UX

Lorsqu'une nouvelle configuration est transmise, le service Restrictions UX renvoie un booléen pour indiquer si la nouvelle configuration a été enregistrée avec succès. Cette nouvelle configuration n'est utilisée que lorsque l'unité principale intégrée (IHU) redémarre et que la voiture est garée. En interne, le service Restrictions UX contient deux ensembles de configurations :

  • Production. Bien que facultative, cette configuration est souvent présente. Le service Restrictions UX lit cette configuration au démarrage.
  • Mise en scène. Également facultative, cette configuration n'a aucun effet sur les restrictions UX et est promue en Production lorsque le service de la voiture démarre et lorsque la voiture est garée.

Configuration de production

Figure 1. Configuration de production

Résoudre les échecs

Jusqu'à ce que les informations sur l'état de conduite soient reçues de CarPropertyManager (par exemple, lors du démarrage), les restrictions UX ne seront pas appliquées. Le système fonctionne comme si l'état de conduite était Stationné.

En cas d'échec de la lecture d'une configuration enregistrée (par exemple, résultats de SettingNotFoundException), le service de restrictions UX revient au mode entièrement restreint codé en dur :

// Idling/moving state is fully restricted.
private static CarUxRestrictionsConfiguration generateDefaultConfig() {}

État de conduite et restrictions des utilisateurs

Le contenu suivant décrit les interactions affichées dans le diagramme de conception suivant :

Interactions avec l’état moteur

Figure 2. Interactions entre états moteurs

Propriétés utilisées pour dériver l'état de conduite

Utilisez les trois VehiclePropertyIds suivants pour dériver l’état de conduite :

API disponibles pour les applications

Le code réside aux emplacements suivants :

Code Emplacement
CarUxRestrictionsManager
API publiques pour s'inscrire aux modifications des restrictions UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
Définition des restrictions UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
API système pour s'inscrire aux changements d'état de conduite.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Pour simuler des états de conduite, voir Tests .