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 19f85c97741485a53c1cca5d9d6192a9436d91a044Xiaohui Chenimport android.annotation.NonNull; 20d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.content.ComponentName; 21d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.content.Context; 22d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.content.pm.ActivityInfo; 23d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.content.pm.PackageManager; 2420cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackbornimport android.content.pm.PackageManager.NameNotFoundException; 25c8ee263d6ef37dae334e83dbe18654cff50d6153arangelovimport android.content.pm.ResolveInfo; 2620cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackbornimport android.content.res.Resources; 27c8ee263d6ef37dae334e83dbe18654cff50d6153arangelovimport android.content.res.Resources.NotFoundException; 28d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.content.res.TypedArray; 29d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.content.res.XmlResourceParser; 30d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.graphics.drawable.Drawable; 31d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.os.Parcel; 32d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.os.Parcelable; 33c8ee263d6ef37dae334e83dbe18654cff50d6153arangelovimport android.os.PersistableBundle; 34d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.util.AttributeSet; 358aa2e8939c61d788cbc192098465e79f584e173aDianne Hackbornimport android.util.Log; 36d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.util.Printer; 378aa2e8939c61d788cbc192098465e79f584e173aDianne Hackbornimport android.util.SparseArray; 38d68478467e3f837511196c80891d7245d0e163dfDianne Hackbornimport android.util.Xml; 39d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 40c8ee263d6ef37dae334e83dbe18654cff50d6153arangelovimport org.xmlpull.v1.XmlPullParser; 41c8ee263d6ef37dae334e83dbe18654cff50d6153arangelovimport org.xmlpull.v1.XmlPullParserException; 42c8ee263d6ef37dae334e83dbe18654cff50d6153arangelovimport org.xmlpull.v1.XmlSerializer; 43c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov 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. 7817accc16ee6c6c06050f0147b9af948ae7b011aaEric Sandness * 7917accc16ee6c6c06050f0147b9af948ae7b011aaEric Sandness * <p>This policy is deprecated for use by a device admin. In future releases, it will 8017accc16ee6c6c06050f0147b9af948ae7b011aaEric Sandness * only be possible for a device owner or profile owner to enforce constraints on user 8117accc16ee6c6c06050f0147b9af948ae7b011aaEric Sandness * passwords. 828aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 838aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public static final int USES_POLICY_LIMIT_PASSWORD = 0; 84b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 858aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 868aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * A type of policy that this device admin can use: able to watch login 87ef6b22fc04a8d5ab26e13efac8069c097e0da7c9Dianne Hackborn * attempts from the user, via {@link DeviceAdminReceiver#ACTION_PASSWORD_FAILED}, 88ef6b22fc04a8d5ab26e13efac8069c097e0da7c9Dianne Hackborn * {@link DeviceAdminReceiver#ACTION_PASSWORD_SUCCEEDED}, and 898aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * {@link DevicePolicyManager#getCurrentFailedPasswordAttempts}. 90b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 918aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * <p>To control this policy, the device admin must have a "watch-login" 928aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * tag in the "uses-policies" section of its meta-data. 938aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 948aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public static final int USES_POLICY_WATCH_LOGIN = 1; 958aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn 968aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 978aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * A type of policy that this device admin can use: able to reset the 988aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * user's password via 998aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * {@link DevicePolicyManager#resetPassword}. 100b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 1018aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * <p>To control this policy, the device admin must have a "reset-password" 1028aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * tag in the "uses-policies" section of its meta-data. 1038aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 1048aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public static final int USES_POLICY_RESET_PASSWORD = 2; 1058aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn 1068aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 107315ada7fbb9e967c22e87b4921bec720ceb2c73cDianne Hackborn * A type of policy that this device admin can use: able to force the device 108315ada7fbb9e967c22e87b4921bec720ceb2c73cDianne Hackborn * to lock via{@link DevicePolicyManager#lockNow} or limit the 1098aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * maximum lock timeout for the device via 1108aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * {@link DevicePolicyManager#setMaximumTimeToLock}. 111b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 1128aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * <p>To control this policy, the device admin must have a "force-lock" 1138aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * tag in the "uses-policies" section of its meta-data. 1148aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 115315ada7fbb9e967c22e87b4921bec720ceb2c73cDianne Hackborn public static final int USES_POLICY_FORCE_LOCK = 3; 1168aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn 1178aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 1188aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * A type of policy that this device admin can use: able to factory 1198aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * reset the device, erasing all of the user's data, via 1208aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * {@link DevicePolicyManager#wipeData}. 121b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 1228aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * <p>To control this policy, the device admin must have a "wipe-data" 1238aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * tag in the "uses-policies" section of its meta-data. 1248aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 125315ada7fbb9e967c22e87b4921bec720ceb2c73cDianne Hackborn public static final int USES_POLICY_WIPE_DATA = 4; 1268aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn 12769238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor /** 12869238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor * A type of policy that this device admin can use: able to specify the 12969238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor * device Global Proxy, via {@link DevicePolicyManager#setGlobalProxy}. 13069238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor * 13169238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor * <p>To control this policy, the device admin must have a "set-global-proxy" 13269238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor * tag in the "uses-policies" section of its meta-data. 133d26727273d16745ceddc2203121d29c3a9e7733cAndy Stadler * @hide 13469238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor */ 13569238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor public static final int USES_POLICY_SETS_GLOBAL_PROXY = 5; 13669238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor 137a4e28d181942018ba8759989799a28fa88764ce3Jim Miller /** 138a4e28d181942018ba8759989799a28fa88764ce3Jim Miller * A type of policy that this device admin can use: force the user to 139a4e28d181942018ba8759989799a28fa88764ce3Jim Miller * change their password after an administrator-defined time limit. 140a4e28d181942018ba8759989799a28fa88764ce3Jim Miller * 141a4e28d181942018ba8759989799a28fa88764ce3Jim Miller * <p>To control this policy, the device admin must have an "expire-password" 142a4e28d181942018ba8759989799a28fa88764ce3Jim Miller * tag in the "uses-policies" section of its meta-data. 14317accc16ee6c6c06050f0147b9af948ae7b011aaEric Sandness * 14417accc16ee6c6c06050f0147b9af948ae7b011aaEric Sandness * <p>This policy is deprecated for use by a device admin. In future releases, it will 14517accc16ee6c6c06050f0147b9af948ae7b011aaEric Sandness * only be possible for a device owner or profile owner to enforce password expiry. 146a4e28d181942018ba8759989799a28fa88764ce3Jim Miller */ 147a4e28d181942018ba8759989799a28fa88764ce3Jim Miller public static final int USES_POLICY_EXPIRE_PASSWORD = 6; 148a4e28d181942018ba8759989799a28fa88764ce3Jim Miller 1497b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler /** 1507b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler * A type of policy that this device admin can use: require encryption of stored data. 1517b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler * 1527b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler * <p>To control this policy, the device admin must have a "encrypted-storage" 1537b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler * tag in the "uses-policies" section of its meta-data. 1547b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler */ 1557b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler public static final int USES_ENCRYPTED_STORAGE = 7; 1567b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler 1572447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo /** 1582447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo * A type of policy that this device admin can use: disables use of all device cameras. 1592447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo * 1602447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo * <p>To control this policy, the device admin must have a "disable-camera" 1612447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo * tag in the "uses-policies" section of its meta-data. 16217accc16ee6c6c06050f0147b9af948ae7b011aaEric Sandness * 16317accc16ee6c6c06050f0147b9af948ae7b011aaEric Sandness * <p>This policy is deprecated for use by a device admin. In future releases, it will 16417accc16ee6c6c06050f0147b9af948ae7b011aaEric Sandness * only be possible for a device owner or profile owner to disable use of the camera. 1652447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo */ 1662447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo public static final int USES_POLICY_DISABLE_CAMERA = 8; 1672447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo 168b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller /** 1697ed189e457b16c06b0425bd28aeeb1df5c8ff5b8Scott Kennedy * A type of policy that this device admin can use: disables use of keyguard features. 170b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 1717ed189e457b16c06b0425bd28aeeb1df5c8ff5b8Scott Kennedy * <p>To control this policy, the device admin must have a "disable-keyguard-features" 172b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * tag in the "uses-policies" section of its meta-data. 17317accc16ee6c6c06050f0147b9af948ae7b011aaEric Sandness * 17417accc16ee6c6c06050f0147b9af948ae7b011aaEric Sandness * <p>This policy is deprecated for use by a device admin. In future releases, it will 17517accc16ee6c6c06050f0147b9af948ae7b011aaEric Sandness * only be possible for a device owner or profile owner to disable use of keyguard 17617accc16ee6c6c06050f0147b9af948ae7b011aaEric Sandness * features. 177b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller */ 17848b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller public static final int USES_POLICY_DISABLE_KEYGUARD_FEATURES = 9; 179b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 1808aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** @hide */ 1818aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public static class PolicyInfo { 1828ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn public final int ident; 183b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov public final String tag; 184b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov public final int label; 185b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov public final int description; 186b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov public final int labelForSecondaryUsers; 187b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov public final int descriptionForSecondaryUsers; 188b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov 189b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov public PolicyInfo(int ident, String tag, int label, int description) { 190b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov this(ident, tag, label, description, label, description); 191b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov } 192b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov 193b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov public PolicyInfo(int ident, String tag, int label, int description, 194b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov int labelForSecondaryUsers, int descriptionForSecondaryUsers) { 195b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov this.ident = ident; 196b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov this.tag = tag; 197b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov this.label = label; 198b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov this.description = description; 199b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov this.labelForSecondaryUsers = labelForSecondaryUsers; 200b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov this.descriptionForSecondaryUsers = descriptionForSecondaryUsers; 2018aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 2028aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 203b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 2048ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn static ArrayList<PolicyInfo> sPoliciesDisplayOrder = new ArrayList<PolicyInfo>(); 2058aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn static HashMap<String, Integer> sKnownPolicies = new HashMap<String, Integer>(); 2068aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn static SparseArray<PolicyInfo> sRevKnownPolicies = new SparseArray<PolicyInfo>(); 207b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 2088aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn static { 2098ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_WIPE_DATA, "wipe-data", 2108ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policylab_wipeData, 211b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov com.android.internal.R.string.policydesc_wipeData, 212b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov com.android.internal.R.string.policylab_wipeData_secondaryUser, 213b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov com.android.internal.R.string.policydesc_wipeData_secondaryUser 214b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov )); 2158ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_RESET_PASSWORD, "reset-password", 2168ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policylab_resetPassword, 2178ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policydesc_resetPassword)); 2188ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_LIMIT_PASSWORD, "limit-password", 2198ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policylab_limitPassword, 2208ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policydesc_limitPassword)); 2218ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_WATCH_LOGIN, "watch-login", 2228ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policylab_watchLogin, 223b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov com.android.internal.R.string.policydesc_watchLogin, 224b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov com.android.internal.R.string.policylab_watchLogin, 225b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov com.android.internal.R.string.policydesc_watchLogin_secondaryUser 226b343d6db289fc9b8f5e0e36e707f01fb49cc49faFyodor Kupolov )); 2278ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_FORCE_LOCK, "force-lock", 2288ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policylab_forceLock, 2298ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn com.android.internal.R.string.policydesc_forceLock)); 23069238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_SETS_GLOBAL_PROXY, "set-global-proxy", 23169238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor com.android.internal.R.string.policylab_setGlobalProxy, 23269238c6a37ae43c748ad9cd7613f2209149ee7daOscar Montemayor com.android.internal.R.string.policydesc_setGlobalProxy)); 233a4e28d181942018ba8759989799a28fa88764ce3Jim Miller sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_EXPIRE_PASSWORD, "expire-password", 234a4e28d181942018ba8759989799a28fa88764ce3Jim Miller com.android.internal.R.string.policylab_expirePassword, 235a4e28d181942018ba8759989799a28fa88764ce3Jim Miller com.android.internal.R.string.policydesc_expirePassword)); 2367b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler sPoliciesDisplayOrder.add(new PolicyInfo(USES_ENCRYPTED_STORAGE, "encrypted-storage", 2377b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler com.android.internal.R.string.policylab_encryptedStorage, 2387b0f8f08ac7b3ed5cf462b92283713b033d6a64aAndy Stadler com.android.internal.R.string.policydesc_encryptedStorage)); 2392447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo sPoliciesDisplayOrder.add(new PolicyInfo(USES_POLICY_DISABLE_CAMERA, "disable-camera", 2402447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo com.android.internal.R.string.policylab_disableCamera, 2412447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo com.android.internal.R.string.policydesc_disableCamera)); 242b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller sPoliciesDisplayOrder.add(new PolicyInfo( 24348b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller USES_POLICY_DISABLE_KEYGUARD_FEATURES, "disable-keyguard-features", 24448b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller com.android.internal.R.string.policylab_disableKeyguardFeatures, 24548b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller com.android.internal.R.string.policydesc_disableKeyguardFeatures)); 246a4e28d181942018ba8759989799a28fa88764ce3Jim Miller 2478ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn for (int i=0; i<sPoliciesDisplayOrder.size(); i++) { 2488ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn PolicyInfo pi = sPoliciesDisplayOrder.get(i); 2498ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn sRevKnownPolicies.put(pi.ident, pi); 2508ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn sKnownPolicies.put(pi.tag, pi.ident); 2518aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 2528aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 253b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 2548aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 255d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * The BroadcastReceiver that implements this device admin component. 256d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 257889c0880661bda16e3759995e03766ddf0350732Makoto Onuki final ActivityInfo mActivityInfo; 258b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 259d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 26087bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn * Whether this should be visible to the user. 26187bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn */ 26287bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn boolean mVisible; 263b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 26487bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn /** 2658aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * The policies this administrator needs access to. 2668aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 2678aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn int mUsesPolicies; 268b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 269c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov /** 270c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov * Whether this administrator can be a target in an ownership transfer. 271c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov * 272c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov * @see DevicePolicyManager#transferOwnership(ComponentName, ComponentName, PersistableBundle) 273c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov */ 274c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov boolean mSupportsTransferOwnership; 275889c0880661bda16e3759995e03766ddf0350732Makoto Onuki 276889c0880661bda16e3759995e03766ddf0350732Makoto Onuki /** 277889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * Constructor. 278889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * 279889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * @param context The Context in which we are parsing the device admin. 280889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * @param resolveInfo The ResolveInfo returned from the package manager about 281889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * this device admin's component. 282889c0880661bda16e3759995e03766ddf0350732Makoto Onuki */ 283889c0880661bda16e3759995e03766ddf0350732Makoto Onuki public DeviceAdminInfo(Context context, ResolveInfo resolveInfo) 284889c0880661bda16e3759995e03766ddf0350732Makoto Onuki throws XmlPullParserException, IOException { 285889c0880661bda16e3759995e03766ddf0350732Makoto Onuki this(context, resolveInfo.activityInfo); 286889c0880661bda16e3759995e03766ddf0350732Makoto Onuki } 2878aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 288d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Constructor. 289b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 290d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * @param context The Context in which we are parsing the device admin. 291889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * @param activityInfo The ActivityInfo returned from the package manager about 292d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * this device admin's component. 293889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * 294889c0880661bda16e3759995e03766ddf0350732Makoto Onuki * @hide 295d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 296889c0880661bda16e3759995e03766ddf0350732Makoto Onuki public DeviceAdminInfo(Context context, ActivityInfo activityInfo) 297d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn throws XmlPullParserException, IOException { 298889c0880661bda16e3759995e03766ddf0350732Makoto Onuki mActivityInfo = activityInfo; 299b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 300d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn PackageManager pm = context.getPackageManager(); 301b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 302d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn XmlResourceParser parser = null; 303d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn try { 304889c0880661bda16e3759995e03766ddf0350732Makoto Onuki parser = mActivityInfo.loadXmlMetaData(pm, DeviceAdminReceiver.DEVICE_ADMIN_META_DATA); 305d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn if (parser == null) { 306d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn throw new XmlPullParserException("No " 307ef6b22fc04a8d5ab26e13efac8069c097e0da7c9Dianne Hackborn + DeviceAdminReceiver.DEVICE_ADMIN_META_DATA + " meta-data"); 308d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 309b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 310889c0880661bda16e3759995e03766ddf0350732Makoto Onuki Resources res = pm.getResourcesForApplication(mActivityInfo.applicationInfo); 311b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 312d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn AttributeSet attrs = Xml.asAttributeSet(parser); 313b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 314d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn int type; 315d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn while ((type=parser.next()) != XmlPullParser.END_DOCUMENT 316d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn && type != XmlPullParser.START_TAG) { 317d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 318b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 319d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn String nodeName = parser.getName(); 320d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn if (!"device-admin".equals(nodeName)) { 321d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn throw new XmlPullParserException( 322d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn "Meta-data does not start with device-admin tag"); 323d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 324b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 32520cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn TypedArray sa = res.obtainAttributes(attrs, 32687bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn com.android.internal.R.styleable.DeviceAdmin); 327d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 32887bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn mVisible = sa.getBoolean( 32987bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn com.android.internal.R.styleable.DeviceAdmin_visible, true); 330b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 331d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn sa.recycle(); 332b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 3338aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn int outerDepth = parser.getDepth(); 3348aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn while ((type=parser.next()) != XmlPullParser.END_DOCUMENT 3358aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) { 3368aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { 3378aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn continue; 3388aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 3398aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn String tagName = parser.getName(); 3408aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn if (tagName.equals("uses-policies")) { 3418aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn int innerDepth = parser.getDepth(); 3428aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn while ((type=parser.next()) != XmlPullParser.END_DOCUMENT 3438aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) { 3448aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { 3458aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn continue; 3468aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 3478aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn String policyName = parser.getName(); 3488aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn Integer val = sKnownPolicies.get(policyName); 3498aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn if (val != null) { 3508aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn mUsesPolicies |= 1 << val.intValue(); 3518aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } else { 3528aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn Log.w(TAG, "Unknown tag under uses-policies of " 3538aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn + getComponent() + ": " + policyName); 3548aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 3558aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 356c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov } else if (tagName.equals("support-transfer-ownership")) { 357c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov if (parser.next() != XmlPullParser.END_TAG) { 358c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov throw new XmlPullParserException( 359c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov "support-transfer-ownership tag must be empty."); 360c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov } 361c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov mSupportsTransferOwnership = true; 3628aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 3638aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 36420cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn } catch (NameNotFoundException e) { 36520cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn throw new XmlPullParserException( 366889c0880661bda16e3759995e03766ddf0350732Makoto Onuki "Unable to create context for: " + mActivityInfo.packageName); 367d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } finally { 368d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn if (parser != null) parser.close(); 369d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 370d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 371d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 372d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn DeviceAdminInfo(Parcel source) { 373889c0880661bda16e3759995e03766ddf0350732Makoto Onuki mActivityInfo = ActivityInfo.CREATOR.createFromParcel(source); 3748aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn mUsesPolicies = source.readInt(); 375c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov mSupportsTransferOwnership = source.readBoolean(); 376d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 377b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 378d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 379d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Return the .apk package that implements this device admin. 380d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 381d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public String getPackageName() { 382889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return mActivityInfo.packageName; 383d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 384b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 385d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 386d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Return the class name of the receiver component that implements 387d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * this device admin. 388d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 389d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public String getReceiverName() { 390889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return mActivityInfo.name; 391d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 392d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 393d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 394d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Return the raw information about the receiver implementing this 395d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * device admin. Do not modify the returned object. 396d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 397d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public ActivityInfo getActivityInfo() { 398889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return mActivityInfo; 399d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 400d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 401d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 402d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Return the component of the receiver that implements this device admin. 403d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 404f85c97741485a53c1cca5d9d6192a9436d91a044Xiaohui Chen @NonNull 405d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public ComponentName getComponent() { 406889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return new ComponentName(mActivityInfo.packageName, 407889c0880661bda16e3759995e03766ddf0350732Makoto Onuki mActivityInfo.name); 408d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 409b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 410d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 411d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Load the user-displayed label for this device admin. 412b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 413d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * @param pm Supply a PackageManager used to load the device admin's 414d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * resources. 415d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 416d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public CharSequence loadLabel(PackageManager pm) { 417889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return mActivityInfo.loadLabel(pm); 418d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 419b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 420d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 4218aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * Load user-visible description associated with this device admin. 422b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 4238aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * @param pm Supply a PackageManager used to load the device admin's 4248aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * resources. 4258aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 4268aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public CharSequence loadDescription(PackageManager pm) throws NotFoundException { 427889c0880661bda16e3759995e03766ddf0350732Makoto Onuki if (mActivityInfo.descriptionRes != 0) { 428889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return pm.getText(mActivityInfo.packageName, 429889c0880661bda16e3759995e03766ddf0350732Makoto Onuki mActivityInfo.descriptionRes, mActivityInfo.applicationInfo); 4308aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 4318aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn throw new NotFoundException(); 4328aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 433b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 4348aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 435d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Load the user-displayed icon for this device admin. 436b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 437d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * @param pm Supply a PackageManager used to load the device admin's 438d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * resources. 439d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 440d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public Drawable loadIcon(PackageManager pm) { 441889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return mActivityInfo.loadIcon(pm); 442d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 443b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 4448aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 44587bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn * Returns whether this device admin would like to be visible to the 44687bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn * user, even when it is not enabled. 44787bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn */ 44887bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn public boolean isVisible() { 44987bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn return mVisible; 45087bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn } 451b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 45287bba1ee14279bb14a28d42e27c4ef66d9967bf8Dianne Hackborn /** 4538aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * Return true if the device admin has requested that it be able to use 4548aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * the given policy control. The possible policy identifier inputs are: 4558aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * {@link #USES_POLICY_LIMIT_PASSWORD}, {@link #USES_POLICY_WATCH_LOGIN}, 456dc2df328b3c854c7b787bf5298df0c686584125dRaphael * {@link #USES_POLICY_RESET_PASSWORD}, {@link #USES_POLICY_FORCE_LOCK}, 457d26727273d16745ceddc2203121d29c3a9e7733cAndy Stadler * {@link #USES_POLICY_WIPE_DATA}, 4582447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo * {@link #USES_POLICY_EXPIRE_PASSWORD}, {@link #USES_ENCRYPTED_STORAGE}, 4592447edd85baac3225a12b868ef40f76cfdc6ec11Ben Komalo * {@link #USES_POLICY_DISABLE_CAMERA}. 4608aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 4618aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public boolean usesPolicy(int policyIdent) { 4628aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn return (mUsesPolicies & (1<<policyIdent)) != 0; 4638aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 464b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 4658aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** 4668aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * Return the XML tag name for the given policy identifier. Valid identifiers 4678aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * are as per {@link #usesPolicy(int)}. If the given identifier is not 4688aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * known, null is returned. 4698aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */ 4708aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public String getTagForPolicy(int policyIdent) { 4718aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn return sRevKnownPolicies.get(policyIdent).tag; 4728aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 473b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 474c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov /** 475c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov * Return true if this administrator can be a target in an ownership transfer. 476c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov */ 477c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov public boolean supportsTransferOwnership() { 478c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov return mSupportsTransferOwnership; 479c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov } 480c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov 4818aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn /** @hide */ 4828aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn public ArrayList<PolicyInfo> getUsedPolicies() { 4838aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn ArrayList<PolicyInfo> res = new ArrayList<PolicyInfo>(); 4848ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn for (int i=0; i<sPoliciesDisplayOrder.size(); i++) { 4858ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn PolicyInfo pi = sPoliciesDisplayOrder.get(i); 4868ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (usesPolicy(pi.ident)) { 4878ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn res.add(pi); 4888aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 4898aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 4908aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn return res; 4918aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 492b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 49321f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn /** @hide */ 49421f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn public void writePoliciesToXml(XmlSerializer out) 49521f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn throws IllegalArgumentException, IllegalStateException, IOException { 49621f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn out.attribute(null, "flags", Integer.toString(mUsesPolicies)); 49721f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn } 498b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 49921f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn /** @hide */ 50021f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn public void readPoliciesFromXml(XmlPullParser parser) 50121f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn throws XmlPullParserException, IOException { 50221f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn mUsesPolicies = Integer.parseInt( 50321f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn parser.getAttributeValue(null, "flags")); 50421f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn } 505b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 506d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public void dump(Printer pw, String prefix) { 507d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn pw.println(prefix + "Receiver:"); 508889c0880661bda16e3759995e03766ddf0350732Makoto Onuki mActivityInfo.dump(pw, prefix + " "); 509d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 510b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller 511d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn @Override 512d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public String toString() { 513889c0880661bda16e3759995e03766ddf0350732Makoto Onuki return "DeviceAdminInfo{" + mActivityInfo.name + "}"; 514d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 515d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 516d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 517d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Used to package this object into a {@link Parcel}. 518b8ec470617590fa2025db869e8e80dcce8eaec23Jim Miller * 519d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * @param dest The {@link Parcel} to be written. 520d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * @param flags The flags used for parceling. 521d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 522d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public void writeToParcel(Parcel dest, int flags) { 523889c0880661bda16e3759995e03766ddf0350732Makoto Onuki mActivityInfo.writeToParcel(dest, flags); 5248aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn dest.writeInt(mUsesPolicies); 525c8ee263d6ef37dae334e83dbe18654cff50d6153arangelov dest.writeBoolean(mSupportsTransferOwnership); 526d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 527d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 528d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn /** 529d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Used to make this class parcelable. 530d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 531d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public static final Parcelable.Creator<DeviceAdminInfo> CREATOR = 532d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn new Parcelable.Creator<DeviceAdminInfo>() { 533d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public DeviceAdminInfo createFromParcel(Parcel source) { 534d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn return new DeviceAdminInfo(source); 535d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 536d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 537d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public DeviceAdminInfo[] newArray(int size) { 538d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn return new DeviceAdminInfo[size]; 539d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 540d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn }; 541d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 542d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn public int describeContents() { 543d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn return 0; 544d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn } 545d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn} 546