Настроить событие

Событие запускает изменения состояния и инициирует действия. События действуют как сигналы, отправляемые из пользовательского интерфейса системы или извне процесса с помощью намерения. События информируют масштабируемый пользовательский интерфейс о событиях, требующих реакции.

Событие масштабируемого пользовательского интерфейса — это системный сигнал, запускаемый изменениями в аппаратном или программном обеспечении, который может изменить состояние панели. Эти события уведомляют фреймворк о событиях, требующих реакции пользовательского интерфейса. Для более точного управления состояниями панелей вы также можете определять пользовательские события в дополнение к встроенным системным событиям.

Структура события

Событие идентифицируется с помощью обязательного уникального идентификатора (ID). Этот ID классифицирует тип события, например, _System_TaskOpenEvent или _System_PanelEmptyEvent .

Помимо идентификатора, событие может дополнительно содержать токены — пары ключ-значение, предоставляющие контекст и подробную информацию о событии. Эти токены позволяют более детально фильтровать события, обеспечивая запуск переходов или действий только при определенных условиях.

Токены передаются в событие в виде списка пар ключ-значение, разделенных точкой с запятой ( ; ). Вот список поддерживаемых системой ключей:

Ключ Описание
panelId Идентифицирует конкретную панель пользовательского интерфейса, связанную с событием.
component Указывает имя компонента, например, действия, связанного с событием.
package Указывает название пакета, связанного с событием.
panelToVariantId Указывает целевой вариант панели в конкретных контекстах. Используйте этот атрибут для каскадной анимации, отслеживая переходы панелей. Например, переход панели B в закрытое состояние запускается, когда панель A переходит в открытое состояние.

Например:

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

Логика сопоставления событий

Когда отправляется событие, его необходимо сопоставить с заданными критериями, чтобы инициировать переход или действие. Процесс сопоставления происходит в два этапа:

  • Строгое соответствие id событий: id отправленного события должен точно совпадать с id указанным в фильтре событий перехода или действия. Если идентификаторы не совпадают, событие считается не соответствующим требованиям.

  • Частичное сопоставление токенов событий: При совпадении идентификаторов событий система использует частичное сопоставление для сравнения токенов события с токенами, определенными в фильтре.

    Для того чтобы произошло совпадение, все свойства события (токены), указанные в определении события перехода, должны строго соответствовать соответствующим свойствам в отправленном событии.

    При этом отправленное событие может содержать дополнительные токены, не указанные явно в фильтре. Дополнительные токены не препятствуют совпадению. Вместо этого они игнорируются при оценке соответствия.

    И наоборот, если фильтр указывает токен, отсутствующий в отправленном событии, или если значение соответствующего токена не совпадает, он не считается совпадением.

Например, рассмотрим переход, который должен срабатывать, когда id="app_open" происходит на panelId="panel1" с component="com.android.myapp.Activity" .

Если отправленное событие имеет id="app_open" , panelId="panel1" и component="com.android.myapp.Activity" , выполняется совпадение. Все критерии фильтрации выполнены, и более конкретное значение Activity value in the dispatched event is considered a match for com.android.myapp.

Однако сопоставление не удается, если в отправленном событии id="app_open" , panelId="panel1" и component="com.android.yourapp.Activity" . Хотя id и panelId совпадают, component , не равный component в переходе — com.android.myapp — не соответствует com.android.yourapp в отправленном событии.

Триггер перехода

Хотя переход может соответствовать условию, это не означает, что он срабатывает. Для каждого события может сработать только один переход. Масштабируемый пользовательский интерфейс стремится срабатывать только при наиболее близком совпадении.

Например, если совпадают два перехода — один с именем компонента, а другой без имени компонента -m , — запускается только переход с именем компонента.

Организация и проведение мероприятий

События играют центральную роль в динамическом поведении масштабируемого пользовательского интерфейса. События могут отправляться из системного пользовательского интерфейса или из внешних процессов с заданным намерением.

Системные события

Данная структура определяет несколько системных событий, которые облегчают эти действия:

Атрибут Описание
_System_OnHomeEvent

( SYSTEM_HOME_EVENT_ID )
Это означает, что система получила запрос на отображение главного экрана. В AAOS главный экран может представлять собой гибкую конфигурацию окон, например, комбинацию виджетов или даже карту. Это событие имеет решающее значение для переходов или действий, зависящих от того, просматривает ли пользователь основной интерфейс главного экрана.
_System_TaskOpenEvent

( SYSTEM_TASK_OPEN_EVENT_ID )

Событие отправляется при открытии задачи или приложения. Это общее событие может запускать действия или переходы в зависимости от запуска приложения.

Это событие содержит такие токены, как panelId и component .

_System_TaskCloseEvent

( SYSTEM_TASK_CLOSE_EVENT_ID )
Сигнализирует о закрытии задачи или приложения и служит аналогом события _System_TaskOpenEvent . Это позволяет системе реагировать на закрытие приложений. Это может запускать переходы для возврата панели в состояние по умолчанию или инициировать другие действия по очистке.
_System_TaskPanelEmptyEvent

( SYSTEM_TASK_PANEL_EMPTY_EVENT_ID )

Срабатывает, когда определенная панель становится пустой, и включает panelId в качестве токена, чтобы триггеры фильтровались в зависимости от того, какая панель пуста.

Это событие важно для надежного восстановления после ошибок и для перезапуска приложений в случае сбоя или неожиданного завершения работы связанного контента, чтобы предотвратить отображение пустых панелей пользовательского интерфейса.

Например, если приложение ControlBar аварийно завершает работу, вы можете настроить действие для обнаружения этого события на его панели и автоматического перезапуска ControlBar

.
_System_EnterSuwEvent

( SYSTEM_ENTER_SUW_EVENT_ID )
Событие указывает на переход системы в режим мастера настройки (SUW). Это событие сигнализирует о готовности системы и может быть настроено для запуска приложений или отображения определенных панелей после инициализации системы. Переход в такое критическое состояние системы требует специального события для запуска соответствующих настроек или действий пользовательского интерфейса.
_System_ExitSuwEvent

( SYSTEM_EXIT_SUW_EVENT_ID )
Указывает на выход системы из мастера установки (SUW). Аналогично событию _System_EnterSuwEvent , это событие позволяет системе реагировать на завершение процесса установки, запуская приложения по умолчанию или переходя к стандартному пользовательскому интерфейсу.
_System_OnAnimationEndEvent

( SYSTEM_ON_ANIMATION_END_EVENT_ID )
Событие срабатывает по завершении анимации в пользовательском интерфейсе. Вы можете использовать это событие для запуска последующих действий или изменений состояния, зависящих от завершения визуального перехода.

Это событие содержит токен variantId , указывающий, какой вариант в итоге получилась панель в конце анимации.