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

Commit be262063 authored by Eric Biggers's avatar Eric Biggers Committed by Automerger Merge Worker
Browse files

Merge "ChooseLockPassword: convert to use...

Merge "ChooseLockPassword: convert to use PasswordMetrics#validateCredential()" into main am: 00f5d9e7 am: 335752ed

Original change: https://android-review.googlesource.com/c/platform/packages/apps/Settings/+/2776714



Change-Id: I7aa857ea6fd3bb5f36e8d6fda1fa27ce6df27f2e
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents dcd4caea 335752ed
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -705,18 +705,17 @@ public class ChooseLockPassword extends SettingsActivity {

        /**
         * Validates PIN/Password and returns the validation result and updates mValidationErrors
         * and mPasswordReused to reflect validation results.
         * to reflect validation results.
         *
         * @param credential credential the user typed in.
         * @return whether password satisfies all the requirements.
         */
        @VisibleForTesting
        boolean validatePassword(LockscreenCredential credential) {
            final byte[] password = credential.getCredential();
            mValidationErrors = PasswordMetrics.validatePassword(
                    mMinMetrics, mMinComplexity, !mIsAlphaMode, password);
            mValidationErrors = PasswordMetrics.validateCredential(mMinMetrics, mMinComplexity,
                    credential);
            if (mValidationErrors.isEmpty() && mLockPatternUtils.checkPasswordHistory(
                        password, getPasswordHistoryHashFactor(), mUserId)) {
                        credential.getCredential(), getPasswordHistoryHashFactor(), mUserId)) {
                mValidationErrors =
                        Collections.singletonList(new PasswordValidationError(RECENTLY_USED));
            }
@@ -893,8 +892,8 @@ public class ChooseLockPassword extends SettingsActivity {
            final boolean canInput = mSaveAndFinishWorker == null;

            LockscreenCredential password = mIsAlphaMode
                    ? LockscreenCredential.createPasswordOrNone(mPasswordEntry.getText())
                    : LockscreenCredential.createPinOrNone(mPasswordEntry.getText());
                    ? LockscreenCredential.createPassword(mPasswordEntry.getText())
                    : LockscreenCredential.createPin(mPasswordEntry.getText());
            final int length = password.size();
            if (mUiStage == Stage.Introduction) {
                mPasswordRestrictionView.setVisibility(View.VISIBLE);
+26 −8
Original line number Diff line number Diff line
@@ -184,6 +184,24 @@ public class ChooseLockPasswordTest {
        assertThat(flags & FLAG_SECURE).isEqualTo(FLAG_SECURE);
    }

    @Test
    public void processAndValidatePasswordRequirements_cannotIncludeInvalidChar() {
        PasswordPolicy policy = new PasswordPolicy();
        policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
        // Only ASCII 31–127 should be allowed.  The invalid character error should also take
        // priority over the error that says the password is too short.
        String[] passwords = new String[] { "§µ¿¶¥£", "™™™™", "\n\n\n\n", "¡", "é" };

        for (String password : passwords) {
            assertPasswordValidationResult(
                    /* minMetrics */ policy.getMinMetrics(),
                    /* minComplexity= */ PASSWORD_COMPLEXITY_NONE,
                    /* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
                    /* userEnteredPassword= */ LockscreenCredential.createPassword(password),
                    "This can't include an invalid character");
        }
    }

    @Test
    public void processAndValidatePasswordRequirements_noMinPasswordComplexity() {
        PasswordPolicy policy = new PasswordPolicy();
@@ -194,7 +212,7 @@ public class ChooseLockPasswordTest {
                /* minMetrics */ policy.getMinMetrics(),
                /* minComplexity= */ PASSWORD_COMPLEXITY_NONE,
                /* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
                /* userEnteredPassword= */ LockscreenCredential.createNone(),
                /* userEnteredPassword= */ LockscreenCredential.createPassword(""),
                "Must contain at least 1 non-numerical character",
                "Must be at least 10 characters");
    }
@@ -208,7 +226,7 @@ public class ChooseLockPasswordTest {
                /* minMetrics */ policy.getMinMetrics(),
                /* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
                /* passwordType= */ PASSWORD_QUALITY_NUMERIC,
                /* userEnteredPassword= */ LockscreenCredential.createNone(),
                /* userEnteredPassword= */ LockscreenCredential.createPin(""),
                "PIN must be at least 8 digits");
    }

@@ -221,7 +239,7 @@ public class ChooseLockPasswordTest {
                /* minMetrics */ policy.getMinMetrics(),
                /* minComplexity= */ PASSWORD_COMPLEXITY_MEDIUM,
                /* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
                /* userEnteredPassword= */ LockscreenCredential.createNone(),
                /* userEnteredPassword= */ LockscreenCredential.createPassword(""),
                "Must be at least 4 characters");
    }

@@ -235,7 +253,7 @@ public class ChooseLockPasswordTest {
                /* minMetrics */ policy.getMinMetrics(),
                /* minComplexity= */ PASSWORD_COMPLEXITY_LOW,
                /* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
                /* userEnteredPassword= */ LockscreenCredential.createNone(),
                /* userEnteredPassword= */ LockscreenCredential.createPassword(""),
                "Must contain at least 1 non-numerical character",
                "Must contain at least 1 numerical digit",
                "Must be at least 9 characters");
@@ -251,7 +269,7 @@ public class ChooseLockPasswordTest {
                /* minMetrics */ policy.getMinMetrics(),
                /* minComplexity= */ PASSWORD_COMPLEXITY_MEDIUM,
                /* passwordType= */ PASSWORD_QUALITY_NUMERIC,
                /* userEnteredPassword= */ LockscreenCredential.createNone(),
                /* userEnteredPassword= */ LockscreenCredential.createPin(""),
                "PIN must be at least 11 digits");
    }

@@ -265,7 +283,7 @@ public class ChooseLockPasswordTest {
                /* minMetrics */ policy.getMinMetrics(),
                /* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
                /* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
                /* userEnteredPassword= */ LockscreenCredential.createNone(),
                /* userEnteredPassword= */ LockscreenCredential.createPassword(""),
                "Must contain at least 2 special symbols",
                "Must be at least 6 characters",
                "Must contain at least 1 letter",
@@ -351,7 +369,7 @@ public class ChooseLockPasswordTest {
                /* minMetrics */ policy.getMinMetrics(),
                /* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
                /* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
                /* userEnteredPassword= */ LockscreenCredential.createNone(),
                /* userEnteredPassword= */ LockscreenCredential.createPassword(""),
                "Must be at least 6 characters",
                "If using only numbers, must be at least 8 digits");
    }
@@ -448,7 +466,7 @@ public class ChooseLockPasswordTest {
                /* minMetrics */ null,
                /* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
                /* passwordType= */ PASSWORD_QUALITY_NUMERIC,
                /* userEnteredPassword= */ LockscreenCredential.createNone(),
                /* userEnteredPassword= */ LockscreenCredential.createPin(""),
                "PIN must be at least 8 digits");
    }