配置活动

事件会触发状态更改并启动操作。事件充当信号,通过 intent 从系统界面或进程外部调度。事件会告知可伸缩界面需要做出响应的发生情况。

可扩缩的界面事件是一种系统信号,由硬件或软件更改触发,可以改变面板的状态。这些事件会向框架通知需要界面响应的事件。除了内置的系统事件之外,您还可以定义自定义事件,以便更精确地控制面板状态。

事件的结构

必需的唯一标识符 (ID) 用于标识事件。此 ID 用于对发生实例的类型进行分类,例如 _System_AppOpenEvent_System_PanelEmptyEvent

除了此 ID 之外,事件还可以选择性地携带令牌(键值对),以提供有关事件的背景信息和详细信息。借助这些令牌,您可以更精细地过滤事件,从而仅在特定条件下触发过渡或操作。

令牌以英文分号 (;) 分隔的键值对列表的形式传递给事件。以下是系统支持的键的列表:

说明
panelId 标识与事件关联的特定界面面板。
component 指定组件名称,例如与事件关联的 activity。
package 表示与事件相关的软件包名称。
panelToVariantId 指定特定上下文中的面板的目标变体。使用此属性可通过监听面板过渡来级联动画。例如,当面板 A 转换为打开状态时,触发面板 B 转换为关闭状态。

例如:

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

活动匹配逻辑

调度事件时,必须根据定义的条件进行匹配,以触发转换或操作。匹配过程分为两个阶段:

  • 严格的事件 id 匹配:调度事件的 id 必须与过渡或操作事件过滤器中指定的 id 完全一致。如果 ID 不匹配,则该事件被视为不匹配。

  • 部分事件令牌匹配:当事件 ID 匹配时,系统会使用部分匹配来根据过滤条件中定义的令牌评估事件的令牌。

    如要发生匹配,转换的事件定义中指定的所有事件属性(令牌)都必须与所调度事件中的相应属性严格匹配。

    也就是说,调度的事件可以包含未在过滤器中明确定义的其他令牌。多余的令牌不会阻止匹配。而是会在匹配评估中被忽略。

    相反,如果过滤条件指定的令牌未出现在已调度的事件中,或者匹配令牌的值不一致,则不视为匹配。

例如,假设某个过渡定义为在 panelId="panel1" 上发生 id="app_open" 时触发,且 id="app_open" 具有 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 forcom.android.myapp` 的值更具体。

不过,如果分派的事件是 id="app_open"panelId="panel1"component="com.android.yourapp.Activity",则匹配会失败。虽然 idpanelId 匹配,但过渡中的 component 不等于 component(即 com.android.myapp)与已调度的事件中的 com.android.yourapp 不匹配。

过渡触发器

虽然过渡可能匹配,但这并不意味着它会被触发。每个事件只能触发一个过渡。可缩放界面旨在仅触发最接近的匹配项。

例如,当两个过渡效果(一个具有组件名称,另一个没有组件名称 -m)匹配时,系统只会触发具有组件名称的过渡效果。

事件分派和处理

事件是可伸缩界面动态行为的核心。事件可以从系统界面或从具有 intent 的外部进程调度。

系统事件

该框架定义了多个有助于执行这些操作的系统事件:

属性 说明
_System_OnHomeEvent

(SYSTEM_HOME_EVENT_ID)
表示系统收到了显示主屏幕的请求。在 AAOS 中,主屏幕可以是灵活的窗口配置,例如 widget 的组合,甚至是地图。此事件对于依赖于用户查看主界面而进行的过渡或操作至关重要。
_System_TaskOpenEvent

(SYSTEM_TASK_OPEN_EVENT_ID)

在任务或应用打开时调度。此常规事件可根据应用的启动触发操作或过渡。

此事件包含 panelIdcomponent 等令牌。

_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 的令牌,用于指示面板在动画结束时最终采用的变体。