Optimización de distracciones en la configuración del automóvil

La optimización de distracciones (DO) se proporciona como una herramienta para reducir la interacción del conductor con la aplicación Configuración mientras el automóvil está en movimiento. Dado que es posible que deba cambiar algunas configuraciones mientras conduce, la aplicación no está completamente bloqueada. Sin embargo, de forma predeterminada, la mayoría de las preferencias están deshabilitadas y solo se habilitan las preferencias clave y fácilmente actualizables.

Aplicaciones habilitadas mientras conduce

Figura 1. Aplicaciones habilitadas mientras conduce

También se pueden bloquear actividades completas si no están optimizadas para la distracción, como se muestra a continuación. Este método se utiliza actualmente principalmente para la búsqueda de configuraciones.

Todas las actividades bloqueadas

Figura 2. Todas las actividades bloqueadas

Las personalizaciones básicas del rendimiento de DO se pueden realizar a través de superposiciones de configuración. Si necesita una personalización más detallada, se pueden realizar cambios adicionales a través del código.

Personalización de alto nivel

Cuando una preferencia está deshabilitada mientras se conduce, al tocarla se muestra un mensaje de brindis que indica que la preferencia no está disponible mientras se conduce, siempre que la preferencia tenga un controlador de preferencias adjunto. El mensaje utiliza la cadena de texto " restricted_while_driving ", que se puede personalizar con una superposición (siempre que la cadena sea inferior al límite de 60 caracteres).

Superposición personalizada

Figura 3. Superposición personalizada

Todo el marco DO se puede deshabilitar usando config_always_ignore_ux_restrictions . Establecer esto en verdadero significa que el conductor puede interactuar con todos los aspectos de la aplicación Configuración.

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

Si la configuración anterior se establece en falso, la aplicación Configuración recurre a config_ignore_ux_restrictions para determinar qué preferencias deben habilitarse mientras se conduce. Las cadenas proporcionadas aquí deben apuntar a las cadenas definidas en preference_keys.xml.

Ejemplo

Para mostrar cómo habilitar una configuración profundamente anidada mientras conduce, este ejemplo demuestra cómo habilitar la configuración de salida de texto a voz (TTS). Para que esto funcione, agregue todas las configuraciones en 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 y entrada->Salida de texto a voz. Sin embargo, las preferencias dentro del fragmento de texto a voz seguirán deshabilitadas. Para habilitarlos, debemos agregar las claves de las preferencias que queremos que sean accesibles. En este ejemplo, queremos habilitar las preferencias de reproducción pero no la preferencia del motor, por lo que agregaremos 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 pueden requerir un comportamiento más personalizado que simplemente activar/desactivar una preferencia basada en el estado de conducción. Por ejemplo, bluetooth y wifi ya se han modificado para mostrar dispositivos bluetooth guardados o puntos de acceso wifi mientras se conduce.

Actualmente no existe una solución basada en configuración para realizar este tipo de ajustes. En su lugar, puede crear una clase personalizada que amplíe PreferenceController y anule onApplyUxRestrictions() para realizar los cambios deseados.

Una vez que se crea un controlador de preferencias personalizado, puede superponer el archivo XML relevante para reemplazar el controlador de preferencias predeterminado con su propia implementación.

Ejemplos

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

mAccessPoints = CarUxRestrictionsHelper.isNoSetup(getUxRestrictions())
               ? getCarWifiManager().getSavedAccessPoints()
               : getCarWifiManager().getAllAccessPoints();

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, anule onApplyUxRestrictions y realice una no operación intencional:

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

Otro ejemplo se proporciona en los dispositivos vinculados por Bluetooth . Continuar habilitando la conexión y desconexión de dispositivos Bluetooth, pero quería deshabilitar la capacidad de acceder a configuraciones adicionales para estos dispositivos. Para lograr esto, nuevamente anulamos onApplyUxRestrictions pero esta vez, si la restricción NO_SETUP está activa, ocultamos la acción secundaria en la preferencia.

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