diff options
Diffstat (limited to 'src/com/android/settings/ConfirmLockPassword.java')
-rw-r--r-- | src/com/android/settings/ConfirmLockPassword.java | 147 |
1 files changed, 57 insertions, 90 deletions
diff --git a/src/com/android/settings/ConfirmLockPassword.java b/src/com/android/settings/ConfirmLockPassword.java index b49dc6e..44c599b 100644 --- a/src/com/android/settings/ConfirmLockPassword.java +++ b/src/com/android/settings/ConfirmLockPassword.java @@ -16,14 +16,11 @@ package com.android.settings; +import android.annotation.Nullable; import android.text.TextUtils; import com.android.internal.logging.MetricsLogger; import com.android.internal.widget.LockPatternUtils; -import com.android.internal.widget.PasswordEntryKeyboardHelper; -import com.android.internal.widget.PasswordEntryKeyboardView; -import android.app.Activity; -import android.app.Fragment; import android.app.admin.DevicePolicyManager; import android.content.Intent; import android.os.Bundle; @@ -31,23 +28,18 @@ import android.os.CountDownTimer; import android.os.Handler; import android.os.SystemClock; import android.os.storage.StorageManager; -import android.text.Editable; import android.text.InputType; -import android.text.TextWatcher; import android.view.KeyEvent; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; -import android.widget.Button; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; -public class ConfirmLockPassword extends SettingsActivity { - - public static final String PACKAGE = "com.android.settings"; - public static final String HEADER_TEXT = PACKAGE + ".ConfirmLockPattern.header"; +public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity { public static class InternalActivity extends ConfirmLockPassword { } @@ -65,28 +57,17 @@ public class ConfirmLockPassword extends SettingsActivity { return false; } - @Override - public void onCreate(Bundle savedInstanceState) { - // Disable IME on our window since we provide our own keyboard - //getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, - //WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); - super.onCreate(savedInstanceState); - CharSequence msg = getText(R.string.lockpassword_confirm_your_password_header); - setTitle(msg); - } - - public static class ConfirmLockPasswordFragment extends InstrumentedFragment - implements OnClickListener, OnEditorActionListener, TextWatcher { + public static class ConfirmLockPasswordFragment extends ConfirmDeviceCredentialBaseFragment + implements OnClickListener, OnEditorActionListener { private static final String KEY_NUM_WRONG_CONFIRM_ATTEMPTS = "confirm_lock_password_fragment.key_num_wrong_confirm_attempts"; private static final long ERROR_MESSAGE_TIMEOUT = 3000; private TextView mPasswordEntry; private LockPatternUtils mLockPatternUtils; - private TextView mHeaderText; + private TextView mHeaderTextView; + private TextView mDetailsTextView; + private TextView mErrorTextView; private Handler mHandler = new Handler(); - private PasswordEntryKeyboardHelper mKeyboardHelper; - private PasswordEntryKeyboardView mKeyboardView; - private Button mContinueButton; private int mNumWrongConfirmAttempts; private CountDownTimer mCountdownTimer; private boolean mIsAlpha; @@ -111,51 +92,35 @@ public class ConfirmLockPassword extends SettingsActivity { Bundle savedInstanceState) { final int storedQuality = mLockPatternUtils.getKeyguardStoredPasswordQuality(); View view = inflater.inflate(R.layout.confirm_lock_password, null); - // Disable IME on our window since we provide our own keyboard - - view.findViewById(R.id.cancel_button).setOnClickListener(this); - mContinueButton = (Button) view.findViewById(R.id.next_button); - mContinueButton.setOnClickListener(this); - mContinueButton.setEnabled(false); // disable until the user enters at least one char mPasswordEntry = (TextView) view.findViewById(R.id.password_entry); mPasswordEntry.setOnEditorActionListener(this); - mPasswordEntry.addTextChangedListener(this); - mKeyboardView = (PasswordEntryKeyboardView) view.findViewById(R.id.keyboard); - mHeaderText = (TextView) view.findViewById(R.id.headerText); + mHeaderTextView = (TextView) view.findViewById(R.id.headerText); + mDetailsTextView = (TextView) view.findViewById(R.id.detailsText); + mErrorTextView = (TextView) view.findViewById(R.id.errorText); mIsAlpha = DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC == storedQuality || DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC == storedQuality || DevicePolicyManager.PASSWORD_QUALITY_COMPLEX == storedQuality; Intent intent = getActivity().getIntent(); if (intent != null) { - CharSequence headerMessage = intent.getCharSequenceExtra(HEADER_TEXT); + CharSequence headerMessage = intent.getCharSequenceExtra( + ConfirmDeviceCredentialBaseFragment.HEADER_TEXT); + CharSequence detailsMessage = intent.getCharSequenceExtra( + ConfirmDeviceCredentialBaseFragment.DETAILS_TEXT); if (TextUtils.isEmpty(headerMessage)) { headerMessage = getString(getDefaultHeader()); } - mHeaderText.setText(headerMessage); + if (TextUtils.isEmpty(detailsMessage)) { + detailsMessage = getString(getDefaultDetails()); + } + mHeaderTextView.setText(headerMessage); + mDetailsTextView.setText(detailsMessage); } - - final Activity activity = getActivity(); - mKeyboardHelper = new PasswordEntryKeyboardHelper(activity, - mKeyboardView, mPasswordEntry); - mKeyboardHelper.setKeyboardMode(mIsAlpha ? - PasswordEntryKeyboardHelper.KEYBOARD_MODE_ALPHA - : PasswordEntryKeyboardHelper.KEYBOARD_MODE_NUMERIC); - mKeyboardView.requestFocus(); - int currentType = mPasswordEntry.getInputType(); mPasswordEntry.setInputType(mIsAlpha ? currentType : (InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD)); - - if (activity instanceof SettingsActivity) { - final SettingsActivity sa = (SettingsActivity) activity; - int id = getDefaultHeader(); - CharSequence title = getText(id); - sa.setTitle(title); - } - return view; } @@ -164,10 +129,19 @@ public class ConfirmLockPassword extends SettingsActivity { : R.string.lockpassword_confirm_your_pin_header; } + private int getDefaultDetails() { + return mIsAlpha ? R.string.lockpassword_confirm_your_password_generic + : R.string.lockpassword_confirm_your_pin_generic; + } + + private int getErrorMessage() { + return mIsAlpha ? R.string.lockpassword_invalid_password + : R.string.lockpassword_invalid_pin; + } + @Override public void onPause() { super.onPause(); - mKeyboardView.requestFocus(); if (mCountdownTimer != null) { mCountdownTimer.cancel(); mCountdownTimer = null; @@ -181,9 +155,7 @@ public class ConfirmLockPassword extends SettingsActivity { @Override public void onResume() { - // TODO Auto-generated method stub super.onResume(); - mKeyboardView.requestFocus(); long deadline = mLockPatternUtils.getLockoutAttemptDeadline(); if (deadline != 0) { handleAttemptLockout(deadline); @@ -196,33 +168,35 @@ public class ConfirmLockPassword extends SettingsActivity { outState.putInt(KEY_NUM_WRONG_CONFIRM_ATTEMPTS, mNumWrongConfirmAttempts); } + @Override + protected void authenticationSucceeded(@Nullable String password) { + Intent intent = new Intent(); + if (getActivity() instanceof ConfirmLockPassword.InternalActivity) { + intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_TYPE, + mIsAlpha ? StorageManager.CRYPT_TYPE_PASSWORD + : StorageManager.CRYPT_TYPE_PIN); + intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD, password); + } + getActivity().setResult(RESULT_OK, intent); + getActivity().finish(); + } + private void handleNext() { final String pin = mPasswordEntry.getText().toString(); if (mLockPatternUtils.checkPassword(pin)) { - - Intent intent = new Intent(); - if (getActivity() instanceof ConfirmLockPassword.InternalActivity) { - intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_TYPE, - mIsAlpha ? StorageManager.CRYPT_TYPE_PASSWORD - : StorageManager.CRYPT_TYPE_PIN); - intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD, pin); - } - - getActivity().setResult(RESULT_OK, intent); - getActivity().finish(); + authenticationSucceeded(pin); } else { if (++mNumWrongConfirmAttempts >= LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT) { long deadline = mLockPatternUtils.setLockoutAttemptDeadline(); handleAttemptLockout(deadline); } else { - showError(R.string.lockpattern_need_to_unlock_wrong); + showError(getErrorMessage()); } } } 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, @@ -231,15 +205,15 @@ public class ConfirmLockPassword extends SettingsActivity { @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)); + showError(getString( + R.string.lockpattern_too_many_failed_confirmation_attempts, + secondsCountdown), 0); } @Override public void onFinish() { mPasswordEntry.setEnabled(true); - mHeaderText.setText(getDefaultHeader()); + mErrorTextView.setText(""); mNumWrongConfirmAttempts = 0; } }.start(); @@ -264,13 +238,13 @@ public class ConfirmLockPassword extends SettingsActivity { private final Runnable mResetErrorRunnable = new Runnable() { public void run() { - mHeaderText.setText(getDefaultHeader()); + mErrorTextView.setText(""); } }; - private void showError(int msg, long timeout) { - mHeaderText.setText(msg); - mHeaderText.announceForAccessibility(mHeaderText.getText()); + private void showError(CharSequence msg, long timeout) { + mErrorTextView.setText(msg); + mErrorTextView.announceForAccessibility(mErrorTextView.getText()); mPasswordEntry.setText(null); mHandler.removeCallbacks(mResetErrorRunnable); if (timeout != 0) { @@ -278,6 +252,10 @@ public class ConfirmLockPassword extends SettingsActivity { } } + private void showError(int msg, long timeout) { + showError(getText(msg), timeout); + } + // {@link OnEditorActionListener} methods. public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { // Check if this was the result of hitting the enter or "done" key @@ -289,16 +267,5 @@ public class ConfirmLockPassword extends SettingsActivity { } return false; } - - // {@link TextWatcher} methods. - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - public void onTextChanged(CharSequence s, int start, int before, int count) { - } - - public void afterTextChanged(Editable s) { - mContinueButton.setEnabled(mPasswordEntry.getText().length() > 0); - } } } |