Optimización de distracciones en la configuración del vehículo

Optimización de distracciones se proporciona como una herramienta para reducir la interacción del conductor con la app de Configuración mientras se realiza una el vehículo está en movimiento. Algunos parámetros de configuración pueden requerir cambios mientras conduces, por lo que no se debe modificar la app está completamente bloqueada. Sin embargo, de forma predeterminada, la mayoría de las preferencias se inhabilitan solo con las teclas que se habilitarán preferencias que se actualizan fácilmente.

Apps habilitadas mientras conduces

Figura 1: Apps habilitadas mientras conduces

También se pueden bloquear actividades enteras si no están optimizadas para generar distracciones. como se muestra a continuación. Actualmente, este método se usa principalmente para la búsqueda de configuración.

Se bloquearon todas las actividades

Figura 2: Se bloquearon todas las actividades

Las personalizaciones básicas del rendimiento de DO se pueden realizar a través de la configuración superposiciones. Si requieres una personalización más detallada, se pueden aplicar puede hacerse a través del código.

Personalización de alto nivel

Si una preferencia está inhabilitada mientras conduces, cuando la presionas, se muestra un aviso un mensaje que indica que la preferencia no está disponible mientras conduces, siempre y cuando la preferencia tenga un controlador de preferencias adjunto. El mensaje usa el String restricted_while_driving, que se puede personalizar con una superposición (siempre que la cadena supere el límite de 60 caracteres).

Superposición personalizada

Figura 3: Superposición personalizada

Todo el framework DO se puede inhabilitar con config_always_ignore_ux_restrictions. Si se establece en verdadero, el conductor podrá interactuar con todos los aspectos de la App de Configuración.

<bool name="config_always_ignore_ux_restrictions">true</bool>

Si la configuración anterior se establece como falsa, la app de Configuración utiliza config_ignore_ux_restrictions para determinar qué preferencias deben habilitarse mientras conduces. Las cadenas que se proporcionan aquí debe apuntar a las cadenas definidas en preference_keys.xml..

Ejemplo

Para mostrar cómo habilitar un parámetro de configuración profundamente anidado durante la conducción, en este ejemplo muestra cómo habilitar la configuración de salida de texto a voz (TTS). Para que esto funcione, Agregar todos los parámetros de configuración de la jerarquía a config_ignore_ux_restrictions Esto incluye el sistema, los idiomas y la entrada, y las preferencias de TTS para la configuración, ya que nuestra jerarquía es Sistema->Idiomas e Entrada->Salida de texto a voz. Sin embargo, las preferencias dentro del fragmento de texto a voz sigue inhabilitado. Para habilitarlas, deberá agregar las claves de las preferencias que queremos que sean accesibles. En este Por ejemplo, queremos habilitar las preferencias de reproducción, pero no el motor preferencia, así que agregamos pk_tts_playback_group a nuestra configuración.

<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>

Personalización detallada

Hay algunas preferencias que podrían requerir un comportamiento más personalizado que de habilitar o inhabilitar una preferencia según el estado de conducción. Por ejemplo: Bluetooth y Wi-Fi ya se modificaron para que muestren los dispositivos Bluetooth guardados o Puntos de acceso Wi-Fi mientras conduces.

Actualmente, no hay una solución basada en la configuración para hacer este tipo de ajustes. En su lugar, puedes crear una clase personalizada que extienda PreferenceController y anula onApplyUxRestrictions() para hacer que el valor cambios.

Cuando se crea un controlador de preferencias personalizado, puedes superponer el archivo XML relevante para reemplazar el controlador de preferencias predeterminado por tu propia implementación.

Ejemplos

En CarSettings, algunas preferencias tienen este comportamiento más personalizado, que se puede y se usan como ejemplos para una personalización adicional. Por ejemplo, en la lista de puntos de acceso Wi-Fi, el ícono el comportamiento deseado es mostrar solo los puntos de acceso guardados mientras conduces (y ocultar el resto). Para lograrlo, haz lo siguiente:

} else if (shouldApplyUxRestrictions(getUxRestrictions())) {
    wifiEntries = getCarWifiManager().getSavedWifiEntries();
} else {
    wifiEntries = getCarWifiManager().getAllWifiEntries();
}

Debido a que los puntos de acceso que aparecen aquí ya están restringidos, no desea aplicar UxRestrictions adicionales a estas preferencias. Por lo tanto, anula onApplyUxRestrictions y realiza una acción no-ops:

@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.
}

Se proporciona otro ejemplo en Dispositivos conectados a Bluetooth. Para continuar habilitando la conexión y desconexión de dispositivos Bluetooth, pero quería inhabilitar la capacidad de acceder a la configuración adicional de estos dispositivos. Para lograrlo, anular de nuevo onApplyUxRestrictions, pero esta vez si el valor de NO_SETUP restricción está activa, oculta la acción secundaria en la preferencia.

@Override
protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) {
    super.onApplyUxRestrictions(uxRestrictions);
    if (CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) {
        updateActionVisibility(getPreference(), /* isActionVisible= */ false);
    }
}