設定ウィザードを統合する

高度なウィンドウ処理では、ホームシーンは特定のアクティビティではなく、同時に表示され、インタラクティブな複数のアプリパネルで構成されます。高度なウィンドウ処理では、ホーム アクティビティの空白バージョンを使用して、マルチウィンドウ タスクの可視性バリアとしています。

セットアップ ウィザード(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 をカスタム コントローラに置き換えることで、望ましい動作を実装できます。