Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8dd50213 authored by Alex Johnston's avatar Alex Johnston
Browse files

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
parent b3f79e4e
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -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;
+3 −2
Original line number Diff line number Diff line
@@ -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);