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

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