Optymalizacja rozpraszania uwagi w ustawieniach samochodu

Optymalizacja rozpraszania uwagi to narzędzie, które pozwala ograniczyć interakcję kierowcy z aplikacją Ustawienia podczas jazdy samochodem. Niektóre ustawienia mogą wymagać zmiany podczas jazdy, aby aplikacja nie została całkowicie zablokowana. Domyślnie większość preferencji jest wyłączona, a włączone są tylko najważniejsze i łatwo aktualizowane preferencje.

Włączone aplikacje podczas jazdy

Rysunek 1.  Włączone aplikacje podczas jazdy

Cała aktywność może zostać zablokowana, jeśli nie jest zoptymalizowana pod kątem rozpraszania uwagi, jak pokazano poniżej. Ta metoda jest obecnie używana głównie do wyszukiwania w ustawieniach.

Cała aktywność została zablokowana

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

Podstawowe dostosowywanie wydajności DO można wykonać za pomocą nakładek konfiguracyjnych. Jeśli potrzebujesz bardziej precyzyjnego dostosowania, możesz wprowadzić dodatkowe zmiany za pomocą kodu.

Dostosowywanie na wysokim poziomie

Gdy ustawienie jest wyłączone podczas jazdy, po jego kliknięciu wyświetla się komunikat informujący, że nie jest ono dostępne podczas jazdy, o ile jest ono powiązane z kontrolerem ustawień. Komunikat zawiera ciąg znaków restricted_while_driving, który można dostosować za pomocą nakładki (pod warunkiem, że ciąg znaków nie przekracza 60 znaków).

Niestandardowa 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 korzystać z każdego aspektu aplikacji Ustawienia.

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

Jeśli w przypadku tej konfiguracji ustawienie jest ustawione na „fałsz”, aplikacja Ustawienia korzysta z ustawienia config_ignore_ux_restrictionsdo określenia, które ustawienia mają być włączone podczas jazdy. Podane tu ciągi powinny wskazywać ciągi zdefiniowane w atrybucie preference_keys.xml.

Przykład

W tym przykładzie pokazujemy, jak włączyć głęboko zagnieżdżone ustawienie podczas jazdy. W tym przykładzie pokazujemy, jak włączyć ustawienia przetwarzania tekstu na mowę (TTS). Aby to zrobić, dodaj wszystkie ustawienia w hierarchii do config_ignore_ux_restrictions. Obejmuje to system, języki i metody wprowadzania oraz preferencje dotyczące TTS, ponieważ nasza hierarchia to: System > Języki i wprowadzanie tekstu > Zamiana tekstu na mowę. Ustawienia we fragmencie tekstu do zamiany tekstu na mowę będą jednak nadal wyłączone. Aby je włączyć, musimy dodać klucze preferencji, które mają być dostępne. W tym przykładzie chcemy włączyć ustawienia odtwarzania, ale nie ustawienia silnika, więc do naszej konfiguracji dodajemy 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 dostosowywanie

Niektóre ustawienia mogą wymagać bardziej spersonalizowanego działania niż tylko włączenia lub wyłączenia ustawienia na podstawie stanu jazdy. Na przykład Bluetooth i Wi-Fi zostały już zmodyfikowane tak, aby podczas jazdy wyświetlały się zapisane urządzenia Bluetooth lub punkty dostępu Wi-Fi.

Obecnie nie ma rozwiązania opartego na konfiguracji, które umożliwiałoby wprowadzanie tego rodzaju korekt. Zamiast tego możesz utworzyć klasę niestandardową, która rozszerza klasę PreferenceController i zastępuje metodę onApplyUxRestrictions(), aby wprowadzić odpowiednie zmiany.

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

Przykłady

W CarSettings niektóre ustawienia mają bardziej dostosowane zachowanie, które może służyć jako przykład dodatkowej personalizacji. 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). Aby to zrobić:

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

Wyświetlone tutaj punkty dostępu są już ograniczone, więc nie chcesz stosować dodatkowych funkcji UxRestrictions do tych preferencji. Dlatego zastąp zasadę onApplyUxRestrictions i celowo wykonaj działanie bezobsługowe:

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

Innym przykładem są urządzenia z połączeniem Bluetooth. Aby umożliwić nadal łączenie się z urządzeniami Bluetooth i rozłączanie się z nimi, ale wyłączyć dostęp do dodatkowych ustawień tych urządzeń. Aby to osiągnąć, ponownie zastąpimy onApplyUxRestrictions, ale tym razem, jeśli aktywne jest ograniczenie NO_SETUP, ukryjemy działanie dodatkowe w ustawieniu.

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