イベントは、状態の変化をトリガーし、アクションを開始します。イベントは、インテントを使用して System UI またはプロセスの外部からディスパッチされるシグナルとして機能します。イベントは、応答が必要な発生についてスケーラブル UI に通知します。
スケーラブル UI イベントは、ハードウェアまたはソフトウェアの変更によってトリガーされ、パネルの状態を変更できるシステム シグナルです。これらのイベントは、UI レスポンスが必要な発生についてフレームワークに通知します。パネルの状態をより細かく制御するために、組み込みのシステム イベントに加えて、カスタム イベントを定義することもできます。
イベントの構造
必須の一意の識別子(ID)はイベントを識別します。この ID は、_System_AppOpenEvent
や _System_PanelEmptyEvent
などのオカレンスのタイプを分類します。
この ID に加えて、イベントはトークンや Key-Value ペアをオプションで持ち、イベントのコンテキストと詳細を提供できます。これらのトークンを使用すると、イベントをより細かくフィルタリングできるため、特定の条件でのみ遷移やアクションをトリガーできます。
トークンは、セミコロン(;
)で区切られた Key-Value ペアのリストとしてイベントに渡されます。システムでサポートされているキーのリストは次のとおりです。
キー | 説明 |
---|---|
panelId |
イベントに関連付けられている特定の UI パネルを識別します。 |
component |
イベントにリンクされているアクティビティなどのコンポーネント名を指定します。 |
package |
イベントに関連するパッケージ名を示します。 |
panelToVariantId |
特定のコンテキストでパネルのターゲット バリアントを指定します。この属性を使用して、パネルの切り替えをリッスンすることでアニメーションをカスケードします。たとえば、パネル A が開いた状態に遷移したときに、パネル B の遷移をトリガーして閉じた状態にします。 |
次に例を示します。
"component=com.android.app;panelId=panel1"
イベント マッチングのロジック
イベントがディスパッチされると、定義された条件と照合され、遷移またはアクションがトリガーされます。照合プロセスは次の 2 つのステージで行われます。
厳密なイベント
id
の照合: ディスパッチされたイベントのid
は、遷移またはアクションのイベント フィルタで指定されたid
と完全に一致する必要があります。ID が一致しない場合、イベントは一致しないとみなされます。イベント トークンの部分一致: イベント ID が一致する場合、システムは部分一致を使用して、イベントのトークンをフィルタで定義されたトークンと照合します。
一致するには、遷移のイベント定義で指定されたすべてのイベント プロパティ(トークン)が、ディスパッチされたイベントの対応するプロパティと厳密に一致する必要があります。
ただし、ディスパッチされたイベントには、フィルタで明示的に定義されていない追加のトークンが含まれる場合があります。余分なトークンがあっても、一致が妨げられることはありません。代わりに、マッチングの評価では無視されます。
逆に、フィルタで指定されたトークンがディスパッチされたイベントに存在しない場合や、一致するトークンの値が一致しない場合は、一致と見なされません。
たとえば、component="com.android.myapp.Activity"
を含む panelId="panel1"
で id="app_open"
が発生したときにトリガーされるように定義された遷移を考えてみましょう。
ディスパッチされたイベントに 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
(com.android.myapp
)はディスパッチされたイベントの com.android.yourapp
と一致しません。component
遷移トリガー
遷移が一致しても、トリガーされるとは限りません。各イベントでトリガーできる遷移は 1 つのみです。スケーラブル UI は、最も近い一致のみをトリガーすることを目的としています。
たとえば、コンポーネント名のある遷移とコンポーネント名のない遷移 -m
の 2 つが一致する場合、コンポーネント名のある遷移のみがトリガーされます。
イベントのディスパッチと処理
イベントは、スケーラブル UI の動的な動作の中心です。イベントは、インテントを使用してシステム UI または外部プロセスからディスパッチできます。
システム イベント
フレームワークは、これらのアクションを容易にするシステム イベントをいくつか定義しています。
属性 | 説明 |
---|---|
_System_OnHomeEvent ( SYSTEM_HOME_EVENT_ID ) |
システムが ホーム画面を表示するリクエストを受け取ったことを示します。AAOS では、ホームは、ウィジェットの組み合わせや地図など、ウィンドウの柔軟な構成にすることができます。このイベントは、ユーザーがプライマリ ホーム インターフェースを閲覧していることに依存するトランジションやアクションにとって重要です。 |
_System_TaskOpenEvent ( SYSTEM_TASK_OPEN_EVENT_ID ) |
タスクまたはアプリが開かれたときにディスパッチされます。この一般的なイベントは、アプリの起動に基づいてアクションやトランジションをトリガーできます。 このイベントには、 |
_System_TaskCloseEvent ( SYSTEM_TASK_CLOSE_EVENT_ID ) |
タスクまたはアプリが終了したことを示し、_System_TaskOpenEvent のカウンターパートとして機能します。これにより、システムはアプリが閉じられたことに対応できます。これにより、パネルをデフォルトの状態に戻すか、他のクリーンアップ アクションを開始するトランジションがトリガーされます。 |
_System_TaskPanelEmptyEvent ( SYSTEM_TASK_PANEL_EMPTY_EVENT_ID ) |
特定のパネルが空になったときにディスパッチされます。 このイベントは、エラーの堅牢な復元と、関連するコンテンツがクラッシュしたり予期せず終了したりした場合にアプリを再起動して、空の UI パネルが表示されないようにするために重要です。 たとえば、 |
_System_EnterSuwEvent ( SYSTEM_ENTER_SUW_EVENT_ID ) |
システムが設定ウィザード(SUW)に入ったことを示します。このイベントは、システムの準備完了を通知するもので、システムが初期化されたらアプリを起動したり、指定されたパネルを表示したりするように構成できます。このような重大なシステム状態に入るには、適切な UI 調整やアクションをトリガーする専用のイベントが必要です。 |
_System_ExitSuwEvent ( SYSTEM_EXIT_SUW_EVENT_ID ) |
システムが設定ウィザード(SUW)を終了したことを示します。_System_EnterSuwEvent と同様に、このイベントにより、システムはデフォルト アプリを起動したり、標準 UI に移行したりすることで、セットアップ プロセスの完了に応答できます。 |
_System_OnAnimationEndEvent ( SYSTEM_ON_ANIMATION_END_EVENT_ID ) |
UI でアニメーションが完了するとトリガーされます。このイベントを使用して、ビジュアル トランジションの完了に依存する後続のアクションや状態の変化をトリガーできます。 このイベントには、アニメーションの終了時にパネルがどのバリエーションになったかを示す |