<?xml version="1.0" encoding="utf-8"?> <!-- ~ Copyright (C) 2023 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. --> <!--The base manifest file contains all elements from DeviceLockController. Any new components should also be added to src/com/android/devicelockcontroller/debug/AndroidManifest.xml --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.android.devicelockcontroller"> <!-- Permission for calls from controller to device lock service --> <permission android:name="com.android.devicelockcontroller.permission.MANAGE_DEVICE_LOCK_SERVICE_FROM_CONTROLLER" android:protectionLevel="signature" /> <!-- Permission used by a Kiosk app to send the clear device broadcast. Given that no app holds this permission, only our system service component is able to receive the broadcast --> <permission android:name="com.android.devicelock.permission.RECEIVE_CLEAR_BROADCAST" android:protectionLevel="signature" /> <!-- Permission checked by kiosk setup activity --> <permission android:name="com.android.devicelock.permission.START_KIOSK_SETUP_ACTIVITY" android:protectionLevel="signature" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" /> <uses-permission android:name="android.permission.MASTER_CLEAR" /> <uses-permission android:name="android.permission.MANAGE_DEVICE_POLICY_APPS_CONTROL" /> <uses-permission android:name="android.permission.MANAGE_DEVICE_POLICY_CALLS" /> <uses-permission android:name="android.permission.MANAGE_DEVICE_POLICY_DEBUGGING_FEATURES" /> <uses-permission android:name="android.permission.MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES" /> <uses-permission android:name="android.permission.MANAGE_DEVICE_POLICY_LOCK_TASK" /> <uses-permission android:name="android.permission.MANAGE_DEVICE_POLICY_SAFE_BOOT" /> <uses-permission android:name="android.permission.MANAGE_DEVICE_POLICY_TIME" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.USE_EXACT_ALARM" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> <uses-permission android:name="android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS" /> <!-- Controller grants itself this permission to call internal APIs on device lock system service --> <uses-permission android:name="com.android.devicelockcontroller.permission.MANAGE_DEVICE_LOCK_SERVICE_FROM_CONTROLLER" /> <!-- Kiosk app setup activity should have a corresponding "android:permission" attribute --> <uses-permission android:name="com.android.devicelock.permission.START_KIOSK_SETUP_ACTIVITY" /> <application android:name=".DeviceLockControllerApplication" android:allowBackup="false" android:allowClearUserData="false" android:label="@string/app_name" android:supportsRtl="true"> <activity android:name="com.android.devicelockcontroller.activities.HelpActivity" android:exported="false" android:theme="@style/Theme.DeviceLock.NoActionBar" /> <activity android:name="com.android.devicelockcontroller.activities.LandingActivity" android:exported="false" android:excludeFromRecents="true" android:immersive="true" android:theme="@style/Theme.DeviceLock.NoActionBar"> <intent-filter> <action android:name="com.android.devicelockcontroller.action.START_DEVICE_FINANCING_PROVISIONING" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="com.android.devicelockcontroller.activities.LockedHomeActivity" android:enabled="false" android:excludeFromRecents="true" android:launchMode="singleInstance" android:exported="true" android:noHistory="true" android:theme="@android:style/Theme.Translucent.NoTitleBar">> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> <activity android:name="com.android.devicelockcontroller.activities.ProvisioningActivity" android:exported="false" android:excludeFromRecents="true" android:immersive="true" android:theme="@style/Theme.DeviceLock.NoActionBar" /> <activity-alias android:name="com.android.devicelockcontroller.activities.DeviceFinancingSecondaryUserLandingActivity" android:exported="false" android:targetActivity=".activities.LandingActivity"> <intent-filter> <action android:name="com.android.devicelockcontroller.action.START_DEVICE_FINANCING_SECONDARY_USER_PROVISIONING" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity-alias> <activity-alias android:name="com.android.devicelockcontroller.activities.DeviceFinancingDeferredProvisioningLandingActivity" android:exported="false" android:targetActivity=".activities.LandingActivity"> <intent-filter> <action android:name="com.android.devicelockcontroller.action.START_DEVICE_FINANCING_DEFERRED_PROVISIONING" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity-alias> <activity-alias android:name="com.android.devicelockcontroller.activities.DeviceSubsidyProvisioningLandingActivity" android:exported="false" android:targetActivity=".activities.LandingActivity"> <intent-filter> <action android:name="com.android.devicelockcontroller.action.START_DEVICE_SUBSIDY_PROVISIONING" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity-alias> <activity-alias android:name="com.android.devicelockcontroller.activities.DeviceSubsidyDeferredProvisioningLandingActivity" android:exported="false" android:targetActivity=".activities.LandingActivity"> <intent-filter> <action android:name="com.android.devicelockcontroller.action.START_DEVICE_SUBSIDY_DEFERRED_PROVISIONING" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity-alias> <activity android:name="com.android.devicelockcontroller.activities.DeviceLockSettingsActivity" android:theme="@style/Theme.DeviceLock.NoActionBar" android:exported="true"> <intent-filter> <action android:name="com.android.devicelockcontroller.action.DEVICE_INFO_SETTINGS"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove" /> <!-- System user only boot completed broadcast receiver. This should disabled after provision ready --> <receiver android:name="com.android.devicelockcontroller.receivers.CheckInBootCompletedReceiver" android:exported="false" androidprv:systemUserOnly="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <!-- Multi users boot completed broadcast receiver. --> <receiver android:name="com.android.devicelockcontroller.receivers.FinalizationBootCompletedReceiver" android:exported="false" android:singleUser="false" android:enabled="false"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <!-- Multi users locked boot completed broadcast receiver. This receiver should only be enabled after provision ready --> <receiver android:name="com.android.devicelockcontroller.receivers.LockedBootCompletedReceiver" android:directBootAware="true" android:enabled="false" android:exported="false" android:singleUser="false"> <intent-filter> <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" /> </intent-filter> </receiver> <!-- Multi users locked boot completed broadcast receiver. This receiver records the boot timestamp --> <receiver android:name="com.android.devicelockcontroller.receivers.RecordBootTimestampReceiver" android:directBootAware="true" android:exported="false" android:singleUser="false"> <intent-filter> <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" /> </intent-filter> </receiver> <!-- Multi users time changed broadcast receiver --> <receiver android:name="com.android.devicelockcontroller.receivers.TimeChangedBroadcastReceiver" android:exported="false" android:singleUser="false"> <intent-filter> <action android:name="android.intent.action.TIME_SET" /> </intent-filter> </receiver> <receiver android:name="com.android.devicelockcontroller.receivers.ProvisionReadyReceiver" android:exported="false" android:singleUser="false" /> <receiver android:name="com.android.devicelockcontroller.receivers.ResumeProvisionReceiver" android:exported="false" android:singleUser="false" /> <receiver android:name="com.android.devicelockcontroller.receivers.NextProvisionFailedStepReceiver" android:exported="false" android:singleUser="false" /> <receiver android:name="com.android.devicelockcontroller.receivers.ResetDeviceReceiver" android:exported="false" android:singleUser="false" /> <receiver android:name="com.android.devicelockcontroller.WorkManagerExceptionHandler$WorkFailureAlarmReceiver" android:exported="false" androidprv:systemUserOnly="true" /> <service android:name="com.android.devicelockcontroller.DeviceLockControllerService" android:directBootAware="true" android:exported="false"> <intent-filter> <action android:name="android.app.action.DEVICE_LOCK_CONTROLLER_SERVICE" /> </intent-filter> </service> <service android:name="com.android.devicelockcontroller.storage.SetupParametersService" android:directBootAware="true" android:exported="false" android:singleUser="true" /> <service android:name="com.android.devicelockcontroller.storage.GlobalParametersService" android:directBootAware="true" android:exported="false" android:singleUser="true" /> <service android:name="com.android.devicelockcontroller.services.DeviceLockKeepAliveService" android:directBootAware="true" android:exported="false"> <intent-filter> <action android:name="com.android.devicelock.action.KEEPALIVE" /> </intent-filter> </service> </application> </manifest>