diff options
-rw-r--r-- | policy/src/com/android/internal/policy/impl/LockScreen.java | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/policy/src/com/android/internal/policy/impl/LockScreen.java b/policy/src/com/android/internal/policy/impl/LockScreen.java index c2fbbbc7854..5c1514af489 100644 --- a/policy/src/com/android/internal/policy/impl/LockScreen.java +++ b/policy/src/com/android/internal/policy/impl/LockScreen.java @@ -95,6 +95,7 @@ class LockScreen extends LinearLayout implements KeyguardScreen { private boolean mSilentMode; private AudioManager mAudioManager; private boolean mEnableMenuKeyInLockScreen; + private boolean mUnlockKeyDown = false; private KeyguardStatusViewManager mStatusViewManager; private UnlockWidgetCommonMethods mUnlockWidgetMethods; @@ -736,6 +737,7 @@ class LockScreen extends LinearLayout implements KeyguardScreen { @Override public boolean onKeyDown(int keyCode, KeyEvent event) { + mUnlockKeyDown = true; if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_HOME || keyCode == KeyEvent.KEYCODE_MENU) { @@ -747,9 +749,15 @@ class LockScreen extends LinearLayout implements KeyguardScreen { @Override public boolean onKeyUp(int keyCode, KeyEvent event) { - if ((keyCode == KeyEvent.KEYCODE_MENU && mEnableMenuKeyInLockScreen) || - (keyCode == KeyEvent.KEYCODE_HOME && mHomeUnlockScreen)) { - mCallback.goToUnlockScreen(); + int flags = event.getFlags(); + // make sure the keydown is from a screen on state + if (mUnlockKeyDown) { + mUnlockKeyDown = false; + boolean mNotLongPress = (flags & KeyEvent.FLAG_CANCELED_LONG_PRESS) == 0; + if (mNotLongPress && ((keyCode == KeyEvent.KEYCODE_MENU && mEnableMenuKeyInLockScreen) || + (keyCode == KeyEvent.KEYCODE_HOME && mHomeUnlockScreen))) { + mCallback.goToUnlockScreen(); + } } return false; } |