Loading policy/com/android/internal/policy/impl/PasswordUnlockScreen.java +33 −132 Original line number Diff line number Diff line Loading @@ -20,22 +20,29 @@ import android.content.Context; import com.android.internal.telephony.IccCard.State; import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.PasswordEntryKeyboardView; import android.text.Editable; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; import com.android.internal.R; import com.android.internal.widget.PasswordEntryKeyboardHelper; /** * Displays a dialer-like interface or alphanumeric (latin-1) key entry for the user to enter * an unlock password */ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen, View.OnClickListener, KeyguardUpdateMonitor.ConfigurationChangeCallback, KeyguardUpdateMonitor.InfoCallback { KeyguardUpdateMonitor.ConfigurationChangeCallback, OnEditorActionListener { private static final int DIGIT_PRESS_WAKE_MILLIS = 5000; Loading @@ -44,15 +51,11 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen private final boolean mCreatedWithKeyboardOpen; private TextView mPasswordTextView; private TextView mOkButton; private EditText mPasswordEntry; private TextView mEmergencyCallButton; private View mBackSpaceButton; private TextView mCarrier; private LockPatternUtils mLockPatternUtils; private Button mCancelButton; private static final char[] DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; private PasswordEntryKeyboardView mKeyboardView; private PasswordEntryKeyboardHelper mKeyboardHelper; // To avoid accidental lockout due to events while the device in in the pocket, ignore // any passwords with length less than or equal to this length. Loading @@ -70,44 +73,29 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen layoutInflater.inflate(R.layout.keyguard_screen_password_landscape, this, true); } else { layoutInflater.inflate(R.layout.keyguard_screen_password_portrait, this, true); new TouchInput(); } mPasswordTextView = (TextView) findViewById(R.id.pinDisplay); mBackSpaceButton = findViewById(R.id.backspace); mBackSpaceButton.setOnClickListener(this); // The cancel button is not used on this screen. mCancelButton = (Button) findViewById(R.id.cancel); if (mCancelButton != null) { mCancelButton.setText(""); } boolean isAlpha = lockPatternUtils.getPasswordMode() == LockPatternUtils.MODE_PASSWORD; mKeyboardView = (PasswordEntryKeyboardView) findViewById(R.id.keyboard); mPasswordEntry = (EditText) findViewById(R.id.passwordEntry); mPasswordEntry.setOnEditorActionListener(this); mEmergencyCallButton = (TextView) findViewById(R.id.emergencyCall); mOkButton = (TextView) findViewById(R.id.ok); mPasswordTextView.setFocusable(false); mEmergencyCallButton.setOnClickListener(this); mOkButton.setOnClickListener(this); mUpdateMonitor.registerConfigurationChangeCallback(this); mLockPatternUtils = lockPatternUtils; mCarrier = (TextView) findViewById(R.id.carrier); // until we get an update... mCarrier.setText(LockScreen.getCarrierString(mUpdateMonitor.getTelephonyPlmn(), mUpdateMonitor.getTelephonySpn())); updateMonitor.registerInfoCallback(this); updateMonitor.registerConfigurationChangeCallback(this); mKeyboardHelper = new PasswordEntryKeyboardHelper(context, mKeyboardView, this); mKeyboardHelper.setKeyboardMode(isAlpha ? PasswordEntryKeyboardHelper.KEYBOARD_MODE_ALPHA : PasswordEntryKeyboardHelper.KEYBOARD_MODE_NUMERIC); updateMonitor.registerConfigurationChangeCallback(this); setFocusableInTouchMode(true); mPasswordEntry.requestFocus(); } /** {@inheritDoc} */ public boolean needsInput() { return true; return false; } /** {@inheritDoc} */ Loading @@ -118,7 +106,8 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen /** {@inheritDoc} */ public void onResume() { // start fresh mPasswordTextView.setText(""); mPasswordEntry.setText(""); mPasswordEntry.requestFocus(); } /** {@inheritDoc} */ Loading @@ -127,22 +116,14 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen } public void onClick(View v) { if (v == mBackSpaceButton) { final Editable digits = mPasswordTextView.getEditableText(); final int len = digits.length(); if (len > 0) { digits.delete(len-1, len); } } else if (v == mEmergencyCallButton) { if (v == mEmergencyCallButton) { mCallback.takeEmergencyCallAction(); } else if (v == mOkButton) { verifyPasswordAndUnlock(); } mCallback.pokeWakelock(); } private void verifyPasswordAndUnlock() { String entry = mPasswordTextView.getText().toString(); String entry = mPasswordEntry.getText().toString(); if (mLockPatternUtils.checkPassword(entry)) { mCallback.keyguardDone(true); mCallback.reportSuccessfulUnlockAttempt(); Loading @@ -151,37 +132,15 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen // real password. This may require some tweaking. mCallback.reportFailedUnlockAttempt(); } mPasswordTextView.setText(""); mPasswordEntry.setText(""); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { return true; } final char match = event.getMatch(DIGITS); if (match != 0) { reportDigit(match - '0'); return true; } if (keyCode == KeyEvent.KEYCODE_DEL) { mPasswordTextView.onKeyDown(keyCode, event); return true; } if (keyCode == KeyEvent.KEYCODE_ENTER) { verifyPasswordAndUnlock(); return true; } mCallback.pokeWakelock(); return false; } private void reportDigit(int digit) { mPasswordTextView.append(Integer.toString(digit)); } public void onOrientationChange(boolean inPortrait) { } Loading @@ -192,71 +151,13 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen } } /** * Helper class to handle input from touch dialer. Only relevant when * the keyboard is shut. */ private class TouchInput implements View.OnClickListener { private int mDigitIds[] = { R.id.zero, R.id.one, R.id.two, R.id.three, R.id.four, R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine }; private TextView mCancelButton; private TouchInput() { for (int i = 0; i < mDigitIds.length; i++) { Button button = (Button) findViewById(mDigitIds[i]); button.setOnClickListener(this); button.setText(Integer.toString(i)); } mCancelButton = (TextView) findViewById(R.id.cancel); mCancelButton.setOnClickListener(this); mOkButton = (TextView) findViewById(R.id.ok); mOkButton.setOnClickListener(this); } public void onClick(View v) { if (v == mCancelButton) { return; } if (v == mOkButton) { public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { // Check if this was the result of hitting the enter key if (actionId == EditorInfo.IME_NULL) { verifyPasswordAndUnlock(); return true; } final int digit = checkDigit(v); if (digit >= 0) { mCallback.pokeWakelock(DIGIT_PRESS_WAKE_MILLIS); reportDigit(digit); } } private int checkDigit(View v) { int digit = -1; for (int i = 0; i < mDigitIds.length; i++) { if (v.getId() == mDigitIds[i]) { digit = i; break; } } return digit; } } /** {@inheritDoc} */ public void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) { mCarrier.setText(LockScreen.getCarrierString(plmn, spn)); } public void onRefreshBatteryInfo(boolean showBatteryInfo, boolean pluggedIn, int batteryLevel) { } public void onRingerModeChanged(int state) { } public void onTimeChanged() { return false; } public void onSimStateChanged(State simState) { } } Loading
policy/com/android/internal/policy/impl/PasswordUnlockScreen.java +33 −132 Original line number Diff line number Diff line Loading @@ -20,22 +20,29 @@ import android.content.Context; import com.android.internal.telephony.IccCard.State; import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.PasswordEntryKeyboardView; import android.text.Editable; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; import com.android.internal.R; import com.android.internal.widget.PasswordEntryKeyboardHelper; /** * Displays a dialer-like interface or alphanumeric (latin-1) key entry for the user to enter * an unlock password */ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen, View.OnClickListener, KeyguardUpdateMonitor.ConfigurationChangeCallback, KeyguardUpdateMonitor.InfoCallback { KeyguardUpdateMonitor.ConfigurationChangeCallback, OnEditorActionListener { private static final int DIGIT_PRESS_WAKE_MILLIS = 5000; Loading @@ -44,15 +51,11 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen private final boolean mCreatedWithKeyboardOpen; private TextView mPasswordTextView; private TextView mOkButton; private EditText mPasswordEntry; private TextView mEmergencyCallButton; private View mBackSpaceButton; private TextView mCarrier; private LockPatternUtils mLockPatternUtils; private Button mCancelButton; private static final char[] DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; private PasswordEntryKeyboardView mKeyboardView; private PasswordEntryKeyboardHelper mKeyboardHelper; // To avoid accidental lockout due to events while the device in in the pocket, ignore // any passwords with length less than or equal to this length. Loading @@ -70,44 +73,29 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen layoutInflater.inflate(R.layout.keyguard_screen_password_landscape, this, true); } else { layoutInflater.inflate(R.layout.keyguard_screen_password_portrait, this, true); new TouchInput(); } mPasswordTextView = (TextView) findViewById(R.id.pinDisplay); mBackSpaceButton = findViewById(R.id.backspace); mBackSpaceButton.setOnClickListener(this); // The cancel button is not used on this screen. mCancelButton = (Button) findViewById(R.id.cancel); if (mCancelButton != null) { mCancelButton.setText(""); } boolean isAlpha = lockPatternUtils.getPasswordMode() == LockPatternUtils.MODE_PASSWORD; mKeyboardView = (PasswordEntryKeyboardView) findViewById(R.id.keyboard); mPasswordEntry = (EditText) findViewById(R.id.passwordEntry); mPasswordEntry.setOnEditorActionListener(this); mEmergencyCallButton = (TextView) findViewById(R.id.emergencyCall); mOkButton = (TextView) findViewById(R.id.ok); mPasswordTextView.setFocusable(false); mEmergencyCallButton.setOnClickListener(this); mOkButton.setOnClickListener(this); mUpdateMonitor.registerConfigurationChangeCallback(this); mLockPatternUtils = lockPatternUtils; mCarrier = (TextView) findViewById(R.id.carrier); // until we get an update... mCarrier.setText(LockScreen.getCarrierString(mUpdateMonitor.getTelephonyPlmn(), mUpdateMonitor.getTelephonySpn())); updateMonitor.registerInfoCallback(this); updateMonitor.registerConfigurationChangeCallback(this); mKeyboardHelper = new PasswordEntryKeyboardHelper(context, mKeyboardView, this); mKeyboardHelper.setKeyboardMode(isAlpha ? PasswordEntryKeyboardHelper.KEYBOARD_MODE_ALPHA : PasswordEntryKeyboardHelper.KEYBOARD_MODE_NUMERIC); updateMonitor.registerConfigurationChangeCallback(this); setFocusableInTouchMode(true); mPasswordEntry.requestFocus(); } /** {@inheritDoc} */ public boolean needsInput() { return true; return false; } /** {@inheritDoc} */ Loading @@ -118,7 +106,8 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen /** {@inheritDoc} */ public void onResume() { // start fresh mPasswordTextView.setText(""); mPasswordEntry.setText(""); mPasswordEntry.requestFocus(); } /** {@inheritDoc} */ Loading @@ -127,22 +116,14 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen } public void onClick(View v) { if (v == mBackSpaceButton) { final Editable digits = mPasswordTextView.getEditableText(); final int len = digits.length(); if (len > 0) { digits.delete(len-1, len); } } else if (v == mEmergencyCallButton) { if (v == mEmergencyCallButton) { mCallback.takeEmergencyCallAction(); } else if (v == mOkButton) { verifyPasswordAndUnlock(); } mCallback.pokeWakelock(); } private void verifyPasswordAndUnlock() { String entry = mPasswordTextView.getText().toString(); String entry = mPasswordEntry.getText().toString(); if (mLockPatternUtils.checkPassword(entry)) { mCallback.keyguardDone(true); mCallback.reportSuccessfulUnlockAttempt(); Loading @@ -151,37 +132,15 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen // real password. This may require some tweaking. mCallback.reportFailedUnlockAttempt(); } mPasswordTextView.setText(""); mPasswordEntry.setText(""); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { return true; } final char match = event.getMatch(DIGITS); if (match != 0) { reportDigit(match - '0'); return true; } if (keyCode == KeyEvent.KEYCODE_DEL) { mPasswordTextView.onKeyDown(keyCode, event); return true; } if (keyCode == KeyEvent.KEYCODE_ENTER) { verifyPasswordAndUnlock(); return true; } mCallback.pokeWakelock(); return false; } private void reportDigit(int digit) { mPasswordTextView.append(Integer.toString(digit)); } public void onOrientationChange(boolean inPortrait) { } Loading @@ -192,71 +151,13 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen } } /** * Helper class to handle input from touch dialer. Only relevant when * the keyboard is shut. */ private class TouchInput implements View.OnClickListener { private int mDigitIds[] = { R.id.zero, R.id.one, R.id.two, R.id.three, R.id.four, R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine }; private TextView mCancelButton; private TouchInput() { for (int i = 0; i < mDigitIds.length; i++) { Button button = (Button) findViewById(mDigitIds[i]); button.setOnClickListener(this); button.setText(Integer.toString(i)); } mCancelButton = (TextView) findViewById(R.id.cancel); mCancelButton.setOnClickListener(this); mOkButton = (TextView) findViewById(R.id.ok); mOkButton.setOnClickListener(this); } public void onClick(View v) { if (v == mCancelButton) { return; } if (v == mOkButton) { public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { // Check if this was the result of hitting the enter key if (actionId == EditorInfo.IME_NULL) { verifyPasswordAndUnlock(); return true; } final int digit = checkDigit(v); if (digit >= 0) { mCallback.pokeWakelock(DIGIT_PRESS_WAKE_MILLIS); reportDigit(digit); } } private int checkDigit(View v) { int digit = -1; for (int i = 0; i < mDigitIds.length; i++) { if (v.getId() == mDigitIds[i]) { digit = i; break; } } return digit; } } /** {@inheritDoc} */ public void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) { mCarrier.setText(LockScreen.getCarrierString(plmn, spn)); } public void onRefreshBatteryInfo(boolean showBatteryInfo, boolean pluggedIn, int batteryLevel) { } public void onRingerModeChanged(int state) { } public void onTimeChanged() { return false; } public void onSimStateChanged(State simState) { } }