Merge "Allow double tap power to trigger camera during device is sleeping" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-07-10 00:57:54 +00:00
committed by Android (Google) Code Review
3 changed files with 25 additions and 39 deletions

View File

@@ -519,15 +519,6 @@ public class GestureLauncherService extends SystemService {
// user has completed setup. // user has completed setup.
return intercept && isUserSetupComplete(); return intercept && isUserSetupComplete();
} }
public boolean isCameraDoubleTapPowerEnabled() {
return mCameraDoubleTapPowerEnabled;
}
public boolean isEmergencyGestureEnabled() {
return mEmergencyGestureEnabled;
}
/** /**
* @return true if camera was launched, false otherwise. * @return true if camera was launched, false otherwise.
*/ */

View File

@@ -904,8 +904,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
} }
} else { } else {
// handled by single key or another power key policy. // handled by single key or another power key policy.
if (!mSingleKeyGestureDetector.isKeyIntercepted(KEYCODE_POWER)) {
mSingleKeyGestureDetector.reset(); mSingleKeyGestureDetector.reset();
} }
}
finishPowerKeyPress(); finishPowerKeyPress();
} }
@@ -918,7 +920,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
} }
private void powerPress(long eventTime, int count, boolean beganFromNonInteractive) { private void powerPress(long eventTime, int count, boolean beganFromNonInteractive) {
mCameraGestureTriggered = false;
if (mDefaultDisplayPolicy.isScreenOnEarly() && !mDefaultDisplayPolicy.isScreenOnFully()) { if (mDefaultDisplayPolicy.isScreenOnEarly() && !mDefaultDisplayPolicy.isScreenOnFully()) {
Slog.i(TAG, "Suppressed redundant power key press while " Slog.i(TAG, "Suppressed redundant power key press while "
+ "already in the process of turning the screen on."); + "already in the process of turning the screen on.");
@@ -1068,24 +1069,18 @@ public class PhoneWindowManager implements WindowManagerPolicy {
} }
private int getMaxMultiPressPowerCount() { private int getMaxMultiPressPowerCount() {
// GestureLauncherService could handle power multi tap gesture. // The actual max power button press count is 5
if (mGestureLauncherService != null // (EMERGENCY_GESTURE_POWER_TAP_COUNT_THRESHOLD), which is coming from
&& mGestureLauncherService.isEmergencyGestureEnabled()) { // GestureLauncherService.
return 5; // EMERGENCY_GESTURE_POWER_TAP_COUNT_THRESHOLD // 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) { if (mTriplePressOnPowerBehavior != MULTI_PRESS_POWER_NOTHING) {
return 3; return 3;
} }
if (mDoublePressOnPowerBehavior != MULTI_PRESS_POWER_NOTHING) { if (mDoublePressOnPowerBehavior != MULTI_PRESS_POWER_NOTHING) {
return 2; return 2;
} }
if (mGestureLauncherService != null
&& mGestureLauncherService.isCameraDoubleTapPowerEnabled()) {
return 2; // CAMERA_POWER_TAP_COUNT_THRESHOLD
}
return 1; return 1;
} }
@@ -1972,7 +1967,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
void onPress(long downTime) { void onPress(long downTime) {
powerPress(downTime, 1 /*count*/, powerPress(downTime, 1 /*count*/,
mSingleKeyGestureDetector.beganFromNonInteractive()); mSingleKeyGestureDetector.beganFromNonInteractive());
finishPowerKeyPress();
} }
@Override @Override
@@ -1995,7 +1989,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
@Override @Override
void onMultiPress(long downTime, int count) { void onMultiPress(long downTime, int count) {
powerPress(downTime, count, mSingleKeyGestureDetector.beganFromNonInteractive()); powerPress(downTime, count, mSingleKeyGestureDetector.beganFromNonInteractive());
finishPowerKeyPress();
} }
} }
@@ -3849,17 +3842,17 @@ public class PhoneWindowManager implements WindowManagerPolicy {
if (mGestureLauncherService == null) { if (mGestureLauncherService == null) {
return false; return false;
} }
mCameraGestureTriggered = false;
final MutableBoolean outLaunched = new MutableBoolean(false); final MutableBoolean outLaunched = new MutableBoolean(false);
final boolean gesturedServiceIntercepted = mGestureLauncherService.interceptPowerKeyDown( mGestureLauncherService.interceptPowerKeyDown(event, interactive, outLaunched);
event, interactive, outLaunched); if (!outLaunched.value) {
if (outLaunched.value) { return false;
mCameraGestureTriggered = true;
} }
if (outLaunched.value && mRequestedOrSleepingDefaultDisplay) { mCameraGestureTriggered = true;
if (mRequestedOrSleepingDefaultDisplay) {
mCameraGestureTriggeredDuringGoingToSleep = true; mCameraGestureTriggeredDuringGoingToSleep = true;
} }
return gesturedServiceIntercepted; return true;
} }
/** /**
@@ -4232,7 +4225,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mDefaultDisplayRotation.updateOrientationListener(); mDefaultDisplayRotation.updateOrientationListener();
if (mKeyguardDelegate != null) { if (mKeyguardDelegate != null) {
mKeyguardDelegate.onFinishedGoingToSleep(pmSleepReason, mCameraGestureTriggered); mKeyguardDelegate.onFinishedGoingToSleep(pmSleepReason,
mCameraGestureTriggeredDuringGoingToSleep);
} }
if (mDisplayFoldController != null) { if (mDisplayFoldController != null) {
mDisplayFoldController.finishedGoingToSleep(); mDisplayFoldController.finishedGoingToSleep();
@@ -4428,6 +4422,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// Called on the DisplayManager's DisplayPowerController thread. // Called on the DisplayManager's DisplayPowerController thread.
@Override @Override
public void screenTurnedOn(int displayId) { public void screenTurnedOn(int displayId) {
if (DEBUG_WAKEUP) Slog.i(TAG, "Display " + displayId + " turned on...");
if (displayId != DEFAULT_DISPLAY) { if (displayId != DEFAULT_DISPLAY) {
return; return;
} }

View File

@@ -272,8 +272,10 @@ public final class SingleKeyGestureDetector {
if (DEBUG) { if (DEBUG) {
Log.i(TAG, "press key " + KeyEvent.keyCodeToString(event.getKeyCode())); Log.i(TAG, "press key " + KeyEvent.keyCodeToString(event.getKeyCode()));
} }
mActiveRule.onPress(downTime); Message msg = mHandler.obtainMessage(MSG_KEY_DELAYED_PRESS, mActiveRule.mKeyCode,
reset(); 1, downTime);
msg.setAsynchronous(true);
mHandler.sendMessage(msg);
return true; return true;
} }
@@ -316,10 +318,7 @@ public final class SingleKeyGestureDetector {
} }
boolean isKeyIntercepted(int keyCode) { boolean isKeyIntercepted(int keyCode) {
if (mActiveRule != null && mActiveRule.shouldInterceptKey(keyCode)) { return mActiveRule != null && mActiveRule.shouldInterceptKey(keyCode);
return mHandledByLongPress;
}
return false;
} }
boolean beganFromNonInteractive() { boolean beganFromNonInteractive() {