集成设置向导

在高级窗口化中,主场景由多个并发可见且可互动的应用面板组成,而不是特定的主 activity。高级窗口化功能使用空白版主界面 activity 作为多窗口任务的可见性屏障

虽然设置向导 (SUW) 通常被视为主屏幕任务,但我们建议您将 SUW 配置为面板的一部分,以创建更一致、更可靠的主屏幕体验。

配置住宅可见性屏障

确认主屏幕可见性屏障 activity 是直接启动感知主屏幕 activity,并且其主屏幕 intent 过滤器的优先级高于 SUW activity。

如需了解详情,请参阅 StubCarLauncher 软件包中的参考平台。 我们建议您在 build 中包含此软件包,并为所有用户安装此软件包。

配置 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 activity 发送明确的 Home 信号,以表明 SUW 已隐藏。

此问题已得到解决,具体涉及以下情况:SUW 知道用户正尝试通过使用 home intent 来隐藏 SUW,但无法从系统访问 home 信号。

如果您对 SUW 设计有不同的期望,可以通过将 SetupPanelController 替换为自定义控制器来实现所需的行为。