高度なウィンドウ処理では、ホームシーンは特定のアクティビティではなく、同時に表示され、インタラクティブな複数のアプリパネルで構成されます。高度なウィンドウ処理では、ホーム アクティビティの空白バージョンを使用して、マルチウィンドウ タスクの可視性バリアとしています。
セットアップ ウィザード(SUW)はホームタスクとして扱われることが多いですが、より一貫性があり信頼性の高いホーム エクスペリエンスを実現するため、SUW をパネルの一部として設定することをおすすめします。
ホームの可視性バリアを構成する
ホームの可視性バリア アクティビティが、SUW アクティビティよりもホーム インテント フィルタの優先度が高いダイレクト ブート対応のホーム アクティビティであることを確認します。
詳細については、StubCarLauncher パッケージのリファレンス プラットフォームをご覧ください。このパッケージをビルドに含め、すべてのユーザーにインストールすることをおすすめします。
SUW パネルを構成する
SUW を専用のパネルに配置して、固有の条件を処理し、デフォルトのルートタスク外の専用の配置を可能にすることをおすすめします。このパネルの境界とレイヤリングを構成できます。
SUW が表示を妨げないように、SUW を比較的高いレイヤに配置することをおすすめします。このパネルは、それぞれ _System_EnterSuwEvent と _System_ExitSuwEvent のシステム イベントを表示および非表示にしなければなりません。次のサンプル構成について考えてみましょう。
<TaskPanel id="suw_panel" defaultVariant="@id/closed" displayId="0" controller="@xml/suw_panel_controller">
<TaskBehavior newTaskLaunchPolicy="REPARENT_TO_SOURCE"/>
<Variant id="@+id/base">
<Layer layer="@integer/suw_panel_layer"/>
<Bounds left="0" top="0" width="100%" height="100%" />
<Background color="@color/suw_panel_background_color" />
</Variant>
<Variant id="@+id/opened" parent="@id/base">
<Visibility isVisible="true"/>
</Variant>
<Variant id="@+id/closed" parent="@id/base">
<Visibility isVisible="false"/>
</Variant>
<Transitions>
<Transition onEvent="_System_TaskOpenEvent" onEventTokens="panelId=suw_panel" toVariant="@id/opened"/>
<Transition onEvent="_System_TaskPanelEmptyEvent" onEventTokens="panelId=suw_panel" toVariant="@id/closed"/>
<Transition onEvent="_System_EnterSuwEvent" toVariant="@id/opened"/>
<Transition onEvent="_System_ExitSuwEvent" toVariant="@id/closed"/>
</Transitions>
</TaskPanel>
...
<Controller id="suw_panel_controller">
<ControllerName>
com.android.systemui.car.wm.scalableui.panel.controller.SetupPanelController
</ControllerName>
<PersistentPackage>com.android.car.mysetuppackage</PersistentPackage>
</Controller>
一般的な SUW アプリに合わせて、セットアップの進行中に SUW パネルが非表示になった場合、コントローラは SUW アクティビティに明示的なホーム シグナルを送信し、SUW が非表示になったことを通知します。
これは、SUW がホーム インテントを消費することでユーザーが SUW を非表示にしようとしていることを認識しているものの、システムからのホーム シグナルにアクセスできないインスタンスに対応するものです。
SUW の設計について異なる期待がある場合は、SetupPanelController をカスタム コントローラに置き換えることで、望ましい動作を実装できます。