diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 6501cefb61938b2b15aa243592dfdb45d1c24675..85df733860fee69e1b5ba02e8f613a1152c402ca 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -1044,7 +1044,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Abort possibly stuck animations only when power key up without long press case. mHandler.post(mWindowManagerFuncs::triggerAnimationFailsafe); // See if we deferred screen wake because long press power for torch is enabled - if (mResolvedLongPressOnPowerBehavior == LONG_PRESS_POWER_TORCH && !isScreenOn()) { + if (mResolvedLongPressOnPowerBehavior == LONG_PRESS_POWER_TORCH && + (!isScreenOn() || isDozeMode())) { wakeUpFromPowerKey(SystemClock.uptimeMillis()); } } @@ -1331,11 +1332,24 @@ public class PhoneWindowManager implements WindowManagerPolicy { return mAssistUtils.getAssistComponentForUser(mCurrentUserId) != null; } + private boolean isDozeMode() { + IDreamManager dreamManager = getDreamManager(); + + try { + if (dreamManager != null && dreamManager.isDreaming()) { + return true; + } + } catch (RemoteException e) { + Slog.e(TAG, "RemoteException when checking if dreaming", e); + } + return false; + } + private int getResolvedLongPressOnPowerBehavior() { if (FactoryTest.isLongPressOnPowerOffEnabled()) { return LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM; } - if (mTorchLongPressPowerEnabled && !isScreenOn()) { + if (mTorchLongPressPowerEnabled && (!isScreenOn() || isDozeMode())) { return LONG_PRESS_POWER_TORCH; } @@ -4559,6 +4573,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { return false; } + final boolean isDozing = isDozeMode(); + + if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP) + && isDozing) { + return false; + } + // Send events to keyguard while the screen is on and it's showing. if (isKeyguardShowingAndNotOccluded() && !displayOff) { return true; @@ -4577,14 +4598,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (isDefaultDisplay) { // Send events to a dozing dream even if the screen is off since the dream // is in control of the state of the screen. - IDreamManager dreamManager = getDreamManager(); - - try { - if (dreamManager != null && dreamManager.isDreaming()) { - return true; - } - } catch (RemoteException e) { - Slog.e(TAG, "RemoteException when checking if dreaming", e); + if (isDozing) { + return true; } }