Оптимизация отвлечения внимания (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.
Пример
Чтобы показать, как включить глубоко вложенный параметр во время вождения, в этом примере показано, как включить параметры вывода текста в речь (TTS). Чтобы это работало, добавьте все настройки в иерархии в config_ignore_ux_restrictions
. Это включает в себя систему, языки и ввод, а также настройки TTS для конфигурации, поскольку наша иерархия — Система-> Языки и ввод-> Преобразование текста в речь. Однако настройки во фрагменте преобразования текста в речь по-прежнему будут отключены. Чтобы включить их, нам нужно добавить ключи для настроек, которые мы хотим сделать доступными. В этом примере мы хотим включить настройки воспроизведения, но не настройки движка, поэтому мы добавим 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 желательно показывать только сохраненные точки доступа во время вождения (и скрывать остальные). Чтобы добиться этого, сделайте следующее:
mAccessPoints = CarUxRestrictionsHelper.isNoSetup(getUxRestrictions()) ? getCarWifiManager().getSavedAccessPoints() : getCarWifiManager().getAllAccessPoints();
Поскольку отображаемые здесь точки доступа уже ограничены, вы не хотите применять дополнительные 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); } }