Оптимизация отвлечения внимания (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 желаемое поведение — отображать только сохраненные точки доступа во время вождения (и скрывать остальные). Чтобы добиться этого, сделайте следующее:
} 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); } }