diff --git a/services/core/java/com/android/server/GestureLauncherService.java b/services/core/java/com/android/server/GestureLauncherService.java index 50b27a0f3b3d5..d04698cb5aeb6 100644 --- a/services/core/java/com/android/server/GestureLauncherService.java +++ b/services/core/java/com/android/server/GestureLauncherService.java @@ -519,15 +519,6 @@ public class GestureLauncherService extends SystemService { // user has completed setup. return intercept && isUserSetupComplete(); } - - public boolean isCameraDoubleTapPowerEnabled() { - return mCameraDoubleTapPowerEnabled; - } - - public boolean isEmergencyGestureEnabled() { - return mEmergencyGestureEnabled; - } - /** * @return true if camera was launched, false otherwise. */ diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index e6adeb3abab87..fb4d96e305fca 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -904,7 +904,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } else { // handled by single key or another power key policy. - mSingleKeyGestureDetector.reset(); + if (!mSingleKeyGestureDetector.isKeyIntercepted(KEYCODE_POWER)) { + mSingleKeyGestureDetector.reset(); + } } finishPowerKeyPress(); @@ -918,7 +920,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { } private void powerPress(long eventTime, int count, boolean beganFromNonInteractive) { - mCameraGestureTriggered = false; if (mDefaultDisplayPolicy.isScreenOnEarly() && !mDefaultDisplayPolicy.isScreenOnFully()) { Slog.i(TAG, "Suppressed redundant power key press while " + "already in the process of turning the screen on."); @@ -1068,24 +1069,18 @@ public class PhoneWindowManager implements WindowManagerPolicy { } private int getMaxMultiPressPowerCount() { - // GestureLauncherService could handle power multi tap gesture. - if (mGestureLauncherService != null - && mGestureLauncherService.isEmergencyGestureEnabled()) { - return 5; // EMERGENCY_GESTURE_POWER_TAP_COUNT_THRESHOLD - } - + // The actual max power button press count is 5 + // (EMERGENCY_GESTURE_POWER_TAP_COUNT_THRESHOLD), which is coming from + // GestureLauncherService. + // To speed up the handling of single-press of power button inside SingleKeyGestureDetector, + // however, we limit the max count to the number of button presses actually handled by the + // SingleKeyGestureDetector. if (mTriplePressOnPowerBehavior != MULTI_PRESS_POWER_NOTHING) { return 3; } if (mDoublePressOnPowerBehavior != MULTI_PRESS_POWER_NOTHING) { return 2; } - - if (mGestureLauncherService != null - && mGestureLauncherService.isCameraDoubleTapPowerEnabled()) { - return 2; // CAMERA_POWER_TAP_COUNT_THRESHOLD - } - return 1; } @@ -1972,7 +1967,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { void onPress(long downTime) { powerPress(downTime, 1 /*count*/, mSingleKeyGestureDetector.beganFromNonInteractive()); - finishPowerKeyPress(); } @Override @@ -1995,7 +1989,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { @Override void onMultiPress(long downTime, int count) { powerPress(downTime, count, mSingleKeyGestureDetector.beganFromNonInteractive()); - finishPowerKeyPress(); } } @@ -3849,17 +3842,17 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (mGestureLauncherService == null) { return false; } - + mCameraGestureTriggered = false; final MutableBoolean outLaunched = new MutableBoolean(false); - final boolean gesturedServiceIntercepted = mGestureLauncherService.interceptPowerKeyDown( - event, interactive, outLaunched); - if (outLaunched.value) { - mCameraGestureTriggered = true; + mGestureLauncherService.interceptPowerKeyDown(event, interactive, outLaunched); + if (!outLaunched.value) { + return false; } - if (outLaunched.value && mRequestedOrSleepingDefaultDisplay) { + mCameraGestureTriggered = true; + if (mRequestedOrSleepingDefaultDisplay) { mCameraGestureTriggeredDuringGoingToSleep = true; } - return gesturedServiceIntercepted; + return true; } /** @@ -4232,7 +4225,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { mDefaultDisplayRotation.updateOrientationListener(); if (mKeyguardDelegate != null) { - mKeyguardDelegate.onFinishedGoingToSleep(pmSleepReason, mCameraGestureTriggered); + mKeyguardDelegate.onFinishedGoingToSleep(pmSleepReason, + mCameraGestureTriggeredDuringGoingToSleep); } if (mDisplayFoldController != null) { mDisplayFoldController.finishedGoingToSleep(); @@ -4428,6 +4422,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Called on the DisplayManager's DisplayPowerController thread. @Override public void screenTurnedOn(int displayId) { + if (DEBUG_WAKEUP) Slog.i(TAG, "Display " + displayId + " turned on..."); + if (displayId != DEFAULT_DISPLAY) { return; } diff --git a/services/core/java/com/android/server/policy/SingleKeyGestureDetector.java b/services/core/java/com/android/server/policy/SingleKeyGestureDetector.java index 3f4d920754ceb..1ef2bf9151e0a 100644 --- a/services/core/java/com/android/server/policy/SingleKeyGestureDetector.java +++ b/services/core/java/com/android/server/policy/SingleKeyGestureDetector.java @@ -272,8 +272,10 @@ public final class SingleKeyGestureDetector { if (DEBUG) { Log.i(TAG, "press key " + KeyEvent.keyCodeToString(event.getKeyCode())); } - mActiveRule.onPress(downTime); - reset(); + Message msg = mHandler.obtainMessage(MSG_KEY_DELAYED_PRESS, mActiveRule.mKeyCode, + 1, downTime); + msg.setAsynchronous(true); + mHandler.sendMessage(msg); return true; } @@ -316,10 +318,7 @@ public final class SingleKeyGestureDetector { } boolean isKeyIntercepted(int keyCode) { - if (mActiveRule != null && mActiveRule.shouldInterceptKey(keyCode)) { - return mHandledByLongPress; - } - return false; + return mActiveRule != null && mActiveRule.shouldInterceptKey(keyCode); } boolean beganFromNonInteractive() {