Intégrer l'assistant de configuration

Dans le fenêtrage avancé, la scène d'accueil est composée de plusieurs panneaux d'applications visibles et interactifs simultanément, au lieu d'une activité d'accueil spécifique. Le fenêtrage avancé utilise une version vide d'une activité d'accueil comme barrière de visibilité pour les tâches en mode multifenêtre.

Bien que l'assistant de configuration soit souvent considéré comme une tâche à domicile, nous vous recommandons de le configurer dans un panneau pour créer des expériences domotiques plus cohérentes et fiables.

Configurer la barrière de visibilité de la maison

Vérifiez que l'activité de barrière de visibilité de la maison est une activité de démarrage direct qui a une priorité plus élevée pour le filtre d'intent de la maison que l'activité SUW.

Pour en savoir plus, consultez la plate-forme de référence dans le package StubCarLauncher. Nous vous recommandons d'inclure ce package dans vos builds et de l'installer pour tous les utilisateurs.

Configurer le panneau SUW

Nous vous recommandons de placer SUW dans un panneau dédié pour gérer les conditions uniques et permettre un placement dédié en dehors de la tâche racine par défaut. Vous pouvez configurer les limites et la superposition de ce panneau.

Pour que le SUW ne soit pas masqué, nous vous recommandons de le placer dans un calque relativement élevé. Ce panneau doit afficher et masquer les événements système _System_EnterSuwEvent et _System_ExitSuwEvent, respectivement. Prenons l'exemple de configuration suivant :

<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>

Pour s'aligner sur l'application SUW typique, si le panneau SUW devient invisible pendant la configuration, le contrôleur envoie un signal d'accueil explicite à l'activité SUW pour annoncer que SUW est masqué.

Cela concerne les cas où SUW savait que l'utilisateur tentait de masquer SUW en consommant l'intention de maison, mais sans avoir accès au signal de maison du système.

Si vous avez des attentes différentes concernant la conception de votre SUW, vous pouvez implémenter le comportement souhaité en remplaçant SetupPanelController par un contrôleur personnalisé.