Cómo configurar un evento

Un evento activa cambios de estado e inicia acciones. Los eventos actúan como indicadores que se envían desde la IU del sistema o desde fuera del proceso con un intent. Los eventos informan a la IU escalable sobre sucesos que requieren una respuesta.

Un evento de IU escalable es un indicador del sistema, activado por cambios de hardware o software, que puede alterar el estado de un panel. Estos eventos notifican al framework sobre las ocurrencias que requieren una respuesta de la IU. Para obtener un control más preciso sobre los estados del panel, también puedes definir eventos personalizados, además de los eventos del sistema integrados.

Estructura de un evento

Un identificador único (ID) obligatorio identifica un evento. Este ID categoriza el tipo de ocurrencia, como _System_AppOpenEvent o _System_PanelEmptyEvent.

Además de este ID, un evento puede incluir de forma opcional tokens y pares clave-valor para proporcionar contexto y detalles sobre el evento. Estos tokens permiten un filtrado más detallado de los eventos, lo que permite que las transiciones o las acciones se activen solo en condiciones específicas.

Los tokens se pasan al evento como una lista de pares clave-valor separados por un punto y coma (;). A continuación, se incluye la lista de claves admitidas por el sistema:

Clave Descripción
panelId Identifica un panel de IU específico asociado con el evento.
component Especifica el nombre del componente, como una actividad vinculada al evento.
package Indica el nombre del paquete relacionado con el evento.
panelToVariantId Especifica la variante objetivo de un panel en contextos específicos. Usa este atributo para aplicar animaciones en cascada escuchando una transición de panel. Por ejemplo, activar la transición del panel B al estado cerrado cuando el panel A transiciona a un estado abierto.

Por ejemplo:

"component=com.android.app;panelId=panel1"

Lógica de coincidencia de eventos

Cuando se envía un evento, se debe comparar con los criterios definidos para activar una transición o una acción. El proceso de correlación se realiza en dos etapas:

  • Coincidencia estricta de id del evento: El id del evento enviado debe coincidir exactamente con el id especificado en el filtro de eventos de transición o acción. Si los IDs no coinciden, se considera que el evento no es una coincidencia.

  • Coincidencia parcial de tokens de eventos: Cuando coinciden los IDs de eventos, el sistema usa la coincidencia parcial para evaluar los tokens de un evento en comparación con los tokens definidos en el filtro.

    Para que se produzca una coincidencia, todas las propiedades del evento (tokens) especificadas en la definición del evento de la transición deben coincidir estrictamente con las propiedades correspondientes del evento enviado.

    Dicho esto, el evento enviado puede contener tokens adicionales que no se definen de forma explícita en el filtro. Los tokens adicionales no impiden una coincidencia. En cambio, se ignoran en la evaluación de la coincidencia.

    Por el contrario, si el filtro especifica un token que no está presente en el evento enviado o si el valor de un token coincidente no se alinea, no se considera una coincidencia.

Por ejemplo, considera una transición definida para activarse cuando id="app_open" ocurre en panelId="panel1" con component="com.android.myapp.Activity".

Si un evento enviado tiene id="app_open", panelId="panel1" y component="com.android.myapp.Activity", se produce una coincidencia. Se cumplen todos los criterios de filtro y el valor más específico para Activity value in the dispatched event is considered a match forcom.android.myapp`.

Sin embargo, la coincidencia falla si el evento se envía cuando id="app_open", panelId="panel1" y component="com.android.yourapp.Activity". Aunque id y panelId coinciden, el component no es igual a component en la transición (com.android.myapp) y no coincide con com.android.yourapp en el evento enviado.

Activador de transición

Si bien una transición puede ser una coincidencia, esto no significa que se active. Solo se puede activar una transición para cada evento. La IU escalable tiene como objetivo activar solo la coincidencia más cercana.

Por ejemplo, cuando dos transiciones (una con un nombre de componente y otra sin él -m) coinciden, solo se activa la transición con el nombre de componente.

Envío y administración de eventos

Los eventos son fundamentales para el comportamiento dinámico de la IU adaptable. Los eventos se pueden enviar desde la IU del sistema o desde procesos externos con una intención.

Eventos del sistema

El framework define varios eventos del sistema que facilitan estas acciones:

Atributo Descripción
_System_OnHomeEvent

(SYSTEM_HOME_EVENT_ID)
Indica que el sistema recibió una solicitud para mostrar la pantalla Principal. En AAOS, Home puede ser una configuración flexible de ventanas, como una combinación de widgets o incluso un mapa. Este evento es fundamental para las transiciones o las acciones que dependen de que el usuario vea la interfaz principal de la página principal.
_System_TaskOpenEvent

(SYSTEM_TASK_OPEN_EVENT_ID)

Se envía cuando se abre una tarea o una app. Este evento general puede activar acciones o transiciones según el inicio de una app.

Este evento contiene tokens como panelId y component.

_System_TaskCloseEvent

(SYSTEM_TASK_CLOSE_EVENT_ID)
Indica que se cerró una tarea o una app, y funciona como contrapartida de _System_TaskOpenEvent. Esto permite que el sistema reaccione cuando se descartan apps. Esto puede activar transiciones para que un panel vuelva a un estado predeterminado o para iniciar otras acciones de limpieza.
_System_TaskPanelEmptyEvent

(SYSTEM_TASK_PANEL_EMPTY_EVENT_ID)

Se envía cuando un panel específico queda vacío y se incluye panelId como token para que los activadores se filtren según el panel que esté vacío.

Este evento es importante para una recuperación sólida de errores y para reiniciar apps cuando el contenido asociado falla o se cierra de forma inesperada, lo que evita la visualización de paneles de IU vacíos.

Por ejemplo, si falla una app de ControlBar, puedes configurar una acción para detectar este evento en su panel y reiniciar automáticamente la app de ControlBar.

.
_System_EnterSuwEvent

(SYSTEM_ENTER_SUW_EVENT_ID)
Indica que el sistema está ingresando al asistente de configuración (SUW). Este evento indica que el sistema está listo y se puede configurar para iniciar apps o mostrar paneles designados una vez que se inicializa el sistema. Ingresar a un estado del sistema tan crítico requiere un evento dedicado para activar los ajustes o las acciones de la IU adecuados.
_System_ExitSuwEvent

(SYSTEM_EXIT_SUW_EVENT_ID)
Indica que el sistema sale del asistente de configuración (SUW). Al igual que _System_EnterSuwEvent, este evento permite que el sistema responda a la finalización del proceso de configuración iniciando apps predeterminadas o realizando la transición a una IU estándar.
_System_OnAnimationEndEvent

(SYSTEM_ON_ANIMATION_END_EVENT_ID)
Se activa cuando se completa una animación en la IU. Puedes usar este evento para activar acciones posteriores o cambios de estado que dependen de la finalización de una transición visual.

Este evento contiene un token para variantId que indica con qué variante terminó el panel al final de la animación.