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

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