1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.devicelockcontroller.common; 18 19 import android.content.Context; 20 21 import androidx.annotation.IntDef; 22 23 import java.lang.annotation.ElementType; 24 import java.lang.annotation.Retention; 25 import java.lang.annotation.RetentionPolicy; 26 import java.lang.annotation.Target; 27 28 /** Constants being used by more than one class in the Device Lock application. */ 29 public final class DeviceLockConstants { 30 31 public static final String KEY_KIOSK_APP_INSTALLED = "devicelock_kiosk_app_installed"; 32 33 // Constants related to unique device identifiers. 34 @Retention(RetentionPolicy.SOURCE) 35 @IntDef(value = { 36 DeviceIdType.DEVICE_ID_TYPE_UNSPECIFIED, 37 DeviceIdType.DEVICE_ID_TYPE_IMEI, 38 DeviceIdType.DEVICE_ID_TYPE_MEID, 39 }) 40 public @interface DeviceIdType { 41 // The device id type is unspecified 42 int DEVICE_ID_TYPE_UNSPECIFIED = -1; 43 // The device id is a IMEI 44 int DEVICE_ID_TYPE_IMEI = 0; 45 // The device id is a MEID 46 int DEVICE_ID_TYPE_MEID = 1; 47 } 48 49 @DeviceIdType 50 private static final int LAST_DEVICE_ID_TYPE = DeviceIdType.DEVICE_ID_TYPE_MEID; 51 public static final int TOTAL_DEVICE_ID_TYPES = LAST_DEVICE_ID_TYPE + 1; 52 53 // Constants related to unique device identifiers. 54 @Retention(RetentionPolicy.SOURCE) 55 @IntDef(value = { 56 STATUS_UNSPECIFIED, 57 RETRY_CHECK_IN, 58 READY_FOR_PROVISION, 59 STOP_CHECK_IN, 60 }) 61 public @interface DeviceCheckInStatus { 62 } 63 64 public static final int STATUS_UNSPECIFIED = 0; 65 public static final int RETRY_CHECK_IN = 1; 66 public static final int READY_FOR_PROVISION = 2; 67 public static final int STOP_CHECK_IN = 3; 68 69 @Retention(RetentionPolicy.SOURCE) 70 @IntDef(value = { 71 REASON_UNSPECIFIED, 72 USER_DEFERRED_DEVICE_PROVISIONING, 73 }) 74 public @interface PauseDeviceProvisioningReason { 75 } 76 77 public static final int REASON_UNSPECIFIED = 0; 78 public static final int USER_DEFERRED_DEVICE_PROVISIONING = 1; 79 80 @Target(ElementType.TYPE_USE) 81 @Retention(RetentionPolicy.SOURCE) 82 @IntDef(value = { 83 ProvisioningType.TYPE_UNDEFINED, 84 ProvisioningType.TYPE_FINANCED, 85 ProvisioningType.TYPE_SUBSIDY, 86 }) 87 public @interface ProvisioningType { 88 int TYPE_UNDEFINED = 0; 89 int TYPE_FINANCED = 1; 90 int TYPE_SUBSIDY = 2; 91 } 92 93 public static final String EXTRA_KIOSK_PACKAGE = 94 "com.android.devicelockcontroller.KIOSK_PACKAGE"; 95 public static final String EXTRA_KIOSK_SETUP_ACTIVITY = 96 "com.android.devicelockcontroller.KIOSK_SETUP_ACTIVITY"; 97 public static final String EXTRA_KIOSK_DISABLE_OUTGOING_CALLS = 98 "com.android.devicelockcontroller.KIOSK_DISABLE_OUTGOING_CALLS"; 99 /** 100 * Used to control if notifications are enabled in lock task mode. The default value is false. 101 * 102 * @see android.app.admin.DevicePolicyManager#LOCK_TASK_FEATURE_NOTIFICATIONS 103 */ 104 public static final String EXTRA_KIOSK_ENABLE_NOTIFICATIONS_IN_LOCK_TASK_MODE = 105 "com.android.devicelockcontroller.KIOSK_ENABLE_NOTIFICATIONS_IN_LOCK_TASK_MODE"; 106 public static final String EXTRA_KIOSK_ALLOWLIST = 107 "com.android.devicelockcontroller.KIOSK_ALLOWLIST"; 108 public static final String EXTRA_PROVISIONING_TYPE = 109 "com.android.devicelockcontroller.PROVISIONING_TYPE"; 110 public static final String EXTRA_MANDATORY_PROVISION = 111 "com.android.devicelockcontroller.MANDATORY_PROVISION"; 112 public static final String EXTRA_KIOSK_APP_PROVIDER_NAME = 113 "com.android.devicelockcontroller.KIOSK_APP_PROVIDER_NAME"; 114 public static final String EXTRA_DISALLOW_INSTALLING_FROM_UNKNOWN_SOURCES = 115 "com.android.devicelockcontroller.DISALLOW_INSTALLING_FROM_UNKNOWN_SOURCES"; 116 117 public static final String EXTRA_TERMS_AND_CONDITIONS_URL = 118 "com.android.devicelockcontroller.TERMS_AND_CONDITIONS_URL"; 119 120 public static final String EXTRA_SUPPORT_URL = "com.android.devicelockcontroller.SUPPORT_URL"; 121 122 public static final String ACTION_START_DEVICE_FINANCING_PROVISIONING = 123 "com.android.devicelockcontroller.action.START_DEVICE_FINANCING_PROVISIONING"; 124 public static final String ACTION_START_DEVICE_FINANCING_DEFERRED_PROVISIONING = 125 "com.android.devicelockcontroller.action.START_DEVICE_FINANCING_DEFERRED_PROVISIONING"; 126 127 public static final String ACTION_START_DEVICE_FINANCING_SECONDARY_USER_PROVISIONING = 128 "com.android.devicelockcontroller.action" 129 + ".START_DEVICE_FINANCING_SECONDARY_USER_PROVISIONING"; 130 131 public static final String ACTION_START_DEVICE_SUBSIDY_PROVISIONING = 132 "com.android.devicelockcontroller.action.START_DEVICE_SUBSIDY_PROVISIONING"; 133 134 public static final String ACTION_START_DEVICE_SUBSIDY_DEFERRED_PROVISIONING = 135 "com.android.devicelockcontroller.action.START_DEVICE_SUBSIDY_DEFERRED_PROVISIONING"; 136 137 public static final String ACTION_DEVICE_FINANCING_PROVISION_NOT_REQUIRED = 138 "com.android.devicelockcontroller.action.DEVICE_FINANCING_PROVISION_NOT_REQUIRED"; 139 140 public static final String ACTION_DEVICE_SUBSIDY_PROVISION_NOT_REQUIRED = 141 "com.android.devicelockcontroller.action.DEVICE_SUBSIDY_PROVISION_NOT_REQUIRED"; 142 143 public static final String ACTION_START_DEVICE_FINANCING_ENROLLMENT = 144 "com.android.devicelockcontroller.action.START_DEVICE_FINANCING_ENROLLMENT"; 145 146 public static final String ACTION_START_DEVICE_SUBSIDY_ENROLLMENT = 147 "com.android.devicelockcontroller.action.START_DEVICE_SUBSIDY_ENROLLMENT"; 148 149 /** Uses the package name of {@link Context#getPackageName()} to return the landing activity. */ getLandingActivity(Context context)150 public static String getLandingActivity(Context context) { 151 return context.getPackageName() + "/" 152 + "com.android.devicelockcontroller.activities.LandingActivity"; 153 } 154 155 /** Definitions for setup failure types. */ 156 @Retention(RetentionPolicy.SOURCE) 157 @IntDef( 158 value = { 159 SetupFailureReason.SETUP_FAILED, 160 SetupFailureReason.DOWNLOAD_FAILED, 161 SetupFailureReason.VERIFICATION_FAILED, 162 SetupFailureReason.INSTALL_FAILED, 163 SetupFailureReason.PACKAGE_DOES_NOT_EXIST, 164 SetupFailureReason.DELETE_PACKAGE_FAILED, 165 SetupFailureReason.INSTALL_EXISTING_FAILED, 166 }) 167 public @interface SetupFailureReason { 168 /** Setup failed to complete */ 169 int SETUP_FAILED = 0; 170 /** Failed to download the creditor apk. */ 171 int DOWNLOAD_FAILED = 1; 172 /** Verification of the creditor apk failed. */ 173 int VERIFICATION_FAILED = 2; 174 /** Failed to install the creditor apk. */ 175 int INSTALL_FAILED = 3; 176 /** Pre-installed package not found */ 177 int PACKAGE_DOES_NOT_EXIST = 4; 178 /** Delete apk failed */ 179 int DELETE_PACKAGE_FAILED = 5; 180 /** Install package for secondary users failed */ 181 int INSTALL_EXISTING_FAILED = 6; 182 } 183 184 /** Definitions for device provision states. */ 185 @Retention(RetentionPolicy.SOURCE) 186 @IntDef( 187 value = { 188 DeviceProvisionState.PROVISION_STATE_UNSPECIFIED, 189 DeviceProvisionState.PROVISION_STATE_RETRY, 190 DeviceProvisionState.PROVISION_STATE_DISMISSIBLE_UI, 191 DeviceProvisionState.PROVISION_STATE_PERSISTENT_UI, 192 DeviceProvisionState.PROVISION_STATE_FACTORY_RESET, 193 DeviceProvisionState.PROVISION_STATE_SUCCESS, 194 }) 195 public @interface DeviceProvisionState { 196 /** The provision state of the device is unspecified */ 197 int PROVISION_STATE_UNSPECIFIED = 0; 198 /** The Device need retry to provision the device. */ 199 int PROVISION_STATE_RETRY = 1; 200 /** 201 * The Device need inform the user that there has been an issue with device provisioning. 202 * The user can dismiss this. 203 */ 204 int PROVISION_STATE_DISMISSIBLE_UI = 2; 205 /** 206 * The Device need inform the user that there has been an issue with device provisioning. 207 * The user cannot dismiss this. 208 */ 209 int PROVISION_STATE_PERSISTENT_UI = 3; 210 /** The Device need factory reset because device provisioning could not be done. */ 211 int PROVISION_STATE_FACTORY_RESET = 4; 212 /** Device provisioning was a success. */ 213 int PROVISION_STATE_SUCCESS = 5; 214 } 215 216 /** Restrict instantiation. */ DeviceLockConstants()217 private DeviceLockConstants() { 218 } 219 } 220