Cómo implementar la IU del sistema

Android Automotive proporciona una nueva IU del sistema desarrollada específicamente para vehículos. La mayoría de los componentes de la IU del sistema están estrechamente acoplados con los servicios del framework. La IU del sistema hace referencia a cualquier elemento que se muestra en la pantalla y que no forma parte de una app. La IU del sistema Automotive (en el paquete de elementos CarSystemUI) es una extensión de la IU del sistema Android (en el paquete de IU del sistema), que se personalizó específicamente para vehículos.

¿Qué es la IU del sistema?

Entre los componentes específicos de la IU del sistema automotriz, se incluyen los siguientes:

Componente Descripción
IU de la pantalla de bloqueo Es la pantalla a través de la cual los usuarios se autentican en una cuenta de usuario específica.
Barra de navegación Es una barra del sistema que se puede colocar a la izquierda, en la parte inferior o a la derecha de la pantalla, y que puede incluir botones de facetas para navegar a diferentes apps, activar o desactivar el panel de notificaciones y proporcionar controles del vehículo (como el sistema de aire acondicionado). Esto difiere de la implementación de la IU del sistema Android, que proporciona los botones Atrás, Inicio y pila de apps.
Barra de estado Barra del sistema ubicada a lo largo de la pantalla que funciona como barra de navegación. La barra de estado también proporciona funcionalidad para admitir lo siguiente:
  • Íconos de conectividad. Incluye Bluetooth, Wi-Fi y conexión hotspot o móvil.
  • Panel de notificaciones desplegable. Por ejemplo, deslizar el dedo hacia abajo desde la parte superior de la pantalla.
  • Notificaciones de atención (HUN).
IU del sistema Se refiere a cualquier elemento que se muestra en la pantalla y que no forma parte de una app.
IU del selector de usuarios Pantalla a través de la cual un usuario puede seleccionar a otro usuario.
IU de volumen Es el diálogo que se muestra cuando el conductor usa botones de volumen físicos para cambiar el volumen de un dispositivo.

¿Cómo funciona la IU del sistema?

La IU del sistema es una app para Android que se ejecuta cuando se enciende un dispositivo. SystemServer inicia la app a través de la reflexión. A continuación, se enumeran los puntos de entrada más relevantes para los aspectos visibles para el usuario de la IU del sistema. Usa estos componentes para personalizar la IU del sistema Android para funciones específicas de Automotive.

  • config_statusBarComponent
  • config_systemUIFactoryComponent

CarSystemUI es una extensión del paquete de la IU del sistema, lo que significa que el paquete CarSystemUI puede usar y anular las clases y los recursos del paquete de la IU del sistema.

Cómo personalizar la IU del sistema

Superposiciones

Si bien puedes modificar el código fuente de Android para personalizar la IU del sistema, hacerlo dificulta y complica la aplicación de futuras actualizaciones de Android. En cambio, Android admite el uso de un directorio de superposición, que te 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 manera controlada. Todos los archivos modificados se identifican claramente sin recorrer 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 original de AOSP. Para Android 10 o versiones posteriores, PRODUCT_PACKAGE_OVERLAYS se establece en lo siguiente:

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

La IU del sistema Automotive usa recursos de la IU del sistema y los paquetes de CarSystemUI, lo que significa que los recursos de cada ubicación se pueden anular con superposiciones para afectar el aspecto de la IU del sistema Automotive.

Para reemplazar un archivo, replica la estructura de directorio del archivo que se reemplazará en el directorio /overlay que especificaste y, luego, incluye el reemplazo en ese directorio. Por ejemplo, para reemplazar lo siguiente:

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

Agrega 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 la IU del sistema, no en CarSystemUI), agrega el archivo config.xml de reemplazo a lo siguiente:

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 IU del sistema automotriz puede tener tres barras de navegación a la izquierda, en la parte inferior y a la derecha de la pantalla. La visibilidad de cada barra del sistema se activa 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 archivos de diseño correspondientes:

  • car_left_system_bar.xml
  • car_left_system_bar_unprovisioned.xml
  • car_system_bar.xml (diseño para 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 con com.android.systemui.car.systembar.CarSystemBarButton.

Estas vistas se aumentan en CarSystemBar#createSystemBar si el dispositivo se aprovisiona correctamente para un usuario determinado.

Barra de estado

Considera 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 marca para inhabilitarla. Puedes modificar la barra de estado con lo siguiente:

  • 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 íconos de estado. Para cambiar el tamaño de un ícono, escala el ícono de manera uniforme 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, agrega las siguientes dimensiones para duplicar el tamaño de los íconos:

<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 ventanas especial que también incluye el panel de notificaciones, el selector de usuarios, las notificaciones emergentes (HUN) y el protector de pantalla. Los diferentes diseños para estos se incluyen en super_status_bar.xml.

Cambios en el código fuente de la IU del sistema

Es posible que las superposiciones no proporcionen la flexibilidad necesaria para personalizar de forma suficiente el comportamiento de la IU del sistema.

Alerta. Los cambios realizados en el código fuente de Android son difíciles de actualizar en versiones posteriores de Android. Te recomendamos que extiendas el código de la IU del sistema automotriz en lugar de modificarlo directamente. De esta manera, el código fuente subyacente de la IU del sistema automotriz se puede actualizar con conflictos de combinación mínimos, ya que todas las personalizaciones se implementan a través de plataformas de API conocidas.

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

  • config_statusBarComponent
  • config_systemUIFactoryComponent

Por ejemplo, si creas una clase llamada com.android.systemui.statusbar.car.custom.CustomCarStatusBar, que extiende CarStatusBar, actualiza config_statusBarComponent para que apunte a este nuevo componente. La extensión de esta clase permite personalizar la mayoría de los elementos que pertenecen a la barra del sistema y a la lógica de las notificaciones.

Del mismo modo, puedes crear CustomCarSystemUIFactory y colocarlo en config_systemUIFactoryComponent. Usa esta clase para actualizar la funcionalidad de la IU de volumen y la pantalla de bloqueo.

Cómo personalizar el cambio de usuario y el desbloqueo

En el siguiente material, se describe cómo personalizar la experiencia de cambio de usuario.

Término Descripción
Bloqueo de teclado Diálogo de pantalla completa para evitar interacciones accidentales con la app en primer plano. Protege la privacidad de cada usuario cuando se configuran varios usuarios.
Diálogo de carga Pantalla de carga que se muestra cuando se cambia de usuario
Pantalla de bloqueo, bouncer Pantalla que requiere que una persona ingrese un PIN, un patrón o una contraseña.
Usuario Usuario de Android.
Selector de usuarios Pantalla del selector de usuarios que se muestra cuando se inicia un dispositivo.
Interruptor de usuario Se muestra el selector de usuarios cuando se cambia de pantalla desde Configuración rápida.

Cómo personalizar el cambio de usuario

Bloqueo de teclado y bouncer

En el SO Android Automotive, la pantalla del protector de pantalla con un selector de usuarios se muestra solo cuando un usuario hace clic en el botón Cancelar en la pantalla de bloqueo. A continuación, se muestra la pantalla del protector de pantalla.

Pantalla del bloqueo de teclado

Figura 1: Pantalla del bloqueo de teclado

Se muestra una pantalla de bloqueo con un protector cuando el usuario selecciona un tipo de privacidad con el que desbloquear el dispositivo, como se muestra a continuación.

Pantalla de bloqueo

Figura 2: Pantalla de bloqueo.

Cuando la cerradura esté configurada para activar o desactivar la alimentación de forma manual, sigue estas instrucciones:

adb shell input keyevent 26

Selector de usuarios

La pantalla del selector de usuarios se muestra cuando se reinicia un dispositivo integrado en la barra de estado de la IU del sistema del automóvil y Maps. Para obtener más información, consulta FullscreenUserSwitcher.

Pantalla de carga

Figura 3: Pantalla del selector de usuarios

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

Pantalla de carga

La pantalla de carga se muestra cada vez que se cambia de 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 IU del sistema del framework y se asigna a la clase pública titulada CarUserSwitchingDialog. Consulta 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 que el conductor configure un nombre de usuario. Si el conductor asocia al usuario de Android con una Cuenta de Google, se selecciona el nombre del usuario desde esa cuenta. Sin embargo, si el conductor especifica un nombre, por ejemplo, ConductorB, y, luego, asocia ese nombre de usuario a su Cuenta de Google con el nombre de Maddy, el nombre asignado originalmente (ConductorB) no cambia porque se configuró de forma explícita. El conductor solo puede cambiar el nombre en el menú Configuración.

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

Los OEMs pueden ocultar la barra de estado y navegación con el tema llamado NoActionBar.Fullscreen. (Esta es la IU del sistema original, actualizada para la IU de referencia del automóvil). Para obtener más información, consulta Personalización.

Si bien los OEMs pueden proporcionar puntos de entrada de la interfaz de usuario para cambiar de usuario, los resultados a veces pueden ser poco deseados. Si esto ocurre, haz lo siguiente:

  1. El OEM crea y muestra la pantalla de carga (o el diálogo) personalizada.
    • Específico de 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 prioridad más alta. La prioridad no puede superar la del bloqueo de teclas.
  2. El OEM establece config_customUserSwitchUi=true en el framework principal config.xml, como se describe en config_customuserswitchui. Como resultado, el framework no muestra CarUserSwitchingDialog.

Cómo personalizar la pantalla de bloqueo

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

Personaliza la configuración del usuario por primera vez

El asistente de configuración realiza la configuración del usuario por primera vez. Esto también se puede personalizar. Puedes usar las APIs de UserManager para crear un usuario. En algunos casos, esto se puede implementar en segundo plano, lo que optimiza el proceso del asistente de configuración.