diff options
| author | Adrian Roos <roosa@google.com> | 2014-04-03 14:38:30 +0000 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2014-04-03 14:38:30 +0000 |
| commit | a52a37b0fe17109877abbc25943d0d74232f3e5f (patch) | |
| tree | 63a23608c5d4b0118c6c0db01a1fb8c8282754c8 /src/com/android/settings/ConfirmLockPassword.java | |
| parent | 836eff87a93f5b2857b41763197ab6782581aafc (diff) | |
| parent | 1b0b38cfeb54638899ddab48ff9198590f951a55 (diff) | |
| download | packages_apps_Settings-a52a37b0fe17109877abbc25943d0d74232f3e5f.tar.gz packages_apps_Settings-a52a37b0fe17109877abbc25943d0d74232f3e5f.tar.bz2 packages_apps_Settings-a52a37b0fe17109877abbc25943d0d74232f3e5f.zip | |
am 1b0b38cf: am 5d3c8c89: am 90630f6a: am 09235d10: am 82b3e62a: am 4692a48c: am c4bfea20: am 3f38173f: am 3a7690b1: am 8184ea52: Add lockout after trying to enter PIN / Password too often
* commit '1b0b38cfeb54638899ddab48ff9198590f951a55':
Add lockout after trying to enter PIN / Password too often
Diffstat (limited to 'src/com/android/settings/ConfirmLockPassword.java')
| -rw-r--r-- | src/com/android/settings/ConfirmLockPassword.java | 82 |
1 files changed, 68 insertions, 14 deletions
diff --git a/src/com/android/settings/ConfirmLockPassword.java b/src/com/android/settings/ConfirmLockPassword.java index d7402daff..38d4a893c 100644 --- a/src/com/android/settings/ConfirmLockPassword.java +++ b/src/com/android/settings/ConfirmLockPassword.java @@ -26,8 +26,10 @@ import android.app.Fragment; import android.app.admin.DevicePolicyManager; import android.content.Intent; import android.os.Bundle; +import android.os.CountDownTimer; import android.os.Handler; import android.preference.PreferenceActivity; +import android.os.SystemClock; import android.text.Editable; import android.text.InputType; import android.text.TextWatcher; @@ -78,7 +80,9 @@ public class ConfirmLockPassword extends PreferenceActivity { private PasswordEntryKeyboardHelper mKeyboardHelper; private PasswordEntryKeyboardView mKeyboardView; private Button mContinueButton; - + private int mNumWrongConfirmAttempts; + private CountDownTimer mCountdownTimer; + private boolean mIsAlpha; // required constructor for fragments public ConfirmLockPasswordFragment() { @@ -109,29 +113,27 @@ public class ConfirmLockPassword extends PreferenceActivity { mKeyboardView = (PasswordEntryKeyboardView) view.findViewById(R.id.keyboard); mHeaderText = (TextView) view.findViewById(R.id.headerText); - final boolean isAlpha = DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC == storedQuality + mIsAlpha = DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC == storedQuality || DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC == storedQuality || DevicePolicyManager.PASSWORD_QUALITY_COMPLEX == storedQuality; - mHeaderText.setText(isAlpha ? R.string.lockpassword_confirm_your_password_header - : R.string.lockpassword_confirm_your_pin_header); + mHeaderText.setText(getDefaultHeader()); final Activity activity = getActivity(); mKeyboardHelper = new PasswordEntryKeyboardHelper(activity, mKeyboardView, mPasswordEntry); - mKeyboardHelper.setKeyboardMode(isAlpha ? + mKeyboardHelper.setKeyboardMode(mIsAlpha ? PasswordEntryKeyboardHelper.KEYBOARD_MODE_ALPHA : PasswordEntryKeyboardHelper.KEYBOARD_MODE_NUMERIC); mKeyboardView.requestFocus(); int currentType = mPasswordEntry.getInputType(); - mPasswordEntry.setInputType(isAlpha ? currentType + mPasswordEntry.setInputType(mIsAlpha ? currentType : (InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD)); // Update the breadcrumb (title) if this is embedded in a PreferenceActivity if (activity instanceof PreferenceActivity) { final PreferenceActivity preferenceActivity = (PreferenceActivity) activity; - int id = isAlpha ? R.string.lockpassword_confirm_your_password_header - : R.string.lockpassword_confirm_your_pin_header; + int id = getDefaultHeader(); CharSequence title = getText(id); preferenceActivity.showBreadCrumbs(title, title); } @@ -139,10 +141,19 @@ public class ConfirmLockPassword extends PreferenceActivity { return view; } + private int getDefaultHeader() { + return mIsAlpha ? R.string.lockpassword_confirm_your_password_header + : R.string.lockpassword_confirm_your_pin_header; + } + @Override public void onPause() { super.onPause(); mKeyboardView.requestFocus(); + if (mCountdownTimer != null) { + mCountdownTimer.cancel(); + mCountdownTimer = null; + } } @Override @@ -150,6 +161,10 @@ public class ConfirmLockPassword extends PreferenceActivity { // TODO Auto-generated method stub super.onResume(); mKeyboardView.requestFocus(); + long deadline = mLockPatternUtils.getLockoutAttemptDeadline(); + if (deadline != 0) { + handleAttemptLockout(deadline); + } } private void handleNext() { @@ -162,10 +177,40 @@ public class ConfirmLockPassword extends PreferenceActivity { getActivity().setResult(RESULT_OK, intent); getActivity().finish(); } else { - showError(R.string.lockpattern_need_to_unlock_wrong); + if (++mNumWrongConfirmAttempts >= LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT) { + long deadline = mLockPatternUtils.setLockoutAttemptDeadline(); + handleAttemptLockout(deadline); + } else { + showError(R.string.lockpattern_need_to_unlock_wrong); + } } } + private void handleAttemptLockout(long elapsedRealtimeDeadline) { + long elapsedRealtime = SystemClock.elapsedRealtime(); + showError(R.string.lockpattern_too_many_failed_confirmation_attempts_header, 0); + mPasswordEntry.setEnabled(false); + mCountdownTimer = new CountDownTimer( + elapsedRealtimeDeadline - elapsedRealtime, + LockPatternUtils.FAILED_ATTEMPT_COUNTDOWN_INTERVAL_MS) { + + @Override + public void onTick(long millisUntilFinished) { + final int secondsCountdown = (int) (millisUntilFinished / 1000); + mHeaderText.setText(getString( + R.string.lockpattern_too_many_failed_confirmation_attempts_footer, + secondsCountdown)); + } + + @Override + public void onFinish() { + mPasswordEntry.setEnabled(true); + mHeaderText.setText(getDefaultHeader()); + mNumWrongConfirmAttempts = 0; + } + }.start(); + } + public void onClick(View v) { switch (v.getId()) { case R.id.next_button: @@ -180,14 +225,23 @@ public class ConfirmLockPassword extends PreferenceActivity { } private void showError(int msg) { + showError(msg, ERROR_MESSAGE_TIMEOUT); + } + + private final Runnable mResetErrorRunnable = new Runnable() { + public void run() { + mHeaderText.setText(getDefaultHeader()); + } + }; + + private void showError(int msg, long timeout) { mHeaderText.setText(msg); mHeaderText.announceForAccessibility(mHeaderText.getText()); mPasswordEntry.setText(null); - mHandler.postDelayed(new Runnable() { - public void run() { - mHeaderText.setText(R.string.lockpassword_confirm_your_password_header); - } - }, ERROR_MESSAGE_TIMEOUT); + mHandler.removeCallbacks(mResetErrorRunnable); + if (timeout != 0) { + mHandler.postDelayed(mResetErrorRunnable, timeout); + } } // {@link OnEditorActionListener} methods. |
