Added new password quality constant PASSWORD_QUALITY_MANAGED to make it possible
to prevent user from unlock modification.
BUG: 25549437
Change-Id: Iae9adccbb8f9e1db8a21d596137f69f6cad54988
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index e3d7c3d..0161119 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -1053,6 +1053,18 @@
public static final int PASSWORD_QUALITY_COMPLEX = 0x60000;
/**
+ * Constant for {@link #setPasswordQuality}: the user is not allowed to
+ * modify password. In case this password quality is set, the password is
+ * managed by a profile owner. The profile owner can set any password,
+ * as if {@link #PASSWORD_QUALITY_UNSPECIFIED} is used. Note
+ * that quality constants are ordered so that higher values are more
+ * restrictive. The value of {@link #PASSWORD_QUALITY_MANAGED} is
+ * the highest.
+ * @hide
+ */
+ public static final int PASSWORD_QUALITY_MANAGED = 0x80000;
+
+ /**
* Called by an application that is administering the device to set the
* password restrictions it is imposing. After setting this, the user
* will not be able to enter a new password that is not at least as
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 1ada0ac..a23e74b 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -2237,6 +2237,7 @@
case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC:
case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC:
case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX:
+ case DevicePolicyManager.PASSWORD_QUALITY_MANAGED:
return;
}
throw new IllegalArgumentException("Invalid quality constant: 0x"
@@ -3467,6 +3468,9 @@
}
}
quality = getPasswordQuality(null, userHandle, false);
+ if (quality == DevicePolicyManager.PASSWORD_QUALITY_MANAGED) {
+ quality = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
+ }
if (quality != DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
int realQuality = LockPatternUtils.computePasswordQuality(password);
if (realQuality < quality