Migrate settings UI to use async security check

Bug: 20697812
Change-Id: Ieb0090ddb61198a60abb1e34ff9c6e8476c33789
This commit is contained in:
Xiyuan Xia
2015-05-05 16:04:00 -07:00
parent ec36780b6a
commit bf9ac6b4fb
4 changed files with 255 additions and 59 deletions

View File

@@ -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);
}