Optymalizacja dotycząca rozpraszania uwagi to narzędzie, które ma ograniczyć interakcje 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.
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.
Rysunek 2. Wszystkie działania są zablokowane
Podstawowe dostosowywanie wydajności DO można wykonać za pomocą nakładek konfiguracyjnych. Jeśli potrzebujesz bardziej szczegółowego dostosowywania, możesz wprowadzić dodatkowe zmiany za pomocą kodu.
Dostosowywanie na wysokim poziomie
Gdy ustawienie jest wyłączone podczas jazdy, po jego kliknięciu wyświetli 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).
Rysunek 3. Niestandardowa nakładka
Całą strukturę DO można wyłączyć za pomocą elementu config_always_ignore_ux_restrictions
.
Ustawienie tej opcji na „Prawda” oznacza, że kierowca może korzystać ze wszystkich funkcji aplikacji Ustawienia.
<bool name="config_always_ignore_ux_restrictions">true</bool>
Jeśli w powyższym ustawieniu jest ustawiona wartość false, aplikacja Ustawienia korzysta z ustawienia
config_ignore_ux_restrictions
do określenia, które ustawienia mają być włączone podczas jazdy. Podane tutaj ciągi znaków powinny wskazywać na ciągi znaków zdefiniowane w pliku preference_keys.xml.
Przykład
Aby pokazać, jak włączyć głęboko zagnieżdżone ustawienie podczas jazdy, w tym przykładzie pokazujemy, jak włączyć ustawienia wyjścia usługi Text-to-Speech (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 w fragmentach zamiany tekstu na mowę są jednak nadal wyłączone. Aby je włączyć, musimy dodać klucze preferencji, które chcemy udostępnić. W tym przykładzie chcemy włączyć ustawienia odtwarzania, ale nie ustawienia silnika, więc dodajemy do 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 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, aby wyświetlać zapisane urządzenia Bluetooth lub punkty dostępu Wi-Fi podczas jazdy.
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łasnym.
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(); }
Punkty dostępu, które się tutaj wyświetlają, są już ograniczone, więc nie musisz stosować dodatkowych UxRestrictions
do tych ustawień.
Dlatego zastąpij onApplyUxRestrictions
i wykonaj ręcznie operację 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. }
Innym przykładem są urządzenia z Bluetoothem.
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 zrobić, ponownie zastąpimy element 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); } }