Optymalizacja rozpraszania uwagi w ustawieniach samochodu

Optymalizacja rozpraszania uwagi jest narzędziem ograniczającym interakcję kierowcy z aplikacją Ustawienia samochód jest w ruchu. Niektóre ustawienia trzeba zmienić podczas jazdy, więc aplikacja nie całkowicie zablokowane. Domyślnie jednak większość ustawień jest wyłączona, wykorzystując tylko klawisze które można łatwo aktualizować.

Aplikacje włączone podczas jazdy

Rysunek 1. Aplikacje włączone podczas jazdy

Blokowane mogą też być całe aktywności, które nie są zoptymalizowane, jak pokazano poniżej. Ta metoda jest obecnie używana głównie do wyszukiwania ustawień.

Cała aktywność została zablokowana

Rysunek 2. Cała aktywność została zablokowana

Podstawowe modyfikacje wydajności działania powodującego konwersję można dostosować za pomocą konfiguracji nakładki. Jeśli potrzebujesz bardziej precyzyjnego dostosowania, dodatkowe zmiany mogą przez kod.

Dostosowywanie wysokiego poziomu

Gdy dana preferencja jest wyłączona podczas jazdy, kliknięcie jej powoduje wyświetlenie komunikatu z informacją, że ustawienie jest niedostępne podczas jazdy, jest podłączony kontroler preferencji. W wiadomości jest używany element Ciąg tekstowy restricted_while_driving, który można dostosować za pomocą nakładki (pod warunkiem, że ciąg znaków nie przekracza limitu 60 znaków).

Spersonalizowana nakładka

Rysunek 3. Spersonalizowana nakładka

Całą platformę DOT można wyłączyć za pomocą polecenia config_always_ignore_ux_restrictions. Jeśli zasada ma wartość Prawda, kierowca może wchodzić w interakcje z każdym aspektem Ustawienia.

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

Jeśli powyższa konfiguracja ma wartość Fałsz, aplikacja Ustawienia przełącza się na config_ignore_ux_restrictions by określić, które preferencje powinny być włączone podczas jazdy. Podane tutaj ciągi tekstowe powinien wskazywać ciągi tekstowe zdefiniowane w polu preference_keys.xml.

Przykład

Ten przykład pokazuje, jak podczas jazdy włączyć ustawienie głęboko zagnieżdżone pokazuje, jak włączyć ustawienia przetwarzania tekstu na mowę (TTS). Aby to działało, dodaj wszystkie ustawienia w hierarchii do zadania config_ignore_ux_restrictions. Dotyczy to systemu, języków i danych wejściowych oraz preferencji dotyczących zamiany tekstu na mowę do konfiguracji, ponieważ nasza hierarchia jest System->Języki i Wprowadzanie -> Zamiana tekstu na mowę. Preferencje we fragmencie tekstu do zamiany tekstu na mowę jest nadal wyłączona. Aby je włączyć, musimy dodać klucze odpowiadające preferencjom. W tym Na przykład chcemy włączyć preferencje odtwarzania, ale nie silnik więc dodamy do naszej konfiguracji pk_tts_playback_group.

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

Szczegółowe dostosowanie

Niektóre preferencje mogą wymagać bardziej spersonalizowanych działań niż wystarczy włączyć/wyłączyć preferencje na podstawie stanu jazdy. Przykład: Bluetooth i Wi-Fi zostały już zmienione, by wyświetlać zapisane urządzenia Bluetooth lub Punkty dostępu do sieci Wi-Fi podczas jazdy.

Obecnie nie ma rozwiązania opartego na konfiguracji, które umożliwiałoby korekty. Zamiast tego możesz utworzyć klasę niestandardową, która rozszerza PreferenceController i zastępuje ustawienie onApplyUxRestrictions(), aby nadać zmian.

Po utworzeniu niestandardowego kontrolera preferencji możesz nałożyć odpowiedni plik XML możesz zastąpić domyślny kontroler preferencji własną implementacją.

Przykłady

Niektóre ustawienia w ustawieniach samochodu są bardziej dostosowane do indywidualnych potrzeb. wykorzystane jako przykłady do dodatkowego dostosowania, Na przykład na liście punktów dostępu Wi-Fi pożądane działanie to wyświetlanie tylko zapisanych punktów dostępu podczas jazdy (i ukrywanie pozostałych). W tym celu wykonaj następujące czynności:

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

Widoczne tutaj punkty dostępu są już ograniczone, Nie chcesz stosować dodatkowych ustawień typu UxRestrictions do tych preferencji. Dlatego zastąp ustawienie onApplyUxRestrictions i wykonaj zamierzone działanie brak operacji:

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

Inny przykład dotyczy urządzeń połączonych przez Bluetooth. Aby kontynuować włączanie i wyłączanie łączenia urządzeń Bluetooth, ale chciałem wyłączyć dostęp do dodatkowych ustawień tych urządzeń. Aby to osiągnąć, ponownie zastąp onApplyUxRestrictions, ale tym razem, jeśli NO_SETUP ograniczenie jest aktywne, ukryj działanie dodatkowe w odniesieniu do tego ustawienia.

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