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 relacionados con los servicios del marco. La interfaz de usuario del sistema se refiere a cualquier elemento que se muestra en la pantalla 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 SystemUI), 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
Interfaz de usuario de la 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 colocar a la izquierda, en la parte inferior o a la derecha de la pantalla y que puede incluir botones de faceta 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 conexión Bluetooth, Wi-Fi y Hotspot/móvil.
  • Panel de notificaciones desplegable. Por ejemplo, deslizar hacia abajo desde la parte superior de la pantalla.
  • Heads up notificaciones (HUN).
Interfaz de usuario del sistema Hace referencia a cualquier elemento que se muestra en la 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.
Interfaz de usuario 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 a través de 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 SystemUI, lo que significa que el paquete CarSystemUI puede usar y anular las clases y los recursos del paquete SystemUI.

Personalización de 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 su lugar, Android admite el uso de un directorio superpuesto, lo 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 original de AOSP. Para Android 10 o superior, PRODUCT_PACKAGE_OVERLAYS se establece en:

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

La interfaz de usuario del sistema automotriz usa recursos de SystemUI 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 interfaz de usuario 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 SystemUI, 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 archivos de diseño respectivos:

  • 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 mediante com.android.systemui.car.systembar.CarSystemBarButton .

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

Barra de estado

Considere la barra de estado como una barra de navegación con funciones adicionales. A diferencia de la barra de navegación, la barra de estado no tiene una bandera para desactivarla. Puede 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 í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 ventana especial que también incluye el panel de notificaciones, el conmutador de usuario, las notificaciones de alerta (HUN) y el protector de teclado. Los diversos 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 serán difíciles de actualizar en versiones posteriores de Android. Se recomienda enfáticamente 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 combinación mínimos, ya que todas las personalizaciones se implementan a través de superficies de 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 denominada com.android.systemui.statusbar.car.custom.CustomCarStatusBar , que amplía CarStatusBar , actualice config_statusBarComponent para que apunte a este nuevo componente. La extensión de esta clase permite la personalización de la mayoría de los elementos que pertenecen a la barra del sistema y la lógica de notificaciones.

Del mismo modo, puede crear CustomCarSystemUIFactory y colocarlo en config_systemUIFactoryComponent . Use 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
Protector de teclado Diálogo de pantalla completa para evitar la interacción accidental con la aplicación en primer plano. Protege la privacidad de cada usuario cuando se configuran varios usuarios.
Cuadro de diálogo de carga Se muestra la pantalla de carga al cambiar de usuario.
Pantalla de bloqueo, gorila Pantalla que requiere que una persona ingrese un PIN, patrón o contraseña.
Usuario Usuario de Android.
Selector de usuarios Pantalla de selección de usuario que se muestra cuando se inicia un dispositivo.
Conmutador de usuario El conmutador de usuario se muestra al cambiar de pantalla desde QuickSettings.

Personalizar el cambio de usuario

Keyguard y gorila

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 bloqueo de teclas

Figura 1. Pantalla de bloqueo de teclas

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

Bloquear pantalla

Figura 2. Pantalla de bloqueo.

Cuando la cerradura está configurada para activar o desactivar manualmente la alimentación, utilice las siguientes instrucciones:

adb shell input keyevent 26

Selector de usuarios

La pantalla Selector 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 Maps. Para obtener más información, consulte FullscreenUserSwitcher .

Cargando pantalla

Figura 3. Pantalla de carga

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 Configuración. La pantalla de carga es parte integral de la interfaz de usuario del sistema del marco 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 para sí mismo. Si el controlador luego asocia el 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 cambia porque ese nombre se estableció explícitamente. El conductor puede cambiar el nombre solo en el menú Configuración.

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

Los OEM pueden ocultar la barra de estado y navegación mediante 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 de la interfaz de usuario para cambiar de usuario, los resultados a veces pueden ser indeseables. Si esto ocurre:

  1. El OEM crea y muestra la pantalla (o diálogo) de carga personalizada.
    • Específico para el UX, el OEM inicia la pantalla de carga personalizada cuando un usuario selecciona los medios 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 por primera vez

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, lo que agiliza el proceso del asistente de configuración.