<?xml version="1.0" encoding="UTF-8"?>
<!--
    Copyright (c) 2014 Google Inc.

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->

<!--
    The wizard:uris recorded here have the inconvenience of being generated by hand, but they allow
    for the full spread of launch flags (we need FLAG_ACTIVITY_NEW_TASK [0x10000000]), where the
    <intent> tag processed by Intent.parseIntent() does not.

    adb shell am to-intent-uri -a com.android.setupwizard.WELCOME -f 0x10000000 \-\-ez firstRun true
-->
<WizardScript xmlns:wizard="http://schemas.android.com/apk/res/com.android.car.setupwizard"
    wizard:firstAction="oem_pre_setup">

    <!-- Preliminary setup for OEMs [CUSTOMIZABLE] -->
    <WizardAction id="oem_pre_setup"
        wizard:uri="intent:#Intent;action=com.android.setupwizard.OEM_PRE_SETUP;end">
        <result wizard:action="secondary_user_warning" />
    </WizardAction>


    <!-- Secondary user warning [RECOMMENDED, CUSTOMIZABLE] -->
    <WizardAction id="secondary_user_warning"
        wizard:uri="intent:#Intent;action=com.android.setupwizard.USER_WARNING;end">
        <result wizard:name="dpm_user_complete"
            wizard:resultCode="111"
            wizard:action="check_user_unlock_dpm_user_complete" />
        <result wizard:action="check_user_unlock" />
    </WizardAction>

    <WizardAction id="check_user_unlock_dpm_user_complete"
        wizard:uri="intent:#Intent;action=com.android.setupwizard.CHECK_USER_UNLOCK;end">
        <result wizard:action="oem_post_setup" />
    </WizardAction>

    <WizardAction id="check_user_unlock"
        wizard:uri="intent:#Intent;action=com.android.setupwizard.CHECK_USER_UNLOCK;end">
        <result wizard:action="bluetooth_settings" />
    </WizardAction>

    <!-- Bluetooth selection [REQUIRED, CUSTOMIZABLE] -->
    <WizardAction id="bluetooth_settings"
        wizard:uri="intent:#Intent;action=com.android.setupwizard.BLUETOOTH_SETTINGS;end">
        <result wizard:action="network_settings" />
    </WizardAction>

    <!-- Network selection [REQUIRED, CUSTOMIZABLE] -->
    <WizardAction id="network_settings"
        wizard:uri="intent:#Intent;action=com.android.setupwizard.NETWORK_SETTINGS;end">
        <result wizard:name="see_all_wifi"
            wizard:resultCode="101"
            wizard:action="wifi_settings" />
        <result wizard:name="skip"
            wizard:resultCode="1"
            wizard:action="no_account_flow" />
        <result wizard:action="captive_portal" />
    </WizardAction>


    <!-- Wi-Fi setup [REQUIRED, CUSTOMIZABLE] -->
    <WizardAction id="wifi_settings"
        wizard:uri="intent:#Intent;action=com.android.setupwizard.WIFI_SETTINGS;end">
        <result wizard:action="captive_portal" />
    </WizardAction>


    <!-- Resolve captive portal access, and wait for check-in [REQUIRED] -->
    <WizardAction id="captive_portal"
        wizard:uri="intent:#Intent;action=com.android.setupwizard.CAPTIVE_PORTAL;end">
        <result wizard:action="gms_checkin" />
    </WizardAction>

    <WizardAction id="gms_checkin"
        wizard:uri="intent:#Intent;action=com.google.android.setupwizard.GMS_CHECKIN;end">
        <result wizard:action="load_account_intent" />
    </WizardAction>


    <!-- Add an account [REQUIRED] -->
    <WizardAction id="load_account_intent"
        wizard:uri="intent:#Intent;action=com.google.android.setupwizard.LOAD_ADD_ACCOUNT_INTENT;end">
        <result wizard:action="account_setup" />
    </WizardAction>

    <WizardAction id="account_setup"
        wizard:uri="intent:#Intent;action=com.google.android.setupwizard.ACCOUNT_SETUP;end">
        <result wizard:name="skip"
            wizard:resultCode="1"
            wizard:action="no_account_flow" />
        <!-- Alternate flow if managed provisioning already set the user up (for enterprise) [RECOMMENDED] -->
        <result wizard:name="dpm_user_complete"
            wizard:resultCode="111"
            wizard:action="oem_post_setup" />
        <result wizard:action="gms_account_checkin" />
    </WizardAction>


    <!-- Checkin with Gservices using account. If it fails, VPA will not be available. [REQUIRED] -->
    <WizardAction id="gms_account_checkin"
        wizard:uri="intent:#Intent;action=com.google.android.setupwizard.GMS_ACCOUNT_CHECKIN;end">
        <result wizard:name="skip"
            wizard:resultCode="1"
            wizard:action="mfm_check" />
        <result wizard:action="start_vpa" />
    </WizardAction>


    <!-- Initiate VPA (required for Play Auto-Installs) [RECOMMENDED] -->
    <WizardAction id="start_vpa"
        wizard:uri="intent:#Intent;action=com.google.android.setupwizard.START_VPA;end">
        <result wizard:action="mfm_check" />
    </WizardAction>


    <!-- Branch to script for setting up with or without an account [REQUIRED] -->
    <WizardAction id="mfm_check"
        wizard:uri="intent:#Intent;action=com.google.android.setupwizard.ACCOUNT_CHECK;end">
        <result wizard:name="skip"
            wizard:resultCode="1"
            wizard:action="no_account_flow" />
        <result wizard:action="account_flow" />
    </WizardAction>


    <!-- Set up with an account [REQUIRED] -->
    <WizardAction id="account_flow"
        wizard:script="android.resource://com.google.android.setupwizard/xml/wizard_script_user_account_flow">
        <result wizard:action="oem_post_setup" />
    </WizardAction>


    <!-- Set up without an account [REQUIRED] -->
    <WizardAction id="no_account_flow"
        wizard:script="android.resource://com.google.android.setupwizard/xml/wizard_script_user_no_account_flow">
        <result wizard:action="oem_post_setup" />
    </WizardAction>


    <!-- OEM completion [CUSTOMIZABLE] -->
    <WizardAction id="oem_post_setup"
        wizard:uri="intent:#Intent;action=com.android.setupwizard.OEM_POST_SETUP;end">
        <result wizard:action="exit" />
    </WizardAction>


    <!-- Leave Setup Wizard [REQUIRED] -->
    <WizardAction id="exit"
        wizard:uri="intent:#Intent;action=com.android.setupwizard.EXIT;end" />

</WizardScript>
