Оптимизация отвлечения внимания в настройках автомобиля

Оптимизация отвлечения внимания (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);
    }
}