<!--
**
** Copyright 2014, The Android Open Source Project
**
** 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.
*/
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.android.managedprovisioning">

    <permission
        android:name="android.permission.PROVISION_MANAGED_DEVICE_SILENTLY"
        android:protectionLevel="signature|preinstalled" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.MANAGE_USERS" />
    <uses-permission android:name="android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.DELETE_PACKAGES" />
    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
    <uses-permission android:name="android.permission.BIND_DEVICE_ADMIN" />
    <uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.MANAGE_APP_OPS_MODES" />
    <uses-permission android:name="android.permission.HIDE_OVERLAY_WINDOWS" />

    <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MASTER_CLEAR" />
    <uses-permission android:name="android.permission.NFC" />
    <uses-permission android:name="android.permission.SET_TIME" />
    <uses-permission android:name="android.permission.SET_TIME_ZONE" />

    <uses-permission android:name="android.permission.CRYPT_KEEPER" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.SHUTDOWN" />

    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />

    <uses-permission android:name="android.permission.PERFORM_CDMA_PROVISIONING" />
    <uses-permission android:name="android.permission.ACCESS_PDB_STATE" />
    <uses-permission android:name="android.permission.PEERS_MAC_ADDRESS" />

    <uses-permission android:name="android.permission.NETWORK_MANAGED_PROVISIONING" />

    <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
    <uses-permission android:name="android.permission.MARK_DEVICE_ORGANIZATION_OWNED" />

    <!-- To set the bg color of the deferred setup notification (without a foreground service) -->
    <uses-permission android:name="android.permission.USE_COLORIZED_NOTIFICATIONS" />

    <uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" />

    <!-- Required by setup design library -->
    <uses-permission android:name="com.google.android.setupwizard.SETUP_COMPAT_SERVICE" />

    <uses-permission android:name="android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES" />

    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />

    <uses-permission android:name="android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND" />

    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

    <uses-permission android:name="android.permission.LAUNCH_DEVICE_MANAGER_SETUP" />

    <!-- Used to read the device management role holder package name -->
    <uses-permission android:name="android.permission.MANAGE_ROLE_HOLDERS" />

    <application
        android:name=".ManagedProvisioningApplication"
        android:allowClearUserData="false"
        android:hardwareAccelerated="true"
        android:label="@string/app_label"
        android:supportsRtl="true"
        android:usesCleartextTraffic="true">

        <meta-data
            android:name="com.android.managedprovisioning.patch.24760218"
            android:value="true" />

        <!--
             Note: Setup activities are android:immersive to prevent full-screen notifications (USB
            mass storage; incoming calls) from taking over. Note that high-priority notifications
            (phone calls) will still pop up a small window that can be activated.
        -->
        <activity
            android:name=".provisioning.ProvisioningActivity"
            android:excludeFromRecents="true"
            android:immersive="true"
            android:launchMode="singleTop"
            android:theme="@style/SudThemeGlifV4.DayNight"></activity>

        <activity
            android:name=".provisioning.AdminIntegratedFlowPrepareActivity"
            android:excludeFromRecents="true"
            android:immersive="true"
            android:launchMode="singleTop"
            android:theme="@style/SudThemeGlifV4.DayNight"></activity>

        <activity
            android:name=".preprovisioning.PreProvisioningActivity"
            android:excludeFromRecents="true"
            android:exported="true"
            android:immersive="true"
            android:launchMode="singleTop"
            android:theme="@style/SudThemeGlifV4.DayNight">
            <intent-filter android:priority="10">
                <action android:name="android.app.action.PROVISION_MANAGED_PROFILE" />
                <action android:name="android.app.action.PROVISION_MANAGED_DEVICE" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <activity
            android:name=".provisioning.ResetAndReturnDeviceActivity"
            android:excludeFromRecents="true"
            android:immersive="true"
            android:theme="@style/SudThemeGlifV4.Light" />

        <activity
            android:name=".provisioning.ResetDeviceActivity"
            android:excludeFromRecents="true"
            android:immersive="true"
            android:theme="@style/SudThemeGlifV4.Light" />

        <!--
            Nfc bump entry for device owner provisioning, protected by a permission so only the Nfc
            stack can trigger this.
        -->
        <activity
            android:name=".preprovisioning.PreProvisioningActivityViaNfc"
            android:exported="true"
            android:permission="android.permission.DISPATCH_NFC_MESSAGE"
            android:theme="@style/SudThemeGlifV4.DayNight">
            <intent-filter android:priority="10">
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="application/com.android.managedprovisioning" />
            </intent-filter>
        </activity>
        <!--
            Trusted app entry for device owner provisioning, protected by a permission so only
            privileged app can trigger this.
        -->
        <activity-alias
            android:name=".PreProvisioningActivityViaTrustedApp"
            android:exported="true"
            android:permission="android.permission.DISPATCH_PROVISIONING_MESSAGE"
            android:targetActivity=".preprovisioning.PreProvisioningActivity">
            <intent-filter android:priority="10">
                <action android:name="android.app.action.PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE" />
                <action android:name="android.app.action.PROVISION_FINANCED_DEVICE" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity-alias>
        <!-- Entry to resume encryption after reboot. -->
        <activity-alias
            android:name=".PreProvisioningActivityAfterEncryption"
            android:exported="false"
            android:targetActivity=".preprovisioning.PreProvisioningActivity">
            <intent-filter android:priority="10">
                <action android:name="com.android.managedprovisioning.action.RESUME_PROVISIONING" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity-alias>

        <activity
            android:name=".preprovisioning.terms.TermsActivity"
            android:excludeFromRecents="true"
            android:immersive="true"
            android:launchMode="singleTop"
            android:theme="@style/SudThemeGlifV4.DayNight" />
        <activity
            android:name=".preprovisioning.EncryptDeviceActivity"
            android:immersive="true"
            android:launchMode="singleTop"></activity>
        <!--
            Entry point for silent device owner provisioning.
        -->
        <service android:name=".provisioning.SilentDeviceOwnerProvisioningService"></service>
        <receiver
            android:name=".provisioning.SilentDeviceOwnerProvisioningReceiver"
            android:exported="true"
            android:permission="android.permission.PROVISION_MANAGED_DEVICE_SILENTLY">
            <intent-filter android:priority="10">
                <action android:name="android.app.action.PROVISION_MANAGED_DEVICE_SILENTLY" />
            </intent-filter>
        </receiver>

        <activity
            android:name=".preprovisioning.WebActivity"
            android:immersive="true"
            android:launchMode="singleTop"
            android:process=":webview"
            android:theme="@style/SudThemeGlifV4.DayNight"></activity>

        <activity
            android:name=".TrampolineActivity"
            android:excludeFromRecents="true"
            android:theme="@android:style/Theme.NoDisplay"></activity>

        <!--
            When PostEncryptionActivity is disabled, its entire task is going to get killed.
            So, we explicitly specify a taskAffinity for this instead of a package default to make
            sure it starts in a new task.
        -->
        <activity
            android:name=".preprovisioning.PostEncryptionActivity"
            android:enabled="false"
            android:excludeFromRecents="true"
            android:exported="true"
            android:noHistory="true"
            android:taskAffinity=":PostEncryptionActivity"
            android:theme="@android:style/Theme.NoDisplay">
            <intent-filter android:priority="10">
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <service android:name=".provisioning.ProvisioningService" />
        <service android:name=".finalization.SendDpcBroadcastService" />
        <service android:name=".ota.OtaService" />

        <receiver
            android:name="com.android.managedprovisioning.BootReminder"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <receiver
            android:name="com.android.managedprovisioning.ota.PreBootListener"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.PRE_BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <receiver
            android:name="com.android.managedprovisioning.provisioninglisteners.ProvisioningCompletedListener"
            android:exported="true">
            <intent-filter>
                <action android:name="android.app.action.PROVISIONING_COMPLETED" />
            </intent-filter>
        </receiver>

        <receiver
            android:name="com.android.managedprovisioning.provisioninglisteners.ManagedUserRemovalListener"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.USER_REMOVED" />
            </intent-filter>
        </receiver>

        <!-- TODO (b/146135268): Add permission for setup-wizard to guard access? -->
        <activity
            android:name=".finalization.FinalizationForwarderActivity"
            android:excludeFromRecents="true"
            android:exported="true"
            android:immersive="true"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.Translucent.NoTitleBar">
            <intent-filter>
                <!-- TODO (b/177666246): Remove PROVISION_FINALIZATION_INSIDE_SUW
                after the setup wizard change which calls PROVISION_FINALIZATION is in prebuilt -->
                <action android:name="android.app.action.PROVISION_FINALIZATION_INSIDE_SUW" />
                <action android:name="android.app.action.PROVISION_FINALIZATION" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <activity
            android:name=".finalization.FinalizationInsideSuwActivity"
            android:excludeFromRecents="true"
            android:immersive="true"
            android:launchMode="singleTop"
            android:theme="@style/SudThemeGlifV4.DayNight" />

        <activity
            android:name=".provisioning.LandingActivity"
            android:immersive="true"
            android:theme="@style/SudThemeGlifV4.DayNight" />

        <activity
            android:name=".provisioning.FinancedDeviceLandingActivity"
            android:immersive="true"
            android:theme="@style/SudThemeGlifV4.DayNight" />

        <activity
            android:name=".preprovisioning.DownloadRoleHolderActivity"
            android:immersive="true"
            android:theme="@style/SudThemeGlifV4.DayNight" />

        <activity
            android:name=".common.RetryLaunchActivity"
            android:immersive="true"
            android:theme="@style/SudThemeGlifV4.DayNight" />

        <activity
            android:name=".networkconnection.EstablishNetworkConnectionActivity"
            android:excludeFromRecents="true"
            android:exported="true"
            android:immersive="true"
            android:launchMode="singleTop"
            android:permission="android.permission.DISPATCH_PROVISIONING_MESSAGE"
            android:theme="@style/SudThemeGlifV3.DayNight">
            <intent-filter>
                <action android:name="android.app.action.ESTABLISH_NETWORK_CONNECTION" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <service
            android:name=".analytics.ProcessMetricsJobService"
            android:permission="android.permission.BIND_JOB_SERVICE" />

        <!-- (b/197919878) Disable startup provider due to resource loading issue. -->
        <provider
            android:name="androidx.startup.InitializationProvider"
            android:authorities="${applicationId}.androidx-startup"
            tools:node="remove" />
    </application>
</manifest>
