Optimización de la distracción en la configuración del coche

La optimización de la distracción (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. Es posible que sea necesario cambiar algunas configuraciones mientras se conduce, para que la aplicación no se bloquee por completo. 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 conduces

Figura 1. Aplicaciones habilitadas mientras se conduce

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

Todas las actividades bloqueadas

Figura 2. Todas las actividades bloqueadas

Se pueden realizar personalizaciones básicas del rendimiento de DO mediante 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 informativo 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 restricted_while_driving , que se puede personalizar con una superposición (siempre que la cadena tenga menos del 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 falsa, 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 se 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 todavía están deshabilitadas. Para habilitarlos, debemos agregar las claves de las preferencias a las que queremos que sean accesibles. En este ejemplo, queremos habilitar las preferencias de reproducción pero no la preferencia del motor, por lo 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 pueden requerir un comportamiento más personalizado que simplemente habilitar/deshabilitar una preferencia según el estado de conducción. Por ejemplo, Bluetooth y Wi-Fi ya se han modificado para mostrar dispositivos Bluetooth guardados o puntos de acceso Wi-Fi 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 extienda PreferenceController y anule onApplyUxRestrictions() para realizar los cambios deseados.

Cuando 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 utilizar como ejemplos 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 operación no operativa 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 conectados 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, volvemos a anular 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);
    }
}