Ablenkungsoptimierung in den Fahrzeugeinstellungen

Die Ablenkungsoptimierung (DO) dient als Tool, um die Interaktion des Fahrers mit der Einstellungen-App während der Fahrt zu reduzieren. Während der Fahrt müssen möglicherweise einige Einstellungen geändert werden, damit die App nicht vollständig blockiert wird. Allerdings sind die meisten Einstellungen standardmäßig deaktiviert, sodass nur wichtige und leicht aktualisierbare Einstellungen aktiviert sind.

Aktivierte Apps während der Fahrt

Abbildung 1. Aktivierte Apps während der Fahrt

Auch ganze Aktivitäten können blockiert werden, wenn sie nicht ablenkungsoptimiert sind, wie unten gezeigt. Diese Methode wird derzeit hauptsächlich für die Einstellungssuche verwendet.

Alle Aktivitäten blockiert

Abbildung 2. Alle Aktivitäten blockiert

Grundlegende Anpassungen der Leistung von DO können durch Konfigurations-Overlays vorgenommen werden. Wenn Sie eine detailliertere Anpassung benötigen, können zusätzliche Änderungen über den Code vorgenommen werden.

Anpassung auf höchstem Niveau

Wenn eine Präferenz während der Fahrt deaktiviert ist, wird durch Tippen darauf eine Toastmeldung angezeigt, die besagt, dass die Präferenz während der Fahrt nicht verfügbar ist, sofern mit der Präferenz ein Präferenzcontroller verbunden ist. Die Nachricht verwendet die Zeichenfolge restricted_while_driving , die mit einem Overlay angepasst werden kann (vorausgesetzt, die Zeichenfolge ist kürzer als die Begrenzung auf 60 Zeichen).

Angepasstes Overlay

Abbildung 3. Angepasstes Overlay

Das gesamte DO-Framework kann mit config_always_ignore_ux_restrictions deaktiviert werden. Wenn Sie dies auf „true“ setzen, bedeutet dies, dass der Fahrer mit jedem Aspekt der Einstellungen-App interagieren kann.

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

Wenn die obige Konfiguration auf „false“ gesetzt ist, greift die App „Einstellungen“ auf config_ignore_ux_restrictions zurück, um zu bestimmen, welche Einstellungen während der Fahrt aktiviert werden sollen. Die hier bereitgestellten Zeichenfolgen sollten auf die in preference_keys.xml.

Beispiel

Um zu zeigen, wie eine tief verschachtelte Einstellung während der Fahrt aktiviert wird, zeigt dieses Beispiel, wie die Ausgabeeinstellungen für Text-to-Speech (TTS) aktiviert werden. Damit dies funktioniert, fügen Sie alle Einstellungen in der Hierarchie zu config_ignore_ux_restrictions hinzu. Dazu gehören das System, die Sprachen und die Eingabe sowie die TTS-Einstellungen für die Konfiguration, da unsere Hierarchie System->Sprachen und Eingabe->Text-zu-Sprache-Ausgabe ist. Die Einstellungen innerhalb des Text-to-Speech-Fragments sind jedoch weiterhin deaktiviert. Um sie zu aktivieren, müssen wir die Schlüssel für die Einstellungen hinzufügen, auf die wir zugreifen möchten. In diesem Beispiel möchten wir die Wiedergabeeinstellungen, aber nicht die Engine-Einstellungen aktivieren, also fügen wir pk_tts_playback_group zu unserer Konfiguration hinzu.

<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>

Detaillierte Anpassung

Es gibt einige Präferenzen, die möglicherweise ein individuelleres Verhalten erfordern, als einfach eine Präferenz basierend auf dem Fahrzustand zu aktivieren/deaktivieren. Beispielsweise wurden Bluetooth und WLAN bereits so angepasst, dass gespeicherte Bluetooth-Geräte oder WLAN-Zugangspunkte während der Fahrt angezeigt werden.

Derzeit gibt es keine konfigurationsbasierte Lösung, um solche Anpassungen vorzunehmen. Stattdessen können Sie eine benutzerdefinierte Klasse erstellen, die PreferenceController erweitert und onApplyUxRestrictions() überschreibt, um die gewünschten Änderungen vorzunehmen.

Wenn ein benutzerdefinierter Präferenz-Controller erstellt wird, können Sie die relevante XML-Datei überlagern, um den Standard-Präferenz-Controller durch Ihre eigene Implementierung zu ersetzen.

Beispiele

In CarSettings verfügen einige Einstellungen über dieses individuellere Verhalten, das als Beispiele für zusätzliche Anpassungen verwendet werden kann. Beispielsweise besteht das gewünschte Verhalten in der WLAN-Zugangspunktliste darin, während der Fahrt nur gespeicherte Zugangspunkte anzuzeigen (und den Rest auszublenden). Um dies zu erreichen, gehen Sie wie folgt vor:

mAccessPoints = CarUxRestrictionsHelper.isNoSetup(getUxRestrictions())
               ? getCarWifiManager().getSavedAccessPoints()
               : getCarWifiManager().getAllAccessPoints();

Da die hier angezeigten Zugriffspunkte bereits eingeschränkt sind, möchten Sie keine zusätzlichen UxRestrictions auf diese Einstellungen anwenden. Überschreiben Sie daher onApplyUxRestrictions und führen Sie einen absichtlichen No-Op-Vorgang durch:

@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.
}

Ein weiteres Beispiel finden Sie in Bluetooth-gebundenen Geräten . Ich möchte weiterhin die Verbindung und Trennung von Bluetooth-Geräten ermöglichen, wollte aber die Möglichkeit deaktivieren, auf zusätzliche Einstellungen für diese Geräte zuzugreifen. Um dies zu erreichen, überschreiben wir erneut onApplyUxRestrictions , aber dieses Mal blenden wir die sekundäre Aktion für die Einstellung aus, wenn die NO_SETUP Einschränkung aktiv ist.

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