Integrar o assistente de configuração

Na janela avançada, a cena inicial é composta por vários painéis de apps visíveis e interativos simultaneamente, em vez de uma atividade inicial específica. A janela avançada usa uma versão em branco de uma atividade inicial para ser uma barreira de visibilidade para tarefas de várias janelas.

Embora o Assistente de configuração (SUW, na sigla em inglês) seja tratado como uma tarefa inicial, recomendamos que você o configure como parte de um painel para criar experiências iniciais mais consistentes e confiáveis.

Configurar a barreira de visibilidade inicial

Confirme se a atividade de barreira de visibilidade inicial é uma atividade inicial direta que tem uma prioridade maior para o filtro de intent inicial do que a atividade do SUW.

Para saber mais, consulte a plataforma de referência no StubCarLauncher pacote. Recomendamos que você inclua esse pacote nas suas builds e o instale para todos os usuários.

Configurar o painel do SUW

Recomendamos colocar o SUW em um painel dedicado para processar condições exclusivas e permitir a colocação dedicada fora da tarefa raiz padrão. É possível configurar os limites e a camada desse painel.

Para que o SUW não fique obstruído, recomendamos colocá-lo em uma camada relativamente alta. Esse painel precisa mostrar e ocultar os eventos do sistema de _System_EnterSuwEvent e _System_ExitSuwEvent, respectivamente. Considere este exemplo de configuração:

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

Para se alinhar ao app SUW típico, se o painel do SUW ficar invisível durante a configuração, o controlador enviará um sinal inicial explícito para a atividade do SUW para anunciar que ele está oculto.

Isso resolve instâncias em que o SUW sabia que o usuário estava tentando ocultá-lo consumindo a intent inicial, mas sem ter acesso ao sinal inicial do sistema.

Se você tiver expectativas diferentes para o design do SUW, implemente o comportamento preferido substituindo SetupPanelController por um controlador personalizado.