Cómo configurar un evento

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

Un evento de la IU adaptable es una señal del sistema, activada por cambios de hardware o software, que puede alterar el estado de un panel. Estos eventos notifican al framework sobre los sucesos 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 clasifica el tipo de suceso, como _System_TaskOpenEvent o _System_PanelEmptyEvent.

Además de este ID, un evento puede incluir tokens de forma opcional, 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 (;). Esta es la lista de claves compatibles con 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 de destino de un panel en contextos específicos. Usa este atributo para 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 pasa a un estado abierto.

Por ejemplo:

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

Lógica de coincidencia de eventos

Cuando se envía un evento, debe coincidir con los criterios definidos para activar una transición o una acción. El proceso de coincidencia 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 los IDs de eventos coinciden, el sistema usa la coincidencia parcial para evaluar los tokens de un evento con los tokens definidos en el filtro.

    Para que se produzca una coincidencia, todas las propiedades del evento (tokens) especificadas en la definición de evento de la transición deben coincidir estrictamente con las propiedades correspondientes en el 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 coincidencias.

    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" se produce 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 realiza una coincidencia. Se cumplen todos los criterios de filtro y el valor más específico para el Activity value in the dispatched event is considered a match forcom.android.myapp`.

Sin embargo, la coincidencia falla si el evento enviado es 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) 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 adaptable tiene como objetivo activar solo la coincidencia más cercana.

Por ejemplo, cuando dos transiciones (una con un nombre de componente y otra sin un nombre de componente -m) son una coincidencia, solo se activa la transición con el nombre del 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 un intent.

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, la pantalla principal 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 acciones que dependen de que el usuario vea la interfaz principal de la pantalla 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 sirve como contraparte de _System_TaskOpenEvent. Esto permite que el sistema reaccione a las apps que se descartan. Esto puede activar transiciones para devolver un panel a un estado predeterminado o iniciar otras acciones de limpieza.
_System_TaskPanelEmptyEvent

(SYSTEM_TASK_PANEL_EMPTY_EVENT_ID)

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

Este evento es importante para la recuperación sólida de errores y para reiniciar apps cuando el contenido asociado falla o finaliza de forma inesperada para evitar la visualización de paneles de IU vacíos.

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

.
_System_EnterSuwEvent

(SYSTEM_ENTER_SUW_EVENT_ID)
Indica que el sistema ingresa 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. Para ingresar a un estado del sistema tan crítico, se requiere un evento dedicado para activar los ajustes o las acciones de 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.