Оптимизация отвлечения внимания (DO) предоставляется как инструмент для уменьшения взаимодействия водителя с приложением «Настройки» во время движения автомобиля. Некоторые настройки могут потребоваться изменить во время вождения, поэтому приложение не блокируется полностью. Однако по умолчанию большинство настроек отключены, и включены только ключевые и легко обновляемые настройки.
Рисунок 1. Включенные приложения во время вождения
Целые действия также могут быть заблокированы, если они не оптимизированы для отвлечения внимания, как показано ниже. Этот метод в настоящее время используется в основном для поиска настроек.
Рисунок 2. Все действия заблокированы
Базовые настройки производительности DO можно выполнить с помощью наложений конфигурации. Если вам требуется более тонкая настройка, дополнительные изменения можно внести с помощью кода.
Высокий уровень настройки
Если предпочтение отключено во время вождения, нажатие на него отображает всплывающее сообщение о том, что предпочтение недоступно во время вождения, при условии, что к предпочтению прикреплен контроллер предпочтений. Сообщение использует строку restricted_while_driving
, которую можно настроить с помощью наложения (при условии, что строка меньше 60-символьного ограничения).
Рисунок 3. Индивидуально настроенное наложение
Весь фреймворк DO можно отключить с помощью config_always_ignore_ux_restrictions
. Установка этого значения в true означает, что драйвер может взаимодействовать с каждым аспектом приложения «Настройки».
<bool name="config_always_ignore_ux_restrictions">true</bool>
Если конфигурация выше установлена на false, приложение «Настройки» возвращается к config_ignore_ux_restrictions
, чтобы определить, какие предпочтения следует включить во время вождения. Строки, представленные здесь, должны указывать на строки, определенные в preference_keys.xml.
Пример
Чтобы показать, как включить глубоко вложенную настройку во время вождения, в этом примере показано, как включить настройки вывода Text-to-Speech (TTS). Чтобы это работало, добавьте все настройки в иерархии в config_ignore_ux_restrictions
. Это включает в себя системные, языковые и вводные настройки, а также настройки TTS в конфигурацию, поскольку наша иерархия — System->Languages & Input->Text-to-speech output. Однако настройки во фрагменте text-to-speech по-прежнему отключены. Чтобы включить их, нам нужно добавить ключи для настроек, которые мы хотим сделать доступными. В этом примере мы хотим включить настройки воспроизведения, но не настройки движка, поэтому мы добавляем 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>
Детальная настройка
Есть некоторые предпочтения, которые могут потребовать более индивидуального поведения, чем просто включение/выключение предпочтения на основе состояния вождения. Например, Bluetooth и Wi-Fi уже были изменены для отображения сохраненных устройств Bluetooth или точек доступа Wi-Fi во время вождения.
В настоящее время нет решения на основе конфигурации для выполнения таких настроек. Вместо этого вы можете создать пользовательский класс, который расширяет PreferenceController и переопределяет onApplyUxRestrictions()
для внесения желаемых изменений.
При создании пользовательского контроллера предпочтений вы можете наложить соответствующий XML-файл, чтобы заменить контроллер предпочтений по умолчанию собственной реализацией.
Примеры
В CarSettings некоторые настройки имеют более настраиваемое поведение, которое можно использовать в качестве примеров для дополнительной настройки. Например, в списке точек доступа Wi-Fi желаемое поведение — показывать только сохраненные точки доступа во время вождения (и скрывать остальные). Чтобы добиться этого, выполните следующие действия:
} else if (shouldApplyUxRestrictions(getUxRestrictions())) { wifiEntries = getCarWifiManager().getSavedWifiEntries(); } else { wifiEntries = getCarWifiManager().getAllWifiEntries(); }
Поскольку точки доступа, которые здесь отображаются, уже ограничены, вы не хотите применять дополнительные UxRestrictions
к этим настройкам. Поэтому переопределите onApplyUxRestrictions
и выполните преднамеренную холостую операцию:
@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. }
Другой пример приведен в Bluetooth-связанных устройствах . Чтобы продолжить разрешать подключение и отключение устройств Bluetooth, но хотелось бы отключить возможность доступа к дополнительным настройкам для этих устройств. Чтобы добиться этого, мы снова переопределяем onApplyUxRestrictions
, но на этот раз, если ограничение NO_SETUP
активно, скрываем вторичное действие в предпочтении.
@Override protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) { super.onApplyUxRestrictions(uxRestrictions); if (CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) { updateActionVisibility(getPreference(), /* isActionVisible= */ false); } }