Implementar la interfaz de usuario del sistema

Android Automotive proporciona una nueva interfaz de usuario del sistema desarrollada específicamente para vehículos. La mayoría de los componentes de la interfaz de usuario del sistema están estrechamente vinculados con los servicios del marco. La interfaz de usuario del sistema se refiere a cualquier elemento que se muestra en la pantalla y que no forma parte de una aplicación. La interfaz de usuario del sistema automotriz (en el paquete de elementos CarSystemUI) es una extensión de la interfaz de usuario del sistema Android (en el paquete de interfaz de usuario del sistema), que se ha personalizado específicamente para vehículos.

¿Qué es la interfaz de usuario del sistema?

Los componentes específicos de la interfaz de usuario del sistema automotriz incluyen:

Componente Descripción
IU de pantalla de bloqueo Pantalla a través de la cual los usuarios se autentican en una cuenta de usuario específica.
Barra de navegación Barra del sistema que se puede ubicar a la izquierda, abajo o derecha de la pantalla y que puede incluir botones laterales para navegar a diferentes aplicaciones, alternar el panel de notificaciones y proporcionar controles del vehículo (como HVAC). Esto difiere de la implementación de la interfaz de usuario del sistema Android, que proporciona los botones Atrás, Inicio y pila de aplicaciones.
Barra de estado Barra de sistema posicionada a lo largo de la pantalla y que sirve como barra de navegación. La barra de estado también proporciona funcionalidad para admitir:
  • Iconos de conectividad. Incluye Bluetooth, Wi-Fi y conexión Hotspot/móvil.
  • Panel de notificaciones desplegable. Por ejemplo, deslizando el dedo hacia abajo desde la parte superior de la pantalla.
  • Notificaciones de aviso (HUN).
Interfaz de usuario del sistema Se refiere a cualquier elemento mostrado en pantalla que no forma parte de una aplicación.
Interfaz de usuario del conmutador de usuario Pantalla a través de la cual un usuario puede seleccionar un usuario diferente.
IU de volumen Cuadro de diálogo que se muestra cuando el controlador usa botones de volumen físicos para cambiar el volumen en un dispositivo.

¿Cómo funciona la interfaz de usuario del sistema?

La interfaz de usuario del sistema es una aplicación de Android que se ejecuta cuando se enciende un dispositivo. La aplicación se inicia mediante la reflexión del SystemServer . Los puntos de entrada más relevantes para los aspectos visibles para el usuario de la interfaz de usuario del sistema se enumeran a continuación. Utilice estos componentes para personalizar la interfaz de usuario del sistema Android para capacidades específicas de automoción.

  • config_statusBarComponent
  • config_systemUIFactoryComponent

CarSystemUI es una extensión del paquete System UI, lo que significa que el paquete CarSystemUI puede utilizar y anular las clases y recursos del paquete System UI.

Personaliza la interfaz de usuario del sistema

Superposiciones

Si bien puede modificar el código fuente de Android para personalizar la interfaz de usuario del sistema, hacerlo hace que sea más difícil y complejo aplicar futuras actualizaciones de Android. En cambio, Android admite el uso de un directorio superpuesto, que le permite reemplazar archivos de recursos sin modificar el código fuente. En el sistema de compilación de Android, el sistema de superposición anula los archivos de forma controlada. Todos los archivos modificados se identifican claramente sin atravesar todo el árbol del código fuente de AOSP.

Los archivos de superposición deben colocarse en el directorio PRODUCT_PACKAGE_OVERLAYS y deben tener exactamente las mismas subcarpetas que la estructura raíz de AOSP original. Para Android 10 o superior, PRODUCT_PACKAGE_OVERLAYS está configurado en:

PRODUCT_PACKAGE_OVERLAYS := packages/services/Car/car_product/overlay

La UI del sistema automotriz utiliza recursos de la UI del sistema y los paquetes CarSystemUI, lo que significa que los recursos de cada ubicación se pueden anular con superposiciones para afectar la apariencia de la UI del sistema automotriz.

Para reemplazar un archivo, replique la estructura de directorios del archivo que se está reemplazando en el directorio /overlay que especificó y luego incluya el reemplazo en ese directorio. Por ejemplo, para reemplazar:

frameworks/base/packages/CarSystemUI/res/layout/super_status_bar.xml

Agregue el archivo super_status_bar.xml de reemplazo ubicado en:

packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/

Para reemplazar frameworks/base/packages/SystemUI/res/values/config.xml (en System UI, no en CarSystemUI), agregue el archivo config.xml de reemplazo a:

packages/services/Car/car_product/overlay/frameworks/base/packages/SystemUI/res/layout/

o

packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/

A continuación se proporcionan descripciones de los dos puntos de entrada de personalización principales.

La interfaz de usuario del sistema automotriz puede tener tres barras de navegación a la izquierda, abajo y a la derecha de la pantalla. La visibilidad de cada barra del sistema se alterna con las siguientes configuraciones:

  • config_enableLeftSystemBar
  • config_enableBottomSystemBar
  • config_enableRightSystemBar

Cada barra tiene un estado aprovisionado y no aprovisionado, que se puede personalizar superponiendo los respectivos archivos de diseño:

  • car_left_system_bar.xml
  • car_left_system_bar_unprovisioned.xml
  • car_system_bar.xml (diseño de la barra de navegación inferior)
  • car_system_bar_unprovisioned.xml
  • car_right_system_bar.xml
  • car_right_system_bar_unprovisioned.xml

Estos diseños deben contener com.android.systemui.car.systembar.CarSystemBarView en el nivel superior, que puede incluir cualquier otra vista necesaria. Los botones dentro de las barras de navegación se pueden incluir usando com.android.systemui.car.systembar.CarSystemBarButton .

Estas vistas están infladas en CarSystemBar#createSystemBar , si el dispositivo está aprovisionado correctamente para un usuario determinado.

Barra de estado

Considere la barra de estado como una barra de navegación con funcionalidad adicional. A diferencia de la barra de navegación, la barra de estado no tiene una bandera para desactivarla. Puedes modificar la barra de estado con:

  • car_top_navigation_bar.xml
  • car_top_navigation_bar_unprovisioned.xml

Estos diseños deben contener com.android.systemui.statusbar.car.CarNavigationBarView en el nivel superior. La barra de estado contiene iconos de estado. Para cambiar el tamaño de un icono, escale el icono uniformemente con un factor de escala en lugar de especificar un tamaño específico. Por ejemplo, en un archivo de superposición /overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml , agregue las siguientes dimensiones para duplicar el tamaño de los iconos:

<resources>
    <!-- The amount by which to scale up the status bar icons.-->
    <item name="status_bar_icon_scale_factor" format="float" type="dimen">2</item>
</resources>

La barra de estado reside en una capa de ventana especial que también incluye el panel de notificaciones, el conmutador de usuario, las notificaciones automáticas (HUN) y el bloqueo de teclas. Los distintos diseños para estos se incluyen en super_status_bar.xml .

Cambios en el código fuente de la interfaz de usuario del sistema

Es posible que las superposiciones no proporcionen la flexibilidad necesaria para personalizar suficientemente el comportamiento de la interfaz de usuario del sistema.

Alerta. Los cambios realizados en el código fuente de Android son difíciles de actualizar en versiones posteriores de Android. Le recomendamos encarecidamente que amplíe el código de la interfaz de usuario del sistema automotriz en lugar de modificarlo directamente. De esta manera, el código fuente de la interfaz de usuario del sistema automotriz subyacente se puede actualizar con conflictos de fusión mínimos porque todas las personalizaciones se implementan a través de superficies API conocidas.

La mayoría de los aspectos de la interfaz de usuario del sistema se pueden personalizar a través de estos dos puntos de entrada:

  • config_statusBarComponent
  • config_systemUIFactoryComponent

Por ejemplo, si crea una clase llamada com.android.systemui.statusbar.car.custom.CustomCarStatusBar , que extiende CarStatusBar , actualice config_statusBarComponent para que apunte a este nuevo componente. Ampliar esta clase permite la personalización de la mayoría de los elementos relacionados con la barra del sistema y la lógica de notificaciones.

Asimismo, puedes crear CustomCarSystemUIFactory y colocarlo en config_systemUIFactoryComponent . Utilice esta clase para actualizar la funcionalidad de VolumeUI y la pantalla de bloqueo.

Personaliza el cambio y desbloqueo de usuarios

El siguiente material describe cómo personalizar la experiencia de cambio de usuario.

Término Descripción
teclado Cuadro de diálogo de pantalla completa para evitar la interacción accidental con la aplicación de primer plano. Protege la privacidad de cada usuario cuando se configuran varios usuarios.
Cargando diálogo Pantalla de carga que se muestra al cambiar entre usuarios.
Pantalla de bloqueo, gorila Pantalla que requiere que una persona ingrese un PIN, patrón o contraseña.
Usuario Usuario de Android.
Selector de usuario Pantalla de selección de usuario que se muestra cuando se inicia un dispositivo.
Cambiador de usuario El conmutador de usuario se muestra al cambiar de pantalla desde QuickSettings.

Personalizar el cambio de usuario

Keyguard y portero

En el sistema operativo Android Automotive, la pantalla Keyguard con un selector de usuario se muestra solo cuando un usuario hace clic en el botón Cancelar en la pantalla de bloqueo. La pantalla Keyguard se muestra a continuación.

Pantalla de teclado

Figura 1. Pantalla de protección de teclado

Se muestra una pantalla de bloqueo con un rebote cuando el usuario ha seleccionado un tipo de privacidad para desbloquear el dispositivo, como se muestra a continuación.

Bloquear pantalla

Figura 2. Pantalla de bloqueo.

Cuando el bloqueo está configurado para activar o desactivar manualmente el encendido, utilice las siguientes instrucciones:

adb shell input keyevent 26

Selector de usuario

La pantalla de selección de usuario se muestra cuando se reinicia un dispositivo integrado en la barra de estado de la interfaz de usuario del sistema del automóvil y en Maps. Para obtener más información, consulte FullscreenUserSwitcher .

Cargando pantalla

Figura 3. Pantalla de selección de usuarios

El diseño de esta pantalla se puede personalizar en car_fullscreen_user_switcher.xml .

Cargando pantalla

La pantalla de carga se muestra cada vez que se cambia un usuario, independientemente del punto de entrada. Por ejemplo, a través del selector de usuarios o la pantalla de Configuración. La pantalla de carga es parte integral de la interfaz de usuario del sistema y se asigna a la clase pública titulada CarUserSwitchingDialog . Consulte la Figura 3 anterior para ver un ejemplo.

El tema se puede personalizar con Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog .

Para configurar el usuario de Android, el flujo inicial del asistente de configuración permite al conductor configurar un nombre de usuario por sí mismo. Si el conductor luego asocia al usuario de Android con una cuenta de Google, el nombre de usuario se selecciona de esa cuenta. Sin embargo, si el conductor especifica un nombre, por ejemplo DriverB, y luego asocia ese nombre de usuario a su cuenta de Google con el nombre de Maddy, el nombre asignado originalmente (DriverB) no se cambia porque ese nombre se configuró explícitamente. El conductor puede cambiar el nombre únicamente en el menú Configuración.

El diseño se puede personalizar en car_user_switching_dialog.xml .

Los OEM pueden ocultar el estado y la barra de navegación utilizando el tema denominado NoActionBar.Fullscreen . (Esta es la interfaz de usuario del sistema original, actualizada para la interfaz de usuario de referencia del automóvil). Para obtener más información, consulte Personalización .

Si bien los OEM pueden proporcionar puntos de entrada a la interfaz de usuario para cambiar de usuario, a veces los resultados pueden ser indeseables. Si esto ocurriera:

  1. El OEM crea y muestra la pantalla de carga personalizada (o cuadro de diálogo).
    • Específicamente para la UX, el OEM inicia la pantalla de carga personalizada cuando un usuario selecciona el medio para cambiar, que se puede ocultar cuando se completa el cambio de usuario.
    • El OEM debe establecer la ventana de prioridad según sus preferencias. Por ejemplo, un tipo de ventana de mayor prioridad. La prioridad de prioridad no puede exceder la del Keyguard.
  2. El OEM establece config_customUserSwitchUi=true en el marco principal config.xml como se describe en config_customuserswitchui . Como resultado, el marco no muestra CarUserSwitchingDialog .

Personaliza la pantalla de bloqueo

La pantalla de bloqueo es una parte integral de la interfaz de usuario del sistema, que el OEM puede personalizar. Para personalizar el flujo, comience con frameworks/base/packages/CarSystemUI/ .

Personalizar la configuración del usuario nuevo

El asistente de configuración realiza la configuración del usuario por primera vez. Esto también se puede personalizar. Puede utilizar las API de UserManager para crear un usuario. En algunos casos, esto se puede implementar en segundo plano, agilizando así el proceso del Asistente de configuración.