diff options
-rw-r--r-- | api/current.txt | 5 | ||||
-rw-r--r-- | core/java/android/app/admin/DevicePolicyManager.java | 23 | ||||
-rw-r--r-- | packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java | 23 |
3 files changed, 47 insertions, 4 deletions
diff --git a/api/current.txt b/api/current.txt index 297e7b6..df1036e 100644 --- a/api/current.txt +++ b/api/current.txt @@ -5032,7 +5032,10 @@ package android.app.admin { field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff field public static final int KEYGUARD_DISABLE_FEATURES_NONE = 0; // 0x0 field public static final int KEYGUARD_DISABLE_SECURE_CAMERA = 2; // 0x2 - field public static final int KEYGUARD_DISABLE_WIDGETS_ALL = 1; // 0x1 + field public static final int KEYGUARD_DISABLE_SECURE_NOTIFICATIONS = 4; // 0x4 + field public static final int KEYGUARD_DISABLE_TRUST_AGENTS = 16; // 0x10 + field public static final int KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS = 8; // 0x8 + field public static final deprecated int KEYGUARD_DISABLE_WIDGETS_ALL = 1; // 0x1 field public static final int PASSWORD_QUALITY_ALPHABETIC = 262144; // 0x40000 field public static final int PASSWORD_QUALITY_ALPHANUMERIC = 327680; // 0x50000 field public static final int PASSWORD_QUALITY_BIOMETRIC_WEAK = 32768; // 0x8000 diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index d173f19..f0a9291 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -33,6 +33,7 @@ import android.os.RemoteCallback; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; +import android.service.trust.TrustAgentService; import android.util.Log; import com.android.org.conscrypt.TrustedCertificateStore; @@ -1267,7 +1268,8 @@ public class DevicePolicyManager { public static final int KEYGUARD_DISABLE_FEATURES_NONE = 0; /** - * Disable all keyguard widgets + * Disable all keyguard widgets. Has no effect. + * @deprecated */ public static final int KEYGUARD_DISABLE_WIDGETS_ALL = 1 << 0; @@ -1277,6 +1279,22 @@ public class DevicePolicyManager { public static final int KEYGUARD_DISABLE_SECURE_CAMERA = 1 << 1; /** + * Disable showing all notifications on secure keyguard screens (e.g. PIN/Pattern/Password) + */ + public static final int KEYGUARD_DISABLE_SECURE_NOTIFICATIONS = 1 << 2; + + /** + * Only allow redacted notifications on secure keyguard screens (e.g. PIN/Pattern/Password) + */ + public static final int KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS = 1 << 3; + + /** + * Ignore {@link TrustAgentService} state on secure keyguard screens + * (e.g. PIN/Pattern/Password). + */ + public static final int KEYGUARD_DISABLE_TRUST_AGENTS = 1 << 4; + + /** * Disable all current and future keyguard customizations. */ public static final int KEYGUARD_DISABLE_FEATURES_ALL = 0x7fffffff; @@ -1496,7 +1514,8 @@ public class DevicePolicyManager { * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @param which {@link #KEYGUARD_DISABLE_FEATURES_NONE} (default), * {@link #KEYGUARD_DISABLE_WIDGETS_ALL}, {@link #KEYGUARD_DISABLE_SECURE_CAMERA}, - * {@link #KEYGUARD_DISABLE_FEATURES_ALL} + * {@link #KEYGUARD_DISABLE_SECURE_NOTIFICATIONS}, {@link #KEYGUARD_DISABLE_TRUST_AGENTS}, + * {@link #KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS}, {@link #KEYGUARD_DISABLE_FEATURES_ALL} */ public void setKeyguardDisabledFeatures(ComponentName admin, int which) { if (mService != null) { diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java index 73c2840..ba67a82 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -215,8 +215,29 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { mUserHasTrust.put(userId, enabled); } + private boolean isTrustDisabled(int userId) { + final DevicePolicyManager dpm = + (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE); + if (dpm != null) { + // TODO once UI is finalized + final boolean disabledByGlobalActions = false; + final boolean disabledBySettings = false; + + // Don't allow trust agent if device is secured with a SIM PIN. This is here + // mainly because there's no other way to prompt the user to enter their SIM PIN + // once they get past the keyguard screen. + final boolean disabledBySimPin = isSimPinSecure(); + + final boolean disabledByDpm = (dpm.getKeyguardDisabledFeatures(null, userId) + & DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS) != 0; + return disabledByDpm || disabledByGlobalActions || disabledBySettings + || disabledBySimPin; + } + return false; + } + public boolean getUserHasTrust(int userId) { - return mUserHasTrust.get(userId); + return !isTrustDisabled(userId) && mUserHasTrust.get(userId); } static class DisplayClientState { |