From 8dd502135904480de9bc868e5517c42bfe8f197d Mon Sep 17 00:00:00 2001 From: Alex Johnston Date: Thu, 8 Apr 2021 15:51:22 +0000 Subject: [PATCH] PasswordPolicy.getMinMetrics PIN * If the password quality is NUMERIC or NUMERIC_COMPLEX, the credential type should be CREDENTIAL_TYPE_PIN Bug: 184103377 Test: atest com.android.server.devicepolicy.PasswordPolicyTest make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.password CtsVerifier > Device owner tests > policy transparency test > set password quality Change-Id: If0b1fbc71bbd0b4e59bc05594cd14e99a32d8bd1 --- core/java/android/app/admin/PasswordPolicy.java | 16 ++++++++++++---- .../android/app/admin/PasswordPolicyTest.java | 5 +++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/core/java/android/app/admin/PasswordPolicy.java b/core/java/android/app/admin/PasswordPolicy.java index 13f11ad74d127..0544a36666966 100644 --- a/core/java/android/app/admin/PasswordPolicy.java +++ b/core/java/android/app/admin/PasswordPolicy.java @@ -20,6 +20,7 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_COMPLEX; +import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; @@ -27,6 +28,7 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE; import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PASSWORD; import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PATTERN; +import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PIN; /** * {@hide} @@ -58,14 +60,20 @@ public class PasswordPolicy { } else if (quality == PASSWORD_QUALITY_BIOMETRIC_WEAK || quality == PASSWORD_QUALITY_SOMETHING) { return new PasswordMetrics(CREDENTIAL_TYPE_PATTERN); - } // quality is NUMERIC or stronger. + } else if (quality == PASSWORD_QUALITY_NUMERIC + || quality == PASSWORD_QUALITY_NUMERIC_COMPLEX) { + PasswordMetrics result = new PasswordMetrics(CREDENTIAL_TYPE_PIN); + result.length = length; + if (quality == PASSWORD_QUALITY_NUMERIC_COMPLEX) { + result.seqLength = PasswordMetrics.MAX_ALLOWED_SEQUENCE; + } + return result; + } // quality is ALPHABETIC or stronger. PasswordMetrics result = new PasswordMetrics(CREDENTIAL_TYPE_PASSWORD); result.length = length; - if (quality == PASSWORD_QUALITY_NUMERIC_COMPLEX) { - result.seqLength = PasswordMetrics.MAX_ALLOWED_SEQUENCE; - } else if (quality == PASSWORD_QUALITY_ALPHABETIC) { + if (quality == PASSWORD_QUALITY_ALPHABETIC) { result.nonNumeric = 1; } else if (quality == PASSWORD_QUALITY_ALPHANUMERIC) { result.numeric = 1; diff --git a/core/tests/coretests/src/android/app/admin/PasswordPolicyTest.java b/core/tests/coretests/src/android/app/admin/PasswordPolicyTest.java index e951054e6558d..f1be173b3677b 100644 --- a/core/tests/coretests/src/android/app/admin/PasswordPolicyTest.java +++ b/core/tests/coretests/src/android/app/admin/PasswordPolicyTest.java @@ -28,6 +28,7 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE; import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PASSWORD; import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PATTERN; +import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PIN; import static org.junit.Assert.assertEquals; @@ -80,7 +81,7 @@ public class PasswordPolicyTest { public void testGetMinMetrics_numeric() { PasswordPolicy policy = testPolicy(PASSWORD_QUALITY_NUMERIC); PasswordMetrics minMetrics = policy.getMinMetrics(); - assertEquals(CREDENTIAL_TYPE_PASSWORD, minMetrics.credType); + assertEquals(CREDENTIAL_TYPE_PIN, minMetrics.credType); assertEquals(TEST_VALUE, minMetrics.length); assertEquals(0, minMetrics.numeric); // numeric can doesn't really require digits. assertEquals(0, minMetrics.letters); @@ -104,7 +105,7 @@ public class PasswordPolicyTest { public void testGetMinMetrics_numericComplex() { PasswordPolicy policy = testPolicy(PASSWORD_QUALITY_NUMERIC_COMPLEX); PasswordMetrics minMetrics = policy.getMinMetrics(); - assertEquals(CREDENTIAL_TYPE_PASSWORD, minMetrics.credType); + assertEquals(CREDENTIAL_TYPE_PIN, minMetrics.credType); assertEquals(TEST_VALUE, minMetrics.length); assertEquals(0, minMetrics.numeric); assertEquals(0, minMetrics.letters);