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

Commit 5437588a authored by Adrian Roos's avatar Adrian Roos
Browse files

Require explicit userId in LockPatternUtils

Bug: 18931518
Change-Id: Ie2faa18918aaadf17a84287898438549a693b0cc
parent bc956309
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Process;
import android.os.UserHandle;
import android.preference.Preference;
import android.preference.PreferenceScreen;
import android.security.KeyStore;
@@ -168,7 +169,7 @@ public class ChooseLockGeneric extends SettingsActivity {
                Preference preference) {
            final String key = preference.getKey();

            if (!isUnlockMethodSecure(key) && mLockPatternUtils.isSecure()) {
            if (!isUnlockMethodSecure(key) && mLockPatternUtils.isSecure(UserHandle.myUserId())) {
                // Show the disabling FRP warning only when the user is switching from a secure
                // unlock method to an insecure one
                showFactoryResetProtectionWarningDialog(key);
@@ -268,10 +269,10 @@ public class ChooseLockGeneric extends SettingsActivity {
        }

        private String getKeyForCurrent() {
            if (mLockPatternUtils.isLockScreenDisabled()) {
            if (mLockPatternUtils.isLockScreenDisabled(UserHandle.myUserId())) {
                return KEY_UNLOCK_SET_OFF;
            }
            switch (mLockPatternUtils.getKeyguardStoredPasswordQuality()) {
            switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(UserHandle.myUserId())) {
                case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
                    return KEY_UNLOCK_SET_PATTERN;
                case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
@@ -474,8 +475,9 @@ public class ChooseLockGeneric extends SettingsActivity {
                }
                startActivityForResult(intent, CHOOSE_LOCK_REQUEST);
            } else if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
                mChooseLockSettingsHelper.utils().clearLock();
                mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled);
                mChooseLockSettingsHelper.utils().clearLock(UserHandle.myUserId());
                mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled,
                        UserHandle.myUserId());
                removeAllFingerprintTemplates();
                getActivity().setResult(Activity.RESULT_OK);
                finish();
@@ -502,7 +504,7 @@ public class ChooseLockGeneric extends SettingsActivity {
        }

        private int getResIdForFactoryResetProtectionWarningTitle() {
            switch (mLockPatternUtils.getKeyguardStoredPasswordQuality()) {
            switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(UserHandle.myUserId())) {
                case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
                    return R.string.unlock_disable_lock_pattern_summary;
                case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
+22 −12
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.inputmethodservice.KeyboardView;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.UserHandle;
import android.text.Editable;
import android.text.InputType;
import android.text.Selection;
@@ -200,24 +201,31 @@ public class ChooseLockPassword extends SettingsActivity {
                throw new SecurityException("Fragment contained in wrong activity");
            }
            mRequestedQuality = Math.max(intent.getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY,
                    mRequestedQuality), mLockPatternUtils.getRequestedPasswordQuality());
                    mRequestedQuality), mLockPatternUtils.getRequestedPasswordQuality(
                    UserHandle.myUserId()));
            mPasswordMinLength = Math.max(Math.max(
                    LockPatternUtils.MIN_LOCK_PASSWORD_SIZE,
                    intent.getIntExtra(PASSWORD_MIN_KEY, mPasswordMinLength)),
                    mLockPatternUtils.getRequestedMinimumPasswordLength());
                    mLockPatternUtils.getRequestedMinimumPasswordLength(UserHandle.myUserId()));
            mPasswordMaxLength = intent.getIntExtra(PASSWORD_MAX_KEY, mPasswordMaxLength);
            mPasswordMinLetters = Math.max(intent.getIntExtra(PASSWORD_MIN_LETTERS_KEY,
                    mPasswordMinLetters), mLockPatternUtils.getRequestedPasswordMinimumLetters());
                    mPasswordMinLetters), mLockPatternUtils.getRequestedPasswordMinimumLetters(
                    UserHandle.myUserId()));
            mPasswordMinUpperCase = Math.max(intent.getIntExtra(PASSWORD_MIN_UPPERCASE_KEY,
                    mPasswordMinUpperCase), mLockPatternUtils.getRequestedPasswordMinimumUpperCase());
                    mPasswordMinUpperCase), mLockPatternUtils.getRequestedPasswordMinimumUpperCase(
                    UserHandle.myUserId()));
            mPasswordMinLowerCase = Math.max(intent.getIntExtra(PASSWORD_MIN_LOWERCASE_KEY,
                    mPasswordMinLowerCase), mLockPatternUtils.getRequestedPasswordMinimumLowerCase());
                    mPasswordMinLowerCase), mLockPatternUtils.getRequestedPasswordMinimumLowerCase(
                    UserHandle.myUserId()));
            mPasswordMinNumeric = Math.max(intent.getIntExtra(PASSWORD_MIN_NUMERIC_KEY,
                    mPasswordMinNumeric), mLockPatternUtils.getRequestedPasswordMinimumNumeric());
                    mPasswordMinNumeric), mLockPatternUtils.getRequestedPasswordMinimumNumeric(
                    UserHandle.myUserId()));
            mPasswordMinSymbols = Math.max(intent.getIntExtra(PASSWORD_MIN_SYMBOLS_KEY,
                    mPasswordMinSymbols), mLockPatternUtils.getRequestedPasswordMinimumSymbols());
                    mPasswordMinSymbols), mLockPatternUtils.getRequestedPasswordMinimumSymbols(
                    UserHandle.myUserId()));
            mPasswordMinNonLetter = Math.max(intent.getIntExtra(PASSWORD_MIN_NONLETTER_KEY,
                    mPasswordMinNonLetter), mLockPatternUtils.getRequestedPasswordMinimumNonLetter());
                    mPasswordMinNonLetter), mLockPatternUtils.getRequestedPasswordMinimumNonLetter(
                    UserHandle.myUserId()));

            mChooseLockSettingsHelper = new ChooseLockSettingsHelper(getActivity());
        }
@@ -448,7 +456,7 @@ public class ChooseLockPassword extends SettingsActivity {
                    return getString(R.string.lockpassword_password_requires_digit);
                }
            }
            if(mLockPatternUtils.checkPasswordHistory(password)) {
            if(mLockPatternUtils.checkPasswordHistory(password, UserHandle.myUserId())) {
                return getString(mIsAlphaMode ? R.string.lockpassword_password_recently_used
                        : R.string.lockpassword_pin_recently_used);
            }
@@ -473,15 +481,17 @@ public class ChooseLockPassword extends SettingsActivity {
                }
            } else if (mUiStage == Stage.NeedToConfirm) {
                if (mFirstPin.equals(pin)) {
                    boolean wasSecureBefore = mLockPatternUtils.isSecure();
                    boolean wasSecureBefore = mLockPatternUtils.isSecure(UserHandle.myUserId());
                    final boolean required = getActivity().getIntent().getBooleanExtra(
                            EncryptionInterstitial.EXTRA_REQUIRE_PASSWORD, true);
                    mLockPatternUtils.setCredentialRequiredToDecrypt(required);
                    mLockPatternUtils.saveLockPassword(pin, mCurrentPassword, mRequestedQuality);
                    mLockPatternUtils.saveLockPassword(pin, mCurrentPassword, mRequestedQuality,
                            UserHandle.myUserId());

                    if (mHasChallenge) {
                        Intent intent = new Intent();
                        byte[] token = mLockPatternUtils.verifyPassword(pin, mChallenge);
                        byte[] token = mLockPatternUtils.verifyPassword(pin, mChallenge,
                                UserHandle.myUserId());
                        intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
                        getActivity().setResult(RESULT_FINISHED, intent);
                    } else {
+7 −5
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
@@ -603,18 +604,18 @@ public class ChooseLockPattern extends SettingsActivity {
        private void saveChosenPatternAndFinish() {
            if (mDone) return;
            LockPatternUtils utils = mChooseLockSettingsHelper.utils();
            final boolean lockVirgin = !utils.isPatternEverChosen();
            final boolean lockVirgin = !utils.isPatternEverChosen(UserHandle.myUserId());

            boolean wasSecureBefore = utils.isSecure();
            boolean wasSecureBefore = utils.isSecure(UserHandle.myUserId());

            final boolean required = getActivity().getIntent().getBooleanExtra(
                    EncryptionInterstitial.EXTRA_REQUIRE_PASSWORD, true);

            utils.setCredentialRequiredToDecrypt(required);
            utils.saveLockPattern(mChosenPattern, mCurrentPattern);
            utils.saveLockPattern(mChosenPattern, mCurrentPattern, UserHandle.myUserId());

            if (lockVirgin) {
                utils.setVisiblePatternEnabled(true);
                utils.setVisiblePatternEnabled(true, UserHandle.myUserId());
            }

            if (!wasSecureBefore) {
@@ -623,7 +624,8 @@ public class ChooseLockPattern extends SettingsActivity {

            if (mHasChallenge) {
                Intent intent = new Intent();
                byte[] token = utils.verifyPattern(mChosenPattern, mChallenge);
                byte[] token = utils.verifyPattern(mChosenPattern, mChallenge,
                        UserHandle.myUserId());
                intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
                getActivity().setResult(RESULT_FINISHED, intent);
            } else {
+2 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.app.Activity;
import android.app.Fragment;
import android.app.admin.DevicePolicyManager;
import android.content.Intent;
import android.os.UserHandle;

import com.android.internal.widget.LockPatternUtils;

@@ -116,7 +117,7 @@ public final class ChooseLockSettingsHelper {
            boolean returnCredentials, boolean external, boolean hasChallenge,
            long challenge) {
        boolean launched = false;
        switch (mLockPatternUtils.getKeyguardStoredPasswordQuality()) {
        switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(UserHandle.myUserId())) {
            case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
                launched = launchConfirmationActivity(request, title, header, description,
                        returnCredentials || hasChallenge
+9 −5
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.settings;

import android.annotation.Nullable;
import android.os.UserHandle;
import android.text.TextUtils;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.widget.LockPatternUtils;
@@ -90,7 +91,8 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            final int storedQuality = mLockPatternUtils.getKeyguardStoredPasswordQuality();
            final int storedQuality = mLockPatternUtils.getKeyguardStoredPasswordQuality(
                    UserHandle.myUserId());
            View view = inflater.inflate(R.layout.confirm_lock_password, null);

            mPasswordEntry = (TextView) view.findViewById(R.id.password_entry);
@@ -156,7 +158,7 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
        @Override
        public void onResume() {
            super.onResume();
            long deadline = mLockPatternUtils.getLockoutAttemptDeadline();
            long deadline = mLockPatternUtils.getLockoutAttemptDeadline(UserHandle.myUserId());
            if (deadline != 0) {
                handleAttemptLockout(deadline);
            }
@@ -185,13 +187,14 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
                if (getActivity() instanceof ConfirmLockPassword.InternalActivity) {
                    long challenge = getActivity().getIntent().getLongExtra(
                            ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0);
                    byte[] token = mLockPatternUtils.verifyPassword(pin, challenge);
                    byte[] token = mLockPatternUtils.verifyPassword(pin, challenge,
                            UserHandle.myUserId());
                    if (token != null) {
                        matched = true;
                        intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
                    }
                }
            } else if (mLockPatternUtils.checkPassword(pin)) {
            } else if (mLockPatternUtils.checkPassword(pin, UserHandle.myUserId())) {
                matched = true;
                if (getActivity() instanceof ConfirmLockPassword.InternalActivity) {
                    intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_TYPE,
@@ -206,7 +209,8 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
                getActivity().finish();
            } else {
                if (++mNumWrongConfirmAttempts >= LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT) {
                    long deadline = mLockPatternUtils.setLockoutAttemptDeadline();
                    long deadline = mLockPatternUtils.setLockoutAttemptDeadline(
                            UserHandle.myUserId());
                    handleAttemptLockout(deadline);
                } else {
                    showError(getErrorMessage());
Loading