Optimisation contre la distraction dans les paramètres de la voiture

L'optimisation des distractions (DO) est fournie en tant qu'outil permettant de réduire l'interaction du conducteur avec l'application Paramètres lorsque la voiture est en mouvement. Certains paramètres doivent peut-être être modifiés lorsque vous conduisez pour que l'application ne soit pas complètement bloquée. Toutefois, par défaut, la plupart des préférences sont désactivées, et seules les préférences clés et facilement mises à jour sont activées.

Applications activées en conduisant

Figure 1. Applications activées en conduisant

Des activités entières peuvent également être bloquées si elles ne sont pas optimisées pour réduire les distractions, comme illustré ci-dessous. Cette méthode est actuellement utilisée principalement pour la recherche de paramètres.

Toutes les activités sont bloquées.

Figure 2 Toutes les activités sont bloquées.

Vous pouvez effectuer des personnalisations de base des performances de la diffusion en direct via des superpositions de configuration. Si vous avez besoin d'une personnalisation plus précise, vous pouvez apporter des modifications supplémentaires via le code.

Personnalisation de haut niveau

Lorsqu'une préférence est désactivée lorsque vous conduisez, un message de type "toast" s'affiche pour indiquer qu'elle n'est pas disponible lorsque vous conduisez, à condition qu'un contrôleur de préférences y soit associé. Le message utilise la chaîne restricted_while_driving, qui peut être personnalisée avec une superposition (à condition que la chaîne soit inférieure à la limite de 60 caractères).

Superposition personnalisée

Figure 3.  Superposition personnalisée

L'intégralité du framework DO peut être désactivée à l'aide de config_always_ignore_ux_restrictions. Si cette valeur est définie sur "true", le pilote peut interagir avec tous les aspects de l'application Paramètres.

<bool name="config_always_ignore_ux_restrictions">true</bool>

Si la configuration ci-dessus est définie sur "false", l'application Paramètres utilise config_ignore_ux_restrictions pour déterminer quelles préférences doivent être activées lorsque vous conduisez. Les chaînes fournies ici doivent pointer vers les chaînes définies dans preference_keys.xml..

Exemple

Pour vous montrer comment activer un paramètre profondément imbriqué pendant la conduite, cet exemple explique comment activer les paramètres de sortie de synthèse vocale (TTS). Pour que cela fonctionne, ajoutez tous les paramètres de la hiérarchie à config_ignore_ux_restrictions. Cela inclut le système, les langues et la saisie, ainsi que les préférences de synthèse vocale dans la configuration, car notre hiérarchie est la suivante : Système->Langues et saisie->Synthèse vocale. Toutefois, les préférences du fragment de synthèse vocale sont toujours désactivées. Pour les activer, nous devons ajouter les clés des préférences que nous souhaitons rendre accessibles. Dans cet exemple, nous souhaitons activer les préférences de lecture, mais pas les préférences du moteur. Nous ajoutons donc pk_tts_playback_group à notre configuration.

<string-array name="config_ignore_ux_restrictions">
    [...]
    <item>@string/pk_system_settings_entry</item>
    <item>@string/pk_languages_and_input_settings</item>
    <item>@string/pk_tts_settings_entry</item>
    <item>@string/pk_tts_playback_group</item>
</string-array>

Personnalisation détaillée

Certaines préférences peuvent nécessiter un comportement plus personnalisé que simplement activer/désactiver une préférence en fonction de l'état de conduite. Par exemple, le Bluetooth et le Wi-Fi ont déjà été modifiés pour afficher les appareils Bluetooth enregistrés ou les points d'accès Wi-Fi lorsque vous conduisez.

Il n'existe actuellement aucune solution basée sur la configuration pour effectuer ce type d'ajustements. Vous pouvez plutôt créer une classe personnalisée qui étend PreferenceController et remplace onApplyUxRestrictions() pour apporter les modifications souhaitées.

Lorsqu'un contrôleur de préférences personnalisé est créé, vous pouvez superposer le fichier XML approprié pour remplacer le contrôleur de préférences par défaut par votre propre implémentation.

Exemples

Dans CarSettings, certaines préférences présentent ce comportement plus personnalisé, qui peut être utilisé comme exemple pour une personnalisation supplémentaire. Par exemple, dans la liste des points d'accès Wi-Fi, le comportement souhaité est de n'afficher que les points d'accès enregistrés lorsque vous conduisez (et de masquer le reste). Pour ce faire, procédez comme suit:

} else if (shouldApplyUxRestrictions(getUxRestrictions())) {
    wifiEntries = getCarWifiManager().getSavedWifiEntries();
} else {
    wifiEntries = getCarWifiManager().getAllWifiEntries();
}

Étant donné que les points d'accès qui s'affichent ici sont déjà limités, vous ne souhaitez pas appliquer d'UxRestrictions supplémentaires à ces préférences. Par conséquent, remplacez onApplyUxRestrictions et effectuez une opération sans effet intentionnelle:

@Override
protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) {
    // Since the list dynamically changes based on the UX restrictions, we
    // enable this fragment regardless of the restriction. Intentional no-op.
}

Un autre exemple est fourni dans la section Appareils associés Bluetooth. Pour continuer à autoriser la connexion et la déconnexion des appareils Bluetooth, mais pour désactiver l'accès à des paramètres supplémentaires pour ces appareils. Pour ce faire, nous forçons à nouveau onApplyUxRestrictions, mais cette fois, si la restriction NO_SETUP est active, nous masquons l'action secondaire dans la préférence.

@Override
protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) {
    super.onApplyUxRestrictions(uxRestrictions);
    if (CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) {
        updateActionVisibility(getPreference(), /* isActionVisible= */ false);
    }
}