Optimisation des distractions dans les paramètres du véhicule

Optimisation des distractions est fourni pour réduire l'interaction du conducteur avec l'application Paramètres la voiture est en mouvement. Certains paramètres peuvent avoir besoin d'être modifiés lorsque vous conduisez afin que l'application ne soit pas entièrement bloquées. Cependant, par défaut, la plupart des préférences sont désactivées l'activation des préférences facilement mises à jour.

Applis activées en conduisant

Figure 1. Applications activées en conduisant

Des activités entières peuvent aussi être bloquées si elles ne sont pas optimisées pour la distraction comme indiqué 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 personnaliser de base les performances de DO dans la configuration superpositions. Si vous avez besoin d'une personnalisation plus précise, d'autres modifications peuvent peuvent être réalisées à l'aide de code.

Personnalisation avancée

Lorsqu'une préférence est désactivée au volant, un toast s'affiche lorsque l'utilisateur appuie dessus un message indiquant que la préférence n'est pas disponible pendant la conduite, à condition que la préférence est associé à un contrôleur de préférences. Le message utilise le paramètre Chaîne restricted_while_driving, qui peut être personnalisée avec une superposition (à condition que la chaîne ne dépasse pas 60 caractères).

Superposition personnalisée

Figure 3. Superposition personnalisée

Vous pouvez désactiver l'ensemble du framework DO à l'aide de config_always_ignore_ux_restrictions. Si cette règle est définie sur "true", le conducteur peut interagir avec tous les aspects 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 les préférences à activer lorsque vous conduisez. Chaînes fournies ici doit pointer vers les chaînes définies dans preference_keys.xml.

Exemple

Cet exemple montre comment activer un paramètre profondément imbriqué lorsque vous conduisez. montre comment activer les paramètres de sortie de la synthèse vocale. Pour que cela fonctionne, ajouter tous les paramètres de la hiérarchie à config_ignore_ux_restrictions. Cela inclut le système, les langues, la saisie et les préférences de synthèse vocale pour la configuration, car notre hiérarchie est Système->Langues et Entrée -> Sortie de la synthèse vocale. Toutefois, les préférences dans le fragment de synthèse vocale est toujours désactivée. Pour les activer, nous devons ajouter les clés des préférences que nous voulons rendre accessibles. Dans ce Par exemple, nous voulons activer les préférences de lecture, mais pas le 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é en activant/désactivant simplement 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 points d'accès Wi-Fi pendant que vous conduisez.

Il n'existe actuellement aucune solution de configuration des ajustements. À la place, vous pouvez créer une classe personnalisée qui étend PreferenceController et remplace onApplyUxRestrictions() pour obtenir des modifications.

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

Exemples

Dans CarSettings, certaines préférences ont ce comportement plus personnalisé, qui peut être utilisés comme exemples pour une personnalisation supplémentaire. Par exemple, dans la liste des points d'accès Wi-Fi, le le comportement souhaité consiste à n'afficher que les points d'accès enregistrés lorsque vous conduisez (et en masquant 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 apparaissent ici sont déjà restreints, vous si vous ne souhaitez pas appliquer d'autres UxRestrictions à ces préférences. Par conséquent, remplacez onApplyUxRestrictions et effectuez une opération intentionnelle no-op:

@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 connectés en Bluetooth. Pour continuer à permettre aux appareils Bluetooth d'être connectés à et déconnectés, mais je voulais les désactiver l'accès à des paramètres supplémentaires pour ces appareils. Pour ce faire, nous remplacer à nouveau onApplyUxRestrictions, mais cette fois, si NO_SETUP est active, masquez l'action secondaire au niveau de la préférence.

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