Restrictions liées à l'expérience utilisateur de la voiture

Avant de continuer, consultez les Consignes relatives à la distraction au volant.

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

Le service Car UX Restrictions permet aux développeurs de définir une nouvelle configuration de restrictions UX pour les voitures. 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 n'est conservée que dans la nouvelle configuration. En d'autres termes, la configuration ne prend pas effet immédiatement. La nouvelle configuration est chargée lorsque le service Restrictions d'expérience utilisateur redémarre et que la voiture est en position de stationnement. Le service automobile s'assure que la voiture est en position de stationnement avant de recharger la nouvelle configuration.

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

  • Véhicule à l'arrêt Le véhicule est en position P.
  • Inactivité : Le véhicule n'est pas en position P (Parking) et la vitesse est nulle.
  • Déménagement : Le véhicule n'est pas en position P et la vitesse n'est pas nulle.

Pour savoir comment les applications consomment l'état de conduite d'une voiture et les restrictions d'expérience utilisateur correspondantes, consultez Consommer l'état de conduite d'une voiture et les restrictions d'expérience utilisateur.

Configuration des restrictions en fonction des états de conduite

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

  • Véhicule à l'arrêt Sans restriction.
  • Inactivité : Aucune vidéo ni aucun écran de configuration.
  • Déménagement : Accès limité complètement (toutes les restrictions sont obligatoires).

Le mappage illustré ci-dessus est prédéterminé et configuré en tant que ressource XML. /packages/services/Car/+/android16-qpr1-release/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 d'expérience utilisateur 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 écrans supplémentaires. Pour créer des configurations de restriction pour plusieurs écrans, incluez le tag RestrictionMapping avec le physicalPort 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 choisir n'importe quel nom pour le mode, par exemple adolescent. Dans l'exemple suivant, différentes restrictions sont configurées pour les modes default et passenger (auparavant, seul le mode passenger é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 de manière identique au schéma de configuration XML actuel. CarUxRestrictionsConfiguration peut être construit avec CarUxRestrictions.Builder, qui valide la configuration lors de la compilation.

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 trajet avec CarUxRestrictionsManager. Cette méthode nécessite l'autorisation Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION.

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

Persister une nouvelle configuration des restrictions relatives à l'expérience utilisateur

Lorsqu'une nouvelle configuration est transmise, le service UX Restrictions renvoie une valeur booléenne pour indiquer si la nouvelle configuration a bien été enregistrée. 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 de restrictions de l'expérience utilisateur contient deux ensembles de configurations :

  • Production Bien que facultative, cette configuration est souvent présente. Le service de restrictions relatives à l'expérience utilisateur lit cette configuration au démarrage.
  • Par étapes : Cette configuration est également facultative. Elle n'a aucun effet sur les restrictions UX et est promue en production lorsque le service automobile démarre et lorsque la voiture est garée.

Configuration de la version en production

Figure 1 : Configuration de la version en production

Résoudre les échecs

Tant que les informations sur l'état de conduite ne sont pas reçues de CarPropertyManager (par exemple, au démarrage), les restrictions UX ne sont pas appliquées. Le système se comporte comme si l'état de conduite était "Garé".

Si la lecture d'une configuration enregistrée échoue (par exemple, en raison d'une exception SettingNotFoundException), le service Restrictions UX repasse au mode entièrement restreint codé en dur :

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

État de conduite et restrictions utilisateur

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

Interactions avec l&#39;état de conduite

Figure 2. Interactions avec l'état de conduite

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

Utilisez les trois VehiclePropertyIds suivants pour déterminer l'état de conduite :

API disponibles pour les applications

Le code se trouve aux emplacements suivants :

Code Position
CarUxRestrictionsManager
API publiques à enregistrer pour les modifications des restrictions d'UX.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
Définition des restrictions relatives à l'expérience utilisateur.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
API système à enregistrer pour les changements d'état de conduite.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Pour simuler des états de conduite, consultez Tests.