Configurer un événement

Un événement déclenche des changements d'état et lance des actions. Les événements agissent comme des signaux, envoyés depuis l'UI système ou depuis l'extérieur du processus à l'aide d'un intent. Les événements informent l'UI évolutive des occurrences qui nécessitent une réponse.

Un événement d'UI évolutive est un signal système, déclenché par des modifications matérielles ou logicielles, qui peut modifier l'état d'un panneau. Ces événements informent le framework des occurrences qui nécessitent une réponse de l'UI. Pour un contrôle plus précis des états des panneaux, vous pouvez également définir des événements personnalisés en plus des événements système intégrés.

Structure d'un événement

Un identifiant unique (ID) obligatoire permet d'identifier un événement. Cet ID catégorise le type d'occurrence, comme _System_AppOpenEvent ou _System_PanelEmptyEvent.

En plus de cet ID, un événement peut éventuellement comporter des jetons (paires clé-valeur) pour fournir du contexte et des détails sur l'événement. Ces jetons permettent de filtrer les événements de manière plus précise, ce qui permet de déclencher des transitions ou des actions uniquement dans des conditions spécifiques.

Les jetons sont transmis à l'événement sous la forme d'une liste de paires clé-valeur séparées par un point-virgule (;). Voici la liste des clés compatibles avec le système :

Clé Description
panelId Identifie un panneau d'interface utilisateur spécifique associé à l'événement.
component Spécifie le nom du composant, tel qu'une activité associée à l'événement.
package Indique le nom du package associé à l'événement.
panelToVariantId Spécifie la variante cible d'un panneau dans des contextes spécifiques. Utilisez cet attribut pour mettre en cascade les animations en écoutant une transition de panneau. Par exemple, déclencher la transition du panneau B vers l'état fermé lorsque le panneau A passe à l'état ouvert.

Exemple :

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

Logique de mise en correspondance des événements

Lorsqu'un événement est déclenché, il doit être mis en correspondance avec des critères définis pour déclencher une transition ou une action. Le processus de mise en correspondance se déroule en deux étapes :

  • Correspondance stricte des id d'événement : le id de l'événement distribué doit correspondre exactement au id spécifié dans le filtre d'événement de transition ou d'action. Si les ID ne correspondent pas, l'événement est considéré comme ne correspondant pas.

  • Correspondance partielle des jetons d'événement : lorsque les ID d'événement correspondent, le système utilise la correspondance partielle pour évaluer les jetons d'un événement par rapport aux jetons définis dans le filtre.

    Pour qu'une correspondance se produise, toutes les propriétés d'événement (jetons) spécifiées dans la définition d'événement de la transition doivent correspondre exactement aux propriétés correspondantes de l'événement distribué.

    Cela dit, l'événement distribué peut contenir des jetons supplémentaires qui ne sont pas explicitement définis dans le filtre. Les jetons supplémentaires n'empêchent pas une correspondance. Au lieu de cela, ils sont ignorés lors de l'évaluation des correspondances.

    À l'inverse, si le filtre spécifie un jeton qui n'est pas présent dans l'événement distribué ou si la valeur d'un jeton correspondant ne correspond pas, il n'est pas considéré comme une correspondance.

Prenons l'exemple d'une transition définie pour se déclencher lorsque id="app_open" a lieu sur panelId="panel1" avec component="com.android.myapp.Activity".

Si un événement distribué comporte id="app_open", panelId="panel1" et component="com.android.myapp.Activity", une correspondance est établie. Tous les critères de filtre sont remplis et la valeur la plus spécifique pour Activity value in the dispatched event is considered a match forcom.android.myapp`.

Toutefois, la correspondance échoue si l'événement distribué est id="app_open", panelId="panel1" et component="com.android.yourapp.Activity". Bien que id et panelId correspondent, le component non égal à component dans la transition — com.android.myapp — ne correspond pas à com.android.yourapp dans l'événement distribué.

Déclencheur de transition

Une transition peut correspondre à un événement, mais cela ne signifie pas qu'elle est déclenchée. Une seule transition peut être déclenchée pour chaque événement. L'UI évolutive vise à ne déclencher que la correspondance la plus proche.

Par exemple, lorsque deux transitions (l'une avec un nom de composant et l'autre sans nom de composant -m) correspondent, seule la transition avec le nom de composant est déclenchée.

Envoi et gestion des événements

Les événements sont au cœur du comportement dynamique de l'UI évolutive. Les événements peuvent être distribués à partir de l'UI système ou de processus externes avec une intention.

Événements système

Le framework définit plusieurs événements système qui facilitent ces actions :

Attribut Description
_System_OnHomeEvent

(SYSTEM_HOME_EVENT_ID)
Indique que le système a reçu une demande d'affichage de l'écran Accueil. Dans AAOS, Home peut être une configuration flexible de fenêtres, comme une combinaison de widgets, ou même une carte. Cet événement est essentiel pour les transitions ou les actions qui dépendent de l'affichage de l'interface principale de la maison par l'utilisateur.
_System_TaskOpenEvent

(SYSTEM_TASK_OPEN_EVENT_ID)

Est distribué lorsqu'une tâche ou une application est ouverte. Cet événement général peut déclencher des actions ou des transitions en fonction du lancement d'une application.

Cet événement contient des jetons tels que panelId et component.

_System_TaskCloseEvent

(SYSTEM_TASK_CLOSE_EVENT_ID)
Signale qu'une tâche ou une application a été fermée et sert de contrepartie à _System_TaskOpenEvent. Cela permet au système de réagir lorsque des applications sont fermées. Cela peut déclencher des transitions pour ramener un panneau à un état par défaut ou pour lancer d'autres actions de nettoyage.
_System_TaskPanelEmptyEvent

(SYSTEM_TASK_PANEL_EMPTY_EVENT_ID)

Déclenché lorsqu'un panneau spécifique devient vide et inclut panelId comme jeton afin que les déclencheurs soient filtrés en fonction du panneau vide.

Cet événement est important pour une récupération d'erreur robuste et pour relancer les applications lorsque le contenu associé plante ou se termine de manière inattendue afin d'éviter l'affichage de panneaux d'interface utilisateur vides.

Par exemple, si une application ControlBar plante, vous pouvez configurer une action pour détecter cet événement sur son panneau et relancer automatiquement l'application ControlBar.

.
_System_EnterSuwEvent

(SYSTEM_ENTER_SUW_EVENT_ID)
Indique que le système accède à l'assistant de configuration. Cet événement signale que le système est prêt et peut être configuré pour lancer des applications ou afficher des panneaux désignés une fois le système initialisé. L'entrée dans un tel état critique du système nécessite un événement dédié pour déclencher les ajustements ou actions d'UI appropriés.
_System_ExitSuwEvent

(SYSTEM_EXIT_SUW_EVENT_ID)
Indique que le système quitte l'assistant de configuration. Semblable à _System_EnterSuwEvent, cet événement permet au système de répondre à la fin du processus de configuration en lançant des applications par défaut ou en passant à une interface utilisateur standard.
_System_OnAnimationEndEvent

(SYSTEM_ON_ANIMATION_END_EVENT_ID)
Déclenchement lorsqu'une animation est terminée dans l'UI. Vous pouvez utiliser cet événement pour déclencher des actions ou des changements d'état ultérieurs qui dépendent de la fin d'une transition visuelle.

Cet événement contient un jeton pour variantId afin d'indiquer la variante à laquelle le panneau a abouti à la fin de l'animation.