Configurare un evento

Un evento attiva i cambiamenti di stato e avvia le azioni. Gli eventi fungono da segnali, inviati dalla UI di sistema o dall'esterno del processo utilizzando un intent. Gli eventi informano l'interfaccia utente scalabile di occorrenze che richiedono una risposta.

Un evento dell'interfaccia utente scalabile è un segnale di sistema, attivato da modifiche hardware o software, che può alterare lo stato di un pannello. Questi eventi notificano al framework gli eventi che richiedono una risposta dell'interfaccia utente. Per un controllo più preciso degli stati del pannello, puoi anche definire eventi personalizzati, oltre agli eventi di sistema integrati.

Struttura di un evento

Un identificatore univoco (ID) obbligatorio identifica un evento. Questo ID classifica il tipo di occorrenza, ad esempio _System_AppOpenEvent o _System_PanelEmptyEvent.

Oltre a questo ID, un evento può facoltativamente contenere token, coppie chiave-valore per fornire contesto e dettagli sull'evento. Questi token consentono un filtraggio più granulare degli eventi, attivando transizioni o azioni solo in condizioni specifiche.

I token vengono passati all'evento come elenco di coppie chiave-valore separate da un punto e virgola (;). Ecco l'elenco delle chiavi supportate dal sistema:

Chiave Descrizione
panelId Identifica un pannello dell'interfaccia utente specifico associato all'evento.
component Specifica il nome del componente, ad esempio un'attività collegata all'evento.
package Indica il nome del pacchetto correlato all'evento.
panelToVariantId Specifica la variante di destinazione di un riquadro in contesti specifici. Utilizza questo attributo per creare animazioni a cascata ascoltando una transizione del pannello. Ad esempio, attivare la transizione del riquadro B allo stato chiuso quando il riquadro A passa allo stato aperto.

Ad esempio:

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

Logica di corrispondenza degli eventi

Quando viene inviato un evento, deve essere confrontato con i criteri definiti per attivare una transizione o un'azione. La procedura di corrispondenza si svolge in due fasi:

  • Corrispondenza esatta dell'evento id: il id dell'evento inviato deve corrispondere esattamente al id specificato nel filtro dell'evento di transizione o azione. Se gli ID non corrispondono, l'evento viene considerato non corrispondente.

  • Corrispondenza parziale dei token evento: quando gli ID evento corrispondono, il sistema utilizza la corrispondenza parziale per valutare i token di un evento rispetto ai token definiti nel filtro.

    Affinché si verifichi una corrispondenza, tutte le proprietà (token) dell'evento specificate nella definizione dell'evento della transizione devono corrispondere esattamente alle proprietà corrispondenti nell'evento inviato.

    Detto questo, l'evento inviato può contenere token aggiuntivi non definiti in modo esplicito nel filtro. I token aggiuntivi non impediscono una corrispondenza. ma vengono ignorati nella valutazione della corrispondenza.

    Al contrario, se il filtro specifica un token non presente nell'evento inviato o se il valore di un token corrispondente non è allineato, non viene considerato una corrispondenza.

Ad esempio, considera una transizione definita per essere attivata quando id="app_open" si verifica su panelId="panel1" con component="com.android.myapp.Activity".

Se un evento inviato ha id="app_open", panelId="panel1" e component="com.android.myapp.Activity", viene creata una corrispondenza. Tutti i criteri di filtro vengono soddisfatti e il valore più specifico per Activity value in the dispatched event is considered a match forcom.android.myapp`.

Tuttavia, la corrispondenza non riesce se l'evento inviato quando id="app_open", panelId="panel1" e component="com.android.yourapp.Activity". Anche se id e panelId corrispondono, component non è uguale a component nella transizione com.android.myapp non corrisponde a com.android.yourapp nell'evento inviato.

Trigger di transizione

Anche se una transizione può essere una corrispondenza, non significa che venga attivata. Per ogni evento può essere attivata una sola transizione. L'interfaccia utente scalabile ha lo scopo di attivare solo la corrispondenza più vicina.

Ad esempio, quando due transizioni, una con un nome di componente e una senza un nome di componente -m, corrispondono, viene attivata solo la transizione con il nome del componente.

Invio e gestione degli eventi

Gli eventi sono fondamentali per il comportamento dinamico dell'interfaccia utente scalabile. Gli eventi possono essere inviati dalla UI di sistema o da processi esterni con un intent.

Eventi di sistema

Il framework definisce diversi eventi di sistema che facilitano queste azioni:

Attributo Descrizione
_System_OnHomeEvent

(SYSTEM_HOME_EVENT_ID)
Indica che il sistema ha ricevuto una richiesta di visualizzazione della schermata Home. In AAOS, Home può essere una configurazione flessibile di finestre, ad esempio una combinazione di widget o persino una mappa. Questo evento è fondamentale per le transizioni o le azioni che dipendono dalla visualizzazione dell'interfaccia principale della casa da parte dell'utente.
_System_TaskOpenEvent

(SYSTEM_TASK_OPEN_EVENT_ID)

Viene inviato quando viene aperta un'attività o un'app. Questo evento generale può attivare azioni o transizioni in base all'avvio di un'app.

Questo evento contiene token come panelId e component.

_System_TaskCloseEvent

(SYSTEM_TASK_CLOSE_EVENT_ID)
Indica che un'attività o un'app è stata chiusa e funge da controparte di _System_TaskOpenEvent. In questo modo, il sistema può reagire alla chiusura delle app. Ciò può attivare transizioni per riportare un pannello a uno stato predefinito o per avviare altre azioni di pulizia.
_System_TaskPanelEmptyEvent

(SYSTEM_TASK_PANEL_EMPTY_EVENT_ID)

Viene inviato quando un pannello specifico diventa vuoto e include panelId come token in modo che i trigger vengano filtrati in base al pannello vuoto.

Questo evento è importante per il ripristino robusto degli errori e per riavviare le app quando i contenuti associati si arrestano in modo anomalo o terminano in modo imprevisto per evitare la visualizzazione di pannelli dell'interfaccia utente vuoti.

Ad esempio, se un'app ControlBar va in crash, puoi configurare un'azione per rilevare questo evento nel relativo pannello e riavviare automaticamente l'app ControlBar.

.
_System_EnterSuwEvent

(SYSTEM_ENTER_SUW_EVENT_ID)
Indica che il sistema sta avviando la configurazione guidata. Questo evento indica che il sistema è pronto e può essere configurato per avviare app o visualizzare i pannelli designati una volta inizializzato il sistema. L'inserimento di uno stato critico del sistema richiede un evento dedicato per attivare le azioni o le modifiche dell'interfaccia utente appropriate.
_System_ExitSuwEvent

(SYSTEM_EXIT_SUW_EVENT_ID)
Indica l'uscita del sistema dalla configurazione guidata. Simile a _System_EnterSuwEvent, questo evento consente al sistema di rispondere al completamento della procedura di configurazione avviando app predefinite o passando a un'interfaccia utente standard.
_System_OnAnimationEndEvent

(SYSTEM_ON_ANIMATION_END_EVENT_ID)
Attivato quando un'animazione viene completata nella UI. Puoi utilizzare questo evento per attivare azioni o modifiche dello stato successive che dipendono dal completamento di una transizione visiva.

Questo evento contiene un token per variantId per indicare la variante finale del pannello al termine dell'animazione.