Configurar um evento

Um evento aciona mudanças de estado e inicia ações. Os eventos atuam como indicadores, enviados da interface do sistema ou de fora do processo usando uma intent. Os eventos informam à interface escalonável sobre ocorrências que exigem uma resposta.

Um evento de interface escalonável é um sinal do sistema, acionado por mudanças de hardware ou software que podem alterar o estado de um painel. Esses eventos notificam o framework sobre ocorrências que exigem uma resposta da interface. Para um controle mais preciso sobre os estados do painel, também é possível definir eventos personalizados, além dos eventos do sistema integrados.

Estrutura de um evento

Um identificador exclusivo (ID) obrigatório identifica um evento. Esse ID categoriza o tipo de ocorrência, como _System_AppOpenEvent ou _System_PanelEmptyEvent.

Além desse ID, um evento pode opcionalmente incluir tokens, pares de chave-valor para fornecer contexto e detalhes sobre o evento. Esses tokens permitem uma filtragem mais granular de eventos, possibilitando que transições ou ações sejam acionadas apenas em condições específicas.

Os tokens são transmitidos ao evento como uma lista de pares de chave-valor separados por ponto e vírgula (;). Esta é a lista de chaves compatíveis com o sistema:

Chave Descrição
panelId Identifica um painel específico da interface associado ao evento.
component Especifica o nome do componente, como uma atividade vinculada ao evento.
package Indica o nome do pacote relacionado ao evento.
panelToVariantId Especifica a variante de destino de um painel em contextos específicos. Use esse atributo para fazer animações em cascata ao ouvir uma transição de painel. Por exemplo, acionar a transição do painel B para o estado fechado quando o painel A é movido para o estado aberto.

Exemplo:

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

Lógica de correspondência de eventos

Quando um evento é enviado, ele precisa ser comparado com critérios definidos para acionar uma transição ou uma ação. O processo de correspondência ocorre em duas etapas:

  • Correspondência estrita de eventos id: o id do evento enviado precisa corresponder exatamente ao id especificado no filtro de evento de transição ou ação. Se os IDs não corresponderem, o evento será considerado sem correspondência.

  • Correspondência parcial de tokens de evento: quando os IDs de evento correspondem, o sistema usa a correspondência parcial para avaliar os tokens de um evento em relação aos tokens definidos no filtro.

    Para que uma correspondência ocorra, todas as propriedades de evento (tokens) especificadas na definição de evento da transição precisam corresponder estritamente às propriedades no evento enviado.

    No entanto, o evento enviado pode conter outros tokens não definidos explicitamente no filtro. Tokens extras não impedem uma correspondência. Em vez disso, eles são ignorados na avaliação de correspondência.

    Por outro lado, se o filtro especificar um token que não está presente no evento enviado ou se o valor de um token correspondente não estiver alinhado, ele não será considerado uma correspondência.

Por exemplo, considere uma transição definida para ser acionada quando id="app_open" ocorrer em panelId="panel1" com component="com.android.myapp.Activity".

Se um evento enviado tiver id="app_open", panelId="panel1" e component="com.android.myapp.Activity", uma correspondência será feita. Todos os critérios de filtro são atendidos e o valor mais específico para Activity value in the dispatched event is considered a match forcom.android.myapp.

No entanto, a correspondência falha se o evento enviado for id="app_open", panelId="panel1" e component="com.android.yourapp.Activity". Embora id e panelId correspondam, o component não é igual a component na transição — com.android.myapp — e não corresponde a com.android.yourapp no evento enviado.

Gatilho de transição

Embora uma transição possa ser uma correspondência, isso não significa que ela será acionada. Só é possível acionar uma transição por evento. A interface escalonável tem como objetivo acionar apenas a correspondência mais próxima.

Por exemplo, quando duas transições (uma com um nome de componente e outra sem um nome de componente -m) correspondem, apenas a transição com o nome de componente é acionada.

Envio e gerenciamento de eventos

Os eventos são essenciais para o comportamento dinâmico da interface escalonável. Os eventos podem ser enviados da interface do sistema ou de processos externos com uma intent.

Eventos do sistema

O framework define vários eventos do sistema que facilitam essas ações:

Atributo Descrição
_System_OnHomeEvent

(SYSTEM_HOME_EVENT_ID)
Significa que o sistema recebeu uma solicitação para mostrar a tela Início. No AAOS, a Tela inicial pode ser uma configuração flexível de janelas, como uma combinação de widgets ou até mesmo um mapa. Esse evento é crucial para transições ou ações que dependem da visualização da interface principal da página inicial pelo usuário.
_System_TaskOpenEvent

(SYSTEM_TASK_OPEN_EVENT_ID)

É enviado quando uma tarefa ou um app é aberto. Esse evento geral pode acionar ações ou transições com base no lançamento de um app.

Esse evento contém tokens como panelId e component.

_System_TaskCloseEvent

(SYSTEM_TASK_CLOSE_EVENT_ID)
Sinaliza que uma tarefa ou um app foi fechado e serve como contrapartida para _System_TaskOpenEvent. Isso permite que o sistema reaja ao fechamento de apps. Isso pode acionar transições para retornar um painel a um estado padrão ou iniciar outras ações de limpeza.
_System_TaskPanelEmptyEvent

(SYSTEM_TASK_PANEL_EMPTY_EVENT_ID)

Disparado quando um painel específico fica vazio e inclui o panelId como um token para que os gatilhos sejam filtrados de acordo com o painel vazio.

Esse evento é importante para uma recuperação de erros robusta e para reiniciar apps quando o conteúdo associado falha ou é encerrado inesperadamente para evitar a exibição de painéis de interface vazios.

Por exemplo, se um app ControlBar falhar, você poderá configurar e agir para detectar esse evento no painel e reiniciar automaticamente o ControlBar.

.
_System_EnterSuwEvent

(SYSTEM_ENTER_SUW_EVENT_ID)
Indica que o sistema está entrando no assistente de configuração (SUW, na sigla em inglês). Esse evento indica que o sistema está pronto e pode ser configurado para iniciar apps ou mostrar painéis designados assim que o sistema for inicializado. Entrar em um estado de sistema tão crítico exige um evento dedicado para acionar os ajustes ou ações apropriados da interface.
_System_ExitSuwEvent

(SYSTEM_EXIT_SUW_EVENT_ID)
Indica que o sistema está saindo do assistente de configuração (SUW, na sigla em inglês). Semelhante a _System_EnterSuwEvent, esse evento permite que o sistema responda à conclusão do processo de configuração iniciando apps padrão ou fazendo a transição para uma interface padrão.
_System_OnAnimationEndEvent

(SYSTEM_ON_ANIMATION_END_EVENT_ID)
Acionado quando uma animação é concluída na interface. Você pode usar esse evento para acionar ações ou mudanças de estado subsequentes que dependem da conclusão de uma transição visual.

Esse evento contém um token para variantId indicar qual variante o painel acabou usando no final da animação.