1d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn/* 2d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Copyright (C) 2010 The Android Open Source Project 3d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * 4d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * you may not use this file except in compliance with the License. 6d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * You may obtain a copy of the License at 7d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * 8d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * 10d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Unless required by applicable law or agreed to in writing, software 11d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * See the License for the specific language governing permissions and 14d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * limitations under the License. 15d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 16d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 1787bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackbornpackage android.app.admin; 18d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 19d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport org.xmlpull.v1.XmlPullParser; 20d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport org.xmlpull.v1.XmlPullParserException; 2121f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackbornimport org.xmlpull.v1.XmlSerializer; 22d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 23f85c97741485a53c1cca5d9d6192a9436d91a044Xiaohui Chenimport android.annotation.NonNull; 24d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.content.ComponentName; 25d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.content.Context; 26d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.content.pm.ActivityInfo; 278aa2e8939c61d788cbc192098465e79f584e173aDianne Hackbornimport android.content.pm.ApplicationInfo; 28d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.content.pm.PackageManager; 29d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.content.pm.ResolveInfo; 3020cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackbornimport android.content.pm.PackageManager.NameNotFoundException; 3120cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackbornimport android.content.res.Resources; 32d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.content.res.TypedArray; 33d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.content.res.XmlResourceParser; 348aa2e8939c61d788cbc192098465e79f584e173aDianne Hackbornimport android.content.res.Resources.NotFoundException; 35d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.graphics.drawable.Drawable; 36d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.os.Parcel; 37d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.os.Parcelable; 38d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.util.AttributeSet; 398aa2e8939c61d788cbc192098465e79f584e173aDianne Hackbornimport android.util.Log; 40d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.util.Printer; 418aa2e8939c61d788cbc192098465e79f584e173aDianne Hackbornimport android.util.SparseArray; 42d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.util.Xml; 43d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 44d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport java.io.IOException; 458aa2e8939c61d788cbc192098465e79f584e173aDianne Hackbornimport java.util.ArrayList; 468aa2e8939c61d788cbc192098465e79f584e173aDianne Hackbornimport java.util.HashMap; 47d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 48d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn/** 49d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * This class is used to specify meta information of a device administrator 50d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * component. 51d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 52d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornpublic final class DeviceAdminInfo implements Parcelable { 53d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn static final String TAG = "DeviceAdminInfo"; 54b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 55d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 565c921daa72c6915d036a03b3bda91725a3e30539Robin Lee * A type of policy that this device admin can use: device owner meta-policy 575c921daa72c6915d036a03b3bda91725a3e30539Robin Lee * for an admin that is designated as owner of the device. 585c921daa72c6915d036a03b3bda91725a3e30539Robin Lee * 595c921daa72c6915d036a03b3bda91725a3e30539Robin Lee * @hide 605c921daa72c6915d036a03b3bda91725a3e30539Robin Lee */ 615c921daa72c6915d036a03b3bda91725a3e30539Robin Lee public static final int USES_POLICY_DEVICE_OWNER = -2; 625c921daa72c6915d036a03b3bda91725a3e30539Robin Lee 635c921daa72c6915d036a03b3bda91725a3e30539Robin Lee /** 645c921daa72c6915d036a03b3bda91725a3e30539Robin Lee * A type of policy that this device admin can use: profile owner meta-policy 655c921daa72c6915d036a03b3bda91725a3e30539Robin Lee * for admins that have been installed as owner of some user profile. 665c921daa72c6915d036a03b3bda91725a3e30539Robin Lee * 675c921daa72c6915d036a03b3bda91725a3e30539Robin Lee * @hide 685c921daa72c6915d036a03b3bda91725a3e30539Robin Lee */ 695c921daa72c6915d036a03b3bda91725a3e30539Robin Lee public static final int USES_POLICY_PROFILE_OWNER = -1; 705c921daa72c6915d036a03b3bda91725a3e30539Robin Lee 715c921daa72c6915d036a03b3bda91725a3e30539Robin Lee /** 728aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * A type of policy that this device admin can use: limit the passwords 739327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn * that the user can select, via {@link DevicePolicyManager#setPasswordQuality} 74254cb446faa7cb13699d8150eb4cc4f44cb61a2dDianne Hackborn * and {@link DevicePolicyManager#setPasswordMinimumLength}. 75b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 768aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * <p>To control this policy, the device admin must have a "limit-password" 778aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * tag in the "uses-policies" section of its meta-data. 788aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 798aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public static final int USES_POLICY_LIMIT_PASSWORD = 0; 80b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 818aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 828aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * A type of policy that this device admin can use: able to watch login 83ef6b22fc04a8d5ab26e13efac8069c097e0da7c9Dianne Hackborn * attempts from the user, via {@link DeviceAdminReceiver#ACTION_PASSWORD_FAILED}, 84ef6b22fc04a8d5ab26e13efac8069c097e0da7c9Dianne Hackborn * {@link DeviceAdminReceiver#ACTION_PASSWORD_SUCCEEDED}, and 858aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * {@link DevicePolicyManager#getCurrentFailedPasswordAttempts}. 86b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 878aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * <p>To control this policy, the device admin must have a "watch-login" 888aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * tag in the "uses-policies" section of its meta-data. 898aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 908aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public static final int USES_POLICY_WATCH_LOGIN = 1; 918aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn 928aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 938aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * A type of policy that this device admin can use: able to reset the 948aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * user's password via 958aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * {@link DevicePolicyManager#resetPassword}. 96b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 978aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * <p>To control this policy, the device admin must have a "reset-password" 988aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * tag in the "uses-policies" section of its meta-data. 998aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 1008aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public static final int USES_POLICY_RESET_PASSWORD = 2; 1018aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn 1028aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 103315ada7fbb9e967c22e87b4921bec720ceb2c73cDianne Hackborn * A type of policy that this device admin can use: able to force the device 104315ada7fbb9e967c22e87b4921bec720ceb2c73cDianne Hackborn * to lock via{@link DevicePolicyManager#lockNow} or limit the 1058aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * maximum lock timeout for the device via 1068aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * {@link DevicePolicyManager#setMaximumTimeToLock}. 107b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 1088aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * <p>To control this policy, the device admin must have a "force-lock" 1098aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * tag in the "uses-policies" section of its meta-data. 1108aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 111315ada7fbb9e967c22e87b4921bec720ceb2c73cDianne Hackborn public static final int USES_POLICY_FORCE_LOCK = 3; 1128aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn 1138aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 1148aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * A type of policy that this device admin can use: able to factory 1158aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * reset the device, erasing all of the user's data, via 1168aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * {@link DevicePolicyManager#wipeData}. 117b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 1188aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * <p>To control this policy, the device admin must have a "wipe-data" 1198aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * tag in the "uses-policies" section of its meta-data. 1208aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 121315ada7fbb9e967c22e87b4921bec720ceb2c73cDianne Hackborn public static final int USES_POLICY_WIPE_DATA = 4; 1228aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn 12369238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor /** 12469238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor * A type of policy that this device admin can use: able to specify the 12569238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor * device Global Proxy, via {@link DevicePolicyManager#setGlobalProxy}. 12669238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor * 12769238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor * <p>To control this policy, the device admin must have a "set-global-proxy" 12869238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor * tag in the "uses-policies" section of its meta-data. 129d26727273d16745ceddc2203121d29c3a9e7733cAndy Stadler * @hide 13069238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor */ 13169238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor public static final int USES_POLICY_SETS_GLOBAL_PROXY = 5; 13269238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor 133a4e28d181942018ba8759989799a28fa88764ce3Jim Miller /** 134a4e28d181942018ba8759989799a28fa88764ce3Jim Miller * A type of policy that this device admin can use: force the user to 135a4e28d181942018ba8759989799a28fa88764ce3Jim Miller * change their password after an administrator-defined time limit. 136a4e28d181942018ba8759989799a28fa88764ce3Jim Miller * 137a4e28d181942018ba8759989799a28fa88764ce3Jim Miller * <p>To control this policy, the device admin must have an "expire-password" 138a4e28d181942018ba8759989799a28fa88764ce3Jim Miller * tag in the "uses-policies" section of its meta-data. 139a4e28d181942018ba8759989799a28fa88764ce3Jim Miller */ 140a4e28d181942018ba8759989799a28fa88764ce3Jim Miller public static final int USES_POLICY_EXPIRE_PASSWORD = 6; 141a4e28d181942018ba8759989799a28fa88764ce3Jim Miller 1427b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler /** 1437b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler * A type of policy that this device admin can use: require encryption of stored data. 1447b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler * 1457b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler * <p>To control this policy, the device admin must have a "encrypted-storage" 1467b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler * tag in the "uses-policies" section of its meta-data. 1477b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler */ 1487b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler public static final int USES_ENCRYPTED_STORAGE = 7; 1497b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler 1502447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo /** 1512447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo * A type of policy that this device admin can use: disables use of all device cameras. 1522447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo * 1532447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo * <p>To control this policy, the device admin must have a "disable-camera" 1542447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo * tag in the "uses-policies" section of its meta-data. 1552447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo */ 1562447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo public static final int USES_POLICY_DISABLE_CAMERA = 8; 1572447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo 158b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller /** 1597ed189e457b16c06b0425bd28aeeb1df5c8ff5b8Scott Kennedy * A type of policy that this device admin can use: disables use of keyguard features. 160b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 1617ed189e457b16c06b0425bd28aeeb1df5c8ff5b8Scott Kennedy * <p>To control this policy, the device admin must have a "disable-keyguard-features" 162b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * tag in the "uses-policies" section of its meta-data. 163b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller */ 16448b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller public static final int USES_POLICY_DISABLE_KEYGUARD_FEATURES = 9; 165b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 1668aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** @hide */ 1678aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public static class PolicyInfo { 1688ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn public final int ident; 169b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov public final String tag; 170b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov public final int label; 171b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov public final int description; 172b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov public final int labelForSecondaryUsers; 173b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov public final int descriptionForSecondaryUsers; 174b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov 175b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov public PolicyInfo(int ident, String tag, int label, int description) { 176b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov this(ident, tag, label, description, label, description); 177b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov } 178b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov 179b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov public PolicyInfo(int ident, String tag, int label, int description, 180b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov int labelForSecondaryUsers, int descriptionForSecondaryUsers) { 181b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov this.ident = ident; 182b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov this.tag = tag; 183b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov this.label = label; 184b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov this.description = description; 185b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov this.labelForSecondaryUsers = labelForSecondaryUsers; 186b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov this.descriptionForSecondaryUsers = descriptionForSecondaryUsers; 1878aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 1888aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 189b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 1908ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn static ArrayList<PolicyInfo> sPoliciesDisplayOrder = new ArrayList<PolicyInfo>(); 1918aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn static HashMap<String, Integer> sKnownPolicies = new HashMap<String, Integer>(); 1928aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn static SparseArray<PolicyInfo> sRevKnownPolicies = new SparseArray<PolicyInfo>(); 193b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 1948aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn static { 1958ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_WIPE_DATA, "wipe-data", 1968ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policylab_wipeData, 197b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov com.android.internal.R.string.policydesc_wipeData, 198b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov com.android.internal.R.string.policylab_wipeData_secondaryUser, 199b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov com.android.internal.R.string.policydesc_wipeData_secondaryUser 200b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov )); 2018ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_RESET_PASSWORD, "reset-password", 2028ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policylab_resetPassword, 2038ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policydesc_resetPassword)); 2048ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_LIMIT_PASSWORD, "limit-password", 2058ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policylab_limitPassword, 2068ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policydesc_limitPassword)); 2078ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_WATCH_LOGIN, "watch-login", 2088ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policylab_watchLogin, 209b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov com.android.internal.R.string.policydesc_watchLogin, 210b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov com.android.internal.R.string.policylab_watchLogin, 211b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov com.android.internal.R.string.policydesc_watchLogin_secondaryUser 212b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov )); 2138ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_FORCE_LOCK, "force-lock", 2148ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policylab_forceLock, 2158ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policydesc_forceLock)); 21669238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_SETS_GLOBAL_PROXY, "set-global-proxy", 21769238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor com.android.internal.R.string.policylab_setGlobalProxy, 21869238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor com.android.internal.R.string.policydesc_setGlobalProxy)); 219a4e28d181942018ba8759989799a28fa88764ce3Jim Miller sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_EXPIRE_PASSWORD, "expire-password", 220a4e28d181942018ba8759989799a28fa88764ce3Jim Miller com.android.internal.R.string.policylab_expirePassword, 221a4e28d181942018ba8759989799a28fa88764ce3Jim Miller com.android.internal.R.string.policydesc_expirePassword)); 2227b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler sPoliciesDisplayOrder.add(new PolicyInfo(USES_ENCRYPTED_STORAGE, "encrypted-storage", 2237b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler com.android.internal.R.string.policylab_encryptedStorage, 2247b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler com.android.internal.R.string.policydesc_encryptedStorage)); 2252447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_DISABLE_CAMERA, "disable-camera", 2262447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo com.android.internal.R.string.policylab_disableCamera, 2272447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo com.android.internal.R.string.policydesc_disableCamera)); 228b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller sPoliciesDisplayOrder.add(new PolicyInfo( 22948b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller USES_POLICY_DISABLE_KEYGUARD_FEATURES, "disable-keyguard-features", 23048b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller com.android.internal.R.string.policylab_disableKeyguardFeatures, 23148b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller com.android.internal.R.string.policydesc_disableKeyguardFeatures)); 232a4e28d181942018ba8759989799a28fa88764ce3Jim Miller 2338ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn for (int i=0; i<sPoliciesDisplayOrder.size(); i++) { 2348ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn PolicyInfo pi = sPoliciesDisplayOrder.get(i); 2358ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn sRevKnownPolicies.put(pi.ident, pi); 2368ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn sKnownPolicies.put(pi.tag, pi.ident); 2378aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 2388aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 239b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 2408aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 241d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * The BroadcastReceiver that implements this device admin component. 242d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 243889c0880661bda16e3759995e03766ddf0350732Makoto Onuki final ActivityInfo mActivityInfo; 244b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 245d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 24687bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn * Whether this should be visible to the user. 24787bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn */ 24887bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn boolean mVisible; 249b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 25087bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn /** 2518aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * The policies this administrator needs access to. 2528aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 2538aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn int mUsesPolicies; 254b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 255889c0880661bda16e3759995e03766ddf0350732Makoto Onuki 256889c0880661bda16e3759995e03766ddf0350732Makoto Onuki /** 257889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * Constructor. 258889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * 259889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * @param context The Context in which we are parsing the device admin. 260889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * @param resolveInfo The ResolveInfo returned from the package manager about 261889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * this device admin's component. 262889c0880661bda16e3759995e03766ddf0350732Makoto Onuki */ 263889c0880661bda16e3759995e03766ddf0350732Makoto Onuki public DeviceAdminInfo(Context context, ResolveInfo resolveInfo) 264889c0880661bda16e3759995e03766ddf0350732Makoto Onuki throws XmlPullParserException, IOException { 265889c0880661bda16e3759995e03766ddf0350732Makoto Onuki this(context, resolveInfo.activityInfo); 266889c0880661bda16e3759995e03766ddf0350732Makoto Onuki } 2678aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 268d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Constructor. 269b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 270d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * @param context The Context in which we are parsing the device admin. 271889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * @param activityInfo The ActivityInfo returned from the package manager about 272d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * this device admin's component. 273889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * 274889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * @hide 275d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 276889c0880661bda16e3759995e03766ddf0350732Makoto Onuki public DeviceAdminInfo(Context context, ActivityInfo activityInfo) 277d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn throws XmlPullParserException, IOException { 278889c0880661bda16e3759995e03766ddf0350732Makoto Onuki mActivityInfo = activityInfo; 279b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 280d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn PackageManager pm = context.getPackageManager(); 281b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 282d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn XmlResourceParser parser = null; 283d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn try { 284889c0880661bda16e3759995e03766ddf0350732Makoto Onuki parser = mActivityInfo.loadXmlMetaData(pm, DeviceAdminReceiver.DEVICE_ADMIN_META_DATA); 285d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn if (parser == null) { 286d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn throw new XmlPullParserException("No " 287ef6b22fc04a8d5ab26e13efac8069c097e0da7c9Dianne Hackborn + DeviceAdminReceiver.DEVICE_ADMIN_META_DATA + " meta-data"); 288d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 289b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 290889c0880661bda16e3759995e03766ddf0350732Makoto Onuki Resources res = pm.getResourcesForApplication(mActivityInfo.applicationInfo); 291b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 292d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn AttributeSet attrs = Xml.asAttributeSet(parser); 293b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 294d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn int type; 295d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn while ((type=parser.next()) != XmlPullParser.END_DOCUMENT 296d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn && type != XmlPullParser.START_TAG) { 297d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 298b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 299d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn String nodeName = parser.getName(); 300d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn if (!"device-admin".equals(nodeName)) { 301d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn throw new XmlPullParserException( 302d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn "Meta-data does not start with device-admin tag"); 303d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 304b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 30520cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn TypedArray sa = res.obtainAttributes(attrs, 30687bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn com.android.internal.R.styleable.DeviceAdmin); 307d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 30887bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn mVisible = sa.getBoolean( 30987bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn com.android.internal.R.styleable.DeviceAdmin_visible, true); 310b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 311d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn sa.recycle(); 312b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 3138aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn int outerDepth = parser.getDepth(); 3148aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn while ((type=parser.next()) != XmlPullParser.END_DOCUMENT 3158aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) { 3168aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { 3178aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn continue; 3188aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 3198aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn String tagName = parser.getName(); 3208aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn if (tagName.equals("uses-policies")) { 3218aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn int innerDepth = parser.getDepth(); 3228aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn while ((type=parser.next()) != XmlPullParser.END_DOCUMENT 3238aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) { 3248aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { 3258aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn continue; 3268aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 3278aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn String policyName = parser.getName(); 3288aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn Integer val = sKnownPolicies.get(policyName); 3298aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn if (val != null) { 3308aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn mUsesPolicies |= 1 << val.intValue(); 3318aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } else { 3328aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn Log.w(TAG, "Unknown tag under uses-policies of " 3338aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn + getComponent() + ": " + policyName); 3348aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 3358aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 3368aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 3378aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 33820cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn } catch (NameNotFoundException e) { 33920cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn throw new XmlPullParserException( 340889c0880661bda16e3759995e03766ddf0350732Makoto Onuki "Unable to create context for: " + mActivityInfo.packageName); 341d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } finally { 342d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn if (parser != null) parser.close(); 343d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 344d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 345d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 346d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn DeviceAdminInfo(Parcel source) { 347889c0880661bda16e3759995e03766ddf0350732Makoto Onuki mActivityInfo = ActivityInfo.CREATOR.createFromParcel(source); 3488aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn mUsesPolicies = source.readInt(); 349d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 350b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 351d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 352d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Return the .apk package that implements this device admin. 353d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 354d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public String getPackageName() { 355889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return mActivityInfo.packageName; 356d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 357b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 358d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 359d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Return the class name of the receiver component that implements 360d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * this device admin. 361d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 362d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public String getReceiverName() { 363889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return mActivityInfo.name; 364d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 365d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 366d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 367d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Return the raw information about the receiver implementing this 368d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * device admin. Do not modify the returned object. 369d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 370d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public ActivityInfo getActivityInfo() { 371889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return mActivityInfo; 372d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 373d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 374d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 375d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Return the component of the receiver that implements this device admin. 376d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 377f85c97741485a53c1cca5d9d6192a9436d91a044Xiaohui Chen @NonNull 378d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public ComponentName getComponent() { 379889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return new ComponentName(mActivityInfo.packageName, 380889c0880661bda16e3759995e03766ddf0350732Makoto Onuki mActivityInfo.name); 381d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 382b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 383d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 384d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Load the user-displayed label for this device admin. 385b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 386d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * @param pm Supply a PackageManager used to load the device admin's 387d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * resources. 388d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 389d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public CharSequence loadLabel(PackageManager pm) { 390889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return mActivityInfo.loadLabel(pm); 391d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 392b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 393d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 3948aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * Load user-visible description associated with this device admin. 395b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 3968aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * @param pm Supply a PackageManager used to load the device admin's 3978aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * resources. 3988aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 3998aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public CharSequence loadDescription(PackageManager pm) throws NotFoundException { 400889c0880661bda16e3759995e03766ddf0350732Makoto Onuki if (mActivityInfo.descriptionRes != 0) { 401889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return pm.getText(mActivityInfo.packageName, 402889c0880661bda16e3759995e03766ddf0350732Makoto Onuki mActivityInfo.descriptionRes, mActivityInfo.applicationInfo); 4038aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 4048aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn throw new NotFoundException(); 4058aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 406b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 4078aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 408d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Load the user-displayed icon for this device admin. 409b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 410d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * @param pm Supply a PackageManager used to load the device admin's 411d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * resources. 412d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 413d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public Drawable loadIcon(PackageManager pm) { 414889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return mActivityInfo.loadIcon(pm); 415d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 416b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 4178aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 41887bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn * Returns whether this device admin would like to be visible to the 41987bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn * user, even when it is not enabled. 42087bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn */ 42187bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn public boolean isVisible() { 42287bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn return mVisible; 42387bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn } 424b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 42587bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn /** 4268aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * Return true if the device admin has requested that it be able to use 4278aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * the given policy control. The possible policy identifier inputs are: 4288aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * {@link #USES_POLICY_LIMIT_PASSWORD}, {@link #USES_POLICY_WATCH_LOGIN}, 429dc2df328b3c854c7b787bf5298df0c686584125dRaphael * {@link #USES_POLICY_RESET_PASSWORD}, {@link #USES_POLICY_FORCE_LOCK}, 430d26727273d16745ceddc2203121d29c3a9e7733cAndy Stadler * {@link #USES_POLICY_WIPE_DATA}, 4312447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo * {@link #USES_POLICY_EXPIRE_PASSWORD}, {@link #USES_ENCRYPTED_STORAGE}, 4322447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo * {@link #USES_POLICY_DISABLE_CAMERA}. 4338aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 4348aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public boolean usesPolicy(int policyIdent) { 4358aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn return (mUsesPolicies & (1<<policyIdent)) != 0; 4368aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 437b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 4388aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 4398aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * Return the XML tag name for the given policy identifier. Valid identifiers 4408aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * are as per {@link #usesPolicy(int)}. If the given identifier is not 4418aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * known, null is returned. 4428aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 4438aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public String getTagForPolicy(int policyIdent) { 4448aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn return sRevKnownPolicies.get(policyIdent).tag; 4458aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 446b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 4478aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** @hide */ 4488aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public ArrayList<PolicyInfo> getUsedPolicies() { 4498aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn ArrayList<PolicyInfo> res = new ArrayList<PolicyInfo>(); 4508ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn for (int i=0; i<sPoliciesDisplayOrder.size(); i++) { 4518ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn PolicyInfo pi = sPoliciesDisplayOrder.get(i); 4528ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (usesPolicy(pi.ident)) { 4538ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn res.add(pi); 4548aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 4558aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 4568aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn return res; 4578aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 458b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 45921f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn /** @hide */ 46021f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn public void writePoliciesToXml(XmlSerializer out) 46121f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn throws IllegalArgumentException, IllegalStateException, IOException { 46221f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn out.attribute(null, "flags", Integer.toString(mUsesPolicies)); 46321f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn } 464b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 46521f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn /** @hide */ 46621f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn public void readPoliciesFromXml(XmlPullParser parser) 46721f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn throws XmlPullParserException, IOException { 46821f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn mUsesPolicies = Integer.parseInt( 46921f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn parser.getAttributeValue(null, "flags")); 47021f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn } 471b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 472d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public void dump(Printer pw, String prefix) { 473d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn pw.println(prefix + "Receiver:"); 474889c0880661bda16e3759995e03766ddf0350732Makoto Onuki mActivityInfo.dump(pw, prefix + " "); 475d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 476b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 477d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn @Override 478d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public String toString() { 479889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return "DeviceAdminInfo{" + mActivityInfo.name + "}"; 480d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 481d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 482d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 483d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Used to package this object into a {@link Parcel}. 484b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 485d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * @param dest The {@link Parcel} to be written. 486d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * @param flags The flags used for parceling. 487d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 488d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public void writeToParcel(Parcel dest, int flags) { 489889c0880661bda16e3759995e03766ddf0350732Makoto Onuki mActivityInfo.writeToParcel(dest, flags); 4908aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn dest.writeInt(mUsesPolicies); 491d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 492d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 493d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 494d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Used to make this class parcelable. 495d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 496d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public static final Parcelable.Creator<DeviceAdminInfo> CREATOR = 497d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn new Parcelable.Creator<DeviceAdminInfo>() { 498d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public DeviceAdminInfo createFromParcel(Parcel source) { 499d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn return new DeviceAdminInfo(source); 500d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 501d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 502d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public DeviceAdminInfo[] newArray(int size) { 503d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn return new DeviceAdminInfo[size]; 504d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 505d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn }; 506d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 507d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public int describeContents() { 508d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn return 0; 509d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 510d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn} 511