diff options
author | Xiyuan Xia <xiyuan@google.com> | 2015-05-05 16:04:00 -0700 |
---|---|---|
committer | Xiyuan Xia <xiyuan@google.com> | 2015-05-13 15:32:45 +0000 |
commit | bf9ac6b4fb6428d0194a5163181b30cccaedb8eb (patch) | |
tree | 107983f13fac415136f2234664934c85a8761c32 /src/com/android/settings/ChooseLockPassword.java | |
parent | ec36780b6aae94d5a23b2f635bd3ba811aef6ae0 (diff) | |
download | packages_apps_Settings-bf9ac6b4fb6428d0194a5163181b30cccaedb8eb.zip packages_apps_Settings-bf9ac6b4fb6428d0194a5163181b30cccaedb8eb.tar.gz packages_apps_Settings-bf9ac6b4fb6428d0194a5163181b30cccaedb8eb.tar.bz2 |
Migrate settings UI to use async security check
Bug: 20697812
Change-Id: Ieb0090ddb61198a60abb1e34ff9c6e8476c33789
Diffstat (limited to 'src/com/android/settings/ChooseLockPassword.java')
-rw-r--r-- | src/com/android/settings/ChooseLockPassword.java | 58 |
1 files changed, 48 insertions, 10 deletions
diff --git a/src/com/android/settings/ChooseLockPassword.java b/src/com/android/settings/ChooseLockPassword.java index 0817eeb..1338ac7 100644 --- a/src/com/android/settings/ChooseLockPassword.java +++ b/src/com/android/settings/ChooseLockPassword.java @@ -17,6 +17,7 @@ package com.android.settings; import com.android.internal.logging.MetricsLogger; +import com.android.internal.widget.LockPatternChecker; import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.PasswordEntryKeyboardHelper; import com.android.internal.widget.PasswordEntryKeyboardView; @@ -28,6 +29,7 @@ import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.Intent; import android.inputmethodservice.KeyboardView; +import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -134,6 +136,7 @@ public class ChooseLockPassword extends SettingsActivity { private int mPasswordMinNumeric = 0; private int mPasswordMinNonLetter = 0; private LockPatternUtils mLockPatternUtils; + private AsyncTask<?, ?, ?> mPendingLockCheck; private int mRequestedQuality = DevicePolicyManager.PASSWORD_QUALITY_NUMERIC; private ChooseLockSettingsHelper mChooseLockSettingsHelper; private Stage mUiStage = Stage.Introduction; @@ -312,12 +315,17 @@ public class ChooseLockPassword extends SettingsActivity { public void onResume() { super.onResume(); updateStage(mUiStage); + mPasswordEntry.setEnabled(true); mKeyboardView.requestFocus(); } @Override public void onPause() { mHandler.removeMessages(MSG_SHOW_ERROR); + if (mPendingLockCheck != null) { + mPendingLockCheck.cancel(false); + mPendingLockCheck = null; + } super.onPause(); } @@ -489,19 +497,12 @@ public class ChooseLockPassword extends SettingsActivity { UserHandle.myUserId()); if (mHasChallenge) { - Intent intent = new Intent(); - byte[] token = mLockPatternUtils.verifyPassword(pin, mChallenge, - UserHandle.myUserId()); - intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token); - getActivity().setResult(RESULT_FINISHED, intent); + startVerifyPassword(pin, wasSecureBefore); + return; } else { getActivity().setResult(RESULT_FINISHED); } - getActivity().finish(); - mDone = true; - if (!wasSecureBefore) { - startActivity(getRedactionInterstitialIntent(getActivity())); - } + finishConfirmStage(wasSecureBefore); } else { CharSequence tmp = mPasswordEntry.getText(); if (tmp != null) { @@ -515,6 +516,43 @@ public class ChooseLockPassword extends SettingsActivity { } } + private void startVerifyPassword(final String pin, final boolean wasSecureBefore) { + mPasswordEntry.setEnabled(false); + setNextEnabled(false); + if (mPendingLockCheck != null) { + mPendingLockCheck.cancel(false); + } + + mPendingLockCheck = LockPatternChecker.verifyPassword( + mLockPatternUtils, + pin, + mChallenge, + UserHandle.myUserId(), + new LockPatternChecker.OnVerifyCallback() { + @Override + public void onVerified(byte[] token) { + mPasswordEntry.setEnabled(true); + setNextEnabled(true); + mPendingLockCheck = null; + + Intent intent = new Intent(); + intent.putExtra( + ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, + token); + getActivity().setResult(RESULT_FINISHED, intent); + finishConfirmStage(wasSecureBefore); + } + }); + } + + private void finishConfirmStage(boolean wasSecureBefore) { + getActivity().finish(); + mDone = true; + if (!wasSecureBefore) { + startActivity(getRedactionInterstitialIntent(getActivity())); + } + } + protected void setNextEnabled(boolean enabled) { mNextButton.setEnabled(enabled); } |