Loading services/core/java/com/android/server/policy/PhoneWindowManager.java +93 −54 Original line number Diff line number Diff line Loading @@ -345,6 +345,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { */ private final Object mLock = new Object(); /** List of {@link ScreenOnListener}s which do not belong to the default display. */ private final SparseArray<ScreenOnListener> mScreenOnListeners = new SparseArray<>(); Context mContext; IWindowManager mWindowManager; WindowManagerFuncs mWindowManagerFuncs; Loading Loading @@ -434,8 +437,25 @@ public class PhoneWindowManager implements WindowManagerPolicy { volatile boolean mBeganFromNonInteractive; volatile boolean mEndCallKeyHandled; volatile boolean mCameraGestureTriggeredDuringGoingToSleep; volatile boolean mGoingToSleep; volatile boolean mRequestedOrGoingToSleep; /** * {@code true} if the device is entering a low-power state; {@code false otherwise}. * * <p>This differs from {@link #mRequestedOrSleepingDefaultDisplay} which tracks the power state * of the {@link #mDefaultDisplay default display} versus the power state of the entire device. */ volatile boolean mDeviceGoingToSleep; /** * {@code true} if the {@link #mDefaultDisplay default display} is entering or was requested to * enter a low-power state; {@code false otherwise}. * * <p>This differs from {@link #mDeviceGoingToSleep} which tracks the power state of the entire * device versus the power state of the {@link #mDefaultDisplay default display}. */ // TODO(b/178103325): Track sleep/requested sleep for every display. volatile boolean mRequestedOrSleepingDefaultDisplay; volatile boolean mRecentsVisible; volatile boolean mNavBarVirtualKeyHapticFeedbackEnabled = true; volatile boolean mPictureInPictureVisible; Loading Loading @@ -917,13 +937,14 @@ public class PhoneWindowManager implements WindowManagerPolicy { case SHORT_PRESS_POWER_NOTHING: break; case SHORT_PRESS_POWER_GO_TO_SLEEP: goToSleepFromPowerButton(eventTime, 0); sleepDefaultDisplayFromPowerButton(eventTime, 0); break; case SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP: goToSleepFromPowerButton(eventTime, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); sleepDefaultDisplayFromPowerButton(eventTime, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); break; case SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP_AND_GO_HOME: if (goToSleepFromPowerButton(eventTime, if (sleepDefaultDisplayFromPowerButton(eventTime, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE)) { launchHomeFromHotKey(DEFAULT_DISPLAY); } Loading Loading @@ -951,11 +972,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { } /** * Sends the device to sleep as a result of a power button press. * Sends the default display to sleep as a result of a power button press. * * @return True if the was device was sent to sleep, false if sleep was suppressed. * @return {@code true} if the device was sent to sleep, {@code false} if the device did not * sleep. */ private boolean goToSleepFromPowerButton(long eventTime, int flags) { private boolean sleepDefaultDisplayFromPowerButton(long eventTime, int flags) { // Before we actually go to sleep, we check the last wakeup reason. // If the device very recently woke up from a gesture (like user lifting their device) // then ignore the sleep instruction. This is because users have developed Loading @@ -975,12 +997,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } goToSleep(eventTime, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, flags); sleepDefaultDisplay(eventTime, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, flags); return true; } private void goToSleep(long eventTime, int reason, int flags) { mRequestedOrGoingToSleep = true; private void sleepDefaultDisplay(long eventTime, int reason, int flags) { mRequestedOrSleepingDefaultDisplay = true; mPowerManager.goToSleep(eventTime, reason, flags); } Loading Loading @@ -1017,7 +1039,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { Settings.Global.THEATER_MODE_ON, 1); if (mGoToSleepOnButtonPressTheaterMode && interactive) { goToSleep(eventTime, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, 0); sleepDefaultDisplay(eventTime, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, 0); } } break; Loading Loading @@ -1126,7 +1149,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { case SHORT_PRESS_SLEEP_GO_TO_SLEEP: case SHORT_PRESS_SLEEP_GO_TO_SLEEP_AND_GO_HOME: Slog.i(TAG, "sleepRelease() calling goToSleep(GO_TO_SLEEP_REASON_SLEEP_BUTTON)"); goToSleep(eventTime, PowerManager.GO_TO_SLEEP_REASON_SLEEP_BUTTON, 0); sleepDefaultDisplay(eventTime, PowerManager.GO_TO_SLEEP_REASON_SLEEP_BUTTON, 0); break; } } Loading Loading @@ -3511,7 +3534,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } if ((mEndcallBehavior & Settings.System.END_BUTTON_BEHAVIOR_SLEEP) != 0) { goToSleep(event.getEventTime(), sleepDefaultDisplay(event.getEventTime(), PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, 0); isWakeKey = false; } Loading @@ -3538,10 +3561,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Any activity on the power button stops the accessibility shortcut result &= ~ACTION_PASS_TO_USER; isWakeKey = false; // wake-up will be handled separately final boolean isDefaultDisplayOn = Display.isOnState(mDefaultDisplay.getState()); final boolean interactiveAndOn = interactive && isDefaultDisplayOn; if (down) { interceptPowerKeyDown(event, interactive); interceptPowerKeyDown(event, interactiveAndOn); } else { interceptPowerKeyUp(event, interactive, canceled); interceptPowerKeyUp(event, interactiveAndOn, canceled); } break; } Loading Loading @@ -3746,7 +3771,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { final MutableBoolean outLaunched = new MutableBoolean(false); final boolean gesturedServiceIntercepted = gestureService.interceptPowerKeyDown(event, interactive, outLaunched); if (outLaunched.value && mRequestedOrGoingToSleep) { if (outLaunched.value && mRequestedOrSleepingDefaultDisplay) { mCameraGestureTriggeredDuringGoingToSleep = true; } return gesturedServiceIntercepted; Loading Loading @@ -4088,8 +4113,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { pmSleepReason)) + ")"); } mGoingToSleep = true; mRequestedOrGoingToSleep = true; mDeviceGoingToSleep = true; mRequestedOrSleepingDefaultDisplay = true; if (mKeyguardDelegate != null) { mKeyguardDelegate.onStartedGoingToSleep(pmSleepReason); Loading @@ -4108,8 +4133,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { } MetricsLogger.histogram(mContext, "screen_timeout", mLockScreenTimeout / 1000); mGoingToSleep = false; mRequestedOrGoingToSleep = false; mDeviceGoingToSleep = false; mRequestedOrSleepingDefaultDisplay = false; mDefaultDisplayPolicy.setAwake(false); // We must get this work done here because the power manager will drop Loading Loading @@ -4253,13 +4278,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Called on the DisplayManager's DisplayPowerController thread. @Override public void screenTurnedOff(int displayId) { if (displayId != DEFAULT_DISPLAY) { return; } if (DEBUG_WAKEUP) Slog.i(TAG, "Screen turned off..."); if (DEBUG_WAKEUP) Slog.i(TAG, "Display" + displayId + " turned off..."); if (displayId == DEFAULT_DISPLAY) { updateScreenOffSleepToken(true); mRequestedOrSleepingDefaultDisplay = false; mDefaultDisplayPolicy.screenTurnedOff(); synchronized (mLock) { if (mKeyguardDelegate != null) { Loading @@ -4268,6 +4291,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { } mDefaultDisplayRotation.updateOrientationListener(); reportScreenStateToVrManager(false); if (mCameraGestureTriggeredDuringGoingToSleep) { wakeUp(SystemClock.uptimeMillis(), mAllowTheaterModeWakeFromPowerKey, PowerManager.WAKE_REASON_CAMERA_LAUNCH, "com.android.systemui:CAMERA_GESTURE_PREVENT_LOCK"); } } } private long getKeyguardDrawnTimeout() { Loading @@ -4280,13 +4309,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Called on the DisplayManager's DisplayPowerController thread. @Override public void screenTurningOn(int displayId, final ScreenOnListener screenOnListener) { if (displayId != DEFAULT_DISPLAY) { return; } if (DEBUG_WAKEUP) Slog.i(TAG, "Display " + displayId + " turning on..."); if (DEBUG_WAKEUP) Slog.i(TAG, "Screen turning on..."); Trace.asyncTraceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "screenTurningOn", 0 /* cookie */); if (displayId == DEFAULT_DISPLAY) { Trace.asyncTraceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "screenTurningOn", 0 /* cookie */); updateScreenOffSleepToken(false); mDefaultDisplayPolicy.screenTurnedOn(screenOnListener); Loading @@ -4302,6 +4329,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { mHandler.sendEmptyMessage(MSG_KEYGUARD_DRAWN_COMPLETE); } } } else { mScreenOnListeners.put(displayId, screenOnListener); } } // Called on the DisplayManager's DisplayPowerController thread. Loading @@ -4321,11 +4351,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { @Override public void screenTurningOff(int displayId, ScreenOffListener screenOffListener) { mWindowManagerFuncs.screenTurningOff(displayId, screenOffListener); if (displayId != DEFAULT_DISPLAY) { return; } mWindowManagerFuncs.screenTurningOff(screenOffListener); mRequestedOrSleepingDefaultDisplay = true; synchronized (mLock) { if (mKeyguardDelegate != null) { mKeyguardDelegate.onScreenTurningOff(); Loading Loading @@ -4380,6 +4411,14 @@ public class PhoneWindowManager implements WindowManagerPolicy { listener.onScreenOn(); } for (int i = mScreenOnListeners.size() - 1; i >= 0; i--) { final ScreenOnListener screenOnListener = mScreenOnListeners.valueAt(i); if (screenOnListener != null) { screenOnListener.onScreenOn(); } } mScreenOnListeners.clear(); if (enableScreen) { try { mWindowManager.enableScreenIfNeeded(); Loading Loading @@ -4410,7 +4449,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { @Override public boolean okToAnimate() { return mDefaultDisplayPolicy.isAwake() && !mGoingToSleep; return mDefaultDisplayPolicy.isAwake() && !mDeviceGoingToSleep; } /** {@inheritDoc} */ Loading Loading @@ -4777,7 +4816,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { mWindowManagerFuncs.lockDeviceNow(); break; case LID_BEHAVIOR_SLEEP: goToSleep(SystemClock.uptimeMillis(), sleepDefaultDisplay(SystemClock.uptimeMillis(), PowerManager.GO_TO_SLEEP_REASON_LID_SWITCH, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); break; Loading services/core/java/com/android/server/policy/WindowManagerPolicy.java +2 −1 Original line number Diff line number Diff line Loading @@ -303,9 +303,10 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { /** * Notifies the window manager that screen is being turned off. * * @param displayId the ID of the display which is turning off * @param listener callback to call when display can be turned off */ void screenTurningOff(ScreenOffListener listener); void screenTurningOff(int displayId, ScreenOffListener listener); /** * Convert the lid state to a human readable format. Loading services/core/java/com/android/server/wm/TaskSnapshotController.java +4 −3 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.os.Handler; import android.util.ArraySet; import android.util.Pair; import android.util.Slog; import android.view.Display; import android.view.InsetsState; import android.view.SurfaceControl; import android.view.ThreadedRenderer; Loading Loading @@ -624,7 +625,7 @@ class TaskSnapshotController { /** * Called when screen is being turned off. */ void screenTurningOff(ScreenOffListener listener) { void screenTurningOff(int displayId, ScreenOffListener listener) { if (shouldDisableSnapshots()) { listener.onScreenOff(); return; Loading @@ -635,7 +636,7 @@ class TaskSnapshotController { try { synchronized (mService.mGlobalLock) { mTmpTasks.clear(); mService.mRoot.forAllTasks(task -> { mService.mRoot.getDisplayContent(displayId).forAllTasks(task -> { // Since RecentsAnimation will handle task snapshot while switching apps // with the best capture timing (e.g. IME window capture), No need // additional task capture while task is controlled by RecentsAnimation. Loading @@ -645,7 +646,7 @@ class TaskSnapshotController { }); // Allow taking snapshot of home when turning screen off to reduce the delay of // waking from secure lock to home. final boolean allowSnapshotHome = final boolean allowSnapshotHome = displayId == Display.DEFAULT_DISPLAY && mService.mPolicy.isKeyguardSecure(mService.mCurrentUserId); snapshotTasks(mTmpTasks, allowSnapshotHome); } Loading services/core/java/com/android/server/wm/WindowManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -2985,8 +2985,8 @@ public class WindowManagerService extends IWindowManager.Stub } @Override public void screenTurningOff(ScreenOffListener listener) { mTaskSnapshotController.screenTurningOff(listener); public void screenTurningOff(int displayId, ScreenOffListener listener) { mTaskSnapshotController.screenTurningOff(displayId, listener); } @Override Loading Loading
services/core/java/com/android/server/policy/PhoneWindowManager.java +93 −54 Original line number Diff line number Diff line Loading @@ -345,6 +345,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { */ private final Object mLock = new Object(); /** List of {@link ScreenOnListener}s which do not belong to the default display. */ private final SparseArray<ScreenOnListener> mScreenOnListeners = new SparseArray<>(); Context mContext; IWindowManager mWindowManager; WindowManagerFuncs mWindowManagerFuncs; Loading Loading @@ -434,8 +437,25 @@ public class PhoneWindowManager implements WindowManagerPolicy { volatile boolean mBeganFromNonInteractive; volatile boolean mEndCallKeyHandled; volatile boolean mCameraGestureTriggeredDuringGoingToSleep; volatile boolean mGoingToSleep; volatile boolean mRequestedOrGoingToSleep; /** * {@code true} if the device is entering a low-power state; {@code false otherwise}. * * <p>This differs from {@link #mRequestedOrSleepingDefaultDisplay} which tracks the power state * of the {@link #mDefaultDisplay default display} versus the power state of the entire device. */ volatile boolean mDeviceGoingToSleep; /** * {@code true} if the {@link #mDefaultDisplay default display} is entering or was requested to * enter a low-power state; {@code false otherwise}. * * <p>This differs from {@link #mDeviceGoingToSleep} which tracks the power state of the entire * device versus the power state of the {@link #mDefaultDisplay default display}. */ // TODO(b/178103325): Track sleep/requested sleep for every display. volatile boolean mRequestedOrSleepingDefaultDisplay; volatile boolean mRecentsVisible; volatile boolean mNavBarVirtualKeyHapticFeedbackEnabled = true; volatile boolean mPictureInPictureVisible; Loading Loading @@ -917,13 +937,14 @@ public class PhoneWindowManager implements WindowManagerPolicy { case SHORT_PRESS_POWER_NOTHING: break; case SHORT_PRESS_POWER_GO_TO_SLEEP: goToSleepFromPowerButton(eventTime, 0); sleepDefaultDisplayFromPowerButton(eventTime, 0); break; case SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP: goToSleepFromPowerButton(eventTime, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); sleepDefaultDisplayFromPowerButton(eventTime, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); break; case SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP_AND_GO_HOME: if (goToSleepFromPowerButton(eventTime, if (sleepDefaultDisplayFromPowerButton(eventTime, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE)) { launchHomeFromHotKey(DEFAULT_DISPLAY); } Loading Loading @@ -951,11 +972,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { } /** * Sends the device to sleep as a result of a power button press. * Sends the default display to sleep as a result of a power button press. * * @return True if the was device was sent to sleep, false if sleep was suppressed. * @return {@code true} if the device was sent to sleep, {@code false} if the device did not * sleep. */ private boolean goToSleepFromPowerButton(long eventTime, int flags) { private boolean sleepDefaultDisplayFromPowerButton(long eventTime, int flags) { // Before we actually go to sleep, we check the last wakeup reason. // If the device very recently woke up from a gesture (like user lifting their device) // then ignore the sleep instruction. This is because users have developed Loading @@ -975,12 +997,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } goToSleep(eventTime, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, flags); sleepDefaultDisplay(eventTime, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, flags); return true; } private void goToSleep(long eventTime, int reason, int flags) { mRequestedOrGoingToSleep = true; private void sleepDefaultDisplay(long eventTime, int reason, int flags) { mRequestedOrSleepingDefaultDisplay = true; mPowerManager.goToSleep(eventTime, reason, flags); } Loading Loading @@ -1017,7 +1039,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { Settings.Global.THEATER_MODE_ON, 1); if (mGoToSleepOnButtonPressTheaterMode && interactive) { goToSleep(eventTime, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, 0); sleepDefaultDisplay(eventTime, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, 0); } } break; Loading Loading @@ -1126,7 +1149,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { case SHORT_PRESS_SLEEP_GO_TO_SLEEP: case SHORT_PRESS_SLEEP_GO_TO_SLEEP_AND_GO_HOME: Slog.i(TAG, "sleepRelease() calling goToSleep(GO_TO_SLEEP_REASON_SLEEP_BUTTON)"); goToSleep(eventTime, PowerManager.GO_TO_SLEEP_REASON_SLEEP_BUTTON, 0); sleepDefaultDisplay(eventTime, PowerManager.GO_TO_SLEEP_REASON_SLEEP_BUTTON, 0); break; } } Loading Loading @@ -3511,7 +3534,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } if ((mEndcallBehavior & Settings.System.END_BUTTON_BEHAVIOR_SLEEP) != 0) { goToSleep(event.getEventTime(), sleepDefaultDisplay(event.getEventTime(), PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, 0); isWakeKey = false; } Loading @@ -3538,10 +3561,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Any activity on the power button stops the accessibility shortcut result &= ~ACTION_PASS_TO_USER; isWakeKey = false; // wake-up will be handled separately final boolean isDefaultDisplayOn = Display.isOnState(mDefaultDisplay.getState()); final boolean interactiveAndOn = interactive && isDefaultDisplayOn; if (down) { interceptPowerKeyDown(event, interactive); interceptPowerKeyDown(event, interactiveAndOn); } else { interceptPowerKeyUp(event, interactive, canceled); interceptPowerKeyUp(event, interactiveAndOn, canceled); } break; } Loading Loading @@ -3746,7 +3771,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { final MutableBoolean outLaunched = new MutableBoolean(false); final boolean gesturedServiceIntercepted = gestureService.interceptPowerKeyDown(event, interactive, outLaunched); if (outLaunched.value && mRequestedOrGoingToSleep) { if (outLaunched.value && mRequestedOrSleepingDefaultDisplay) { mCameraGestureTriggeredDuringGoingToSleep = true; } return gesturedServiceIntercepted; Loading Loading @@ -4088,8 +4113,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { pmSleepReason)) + ")"); } mGoingToSleep = true; mRequestedOrGoingToSleep = true; mDeviceGoingToSleep = true; mRequestedOrSleepingDefaultDisplay = true; if (mKeyguardDelegate != null) { mKeyguardDelegate.onStartedGoingToSleep(pmSleepReason); Loading @@ -4108,8 +4133,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { } MetricsLogger.histogram(mContext, "screen_timeout", mLockScreenTimeout / 1000); mGoingToSleep = false; mRequestedOrGoingToSleep = false; mDeviceGoingToSleep = false; mRequestedOrSleepingDefaultDisplay = false; mDefaultDisplayPolicy.setAwake(false); // We must get this work done here because the power manager will drop Loading Loading @@ -4253,13 +4278,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Called on the DisplayManager's DisplayPowerController thread. @Override public void screenTurnedOff(int displayId) { if (displayId != DEFAULT_DISPLAY) { return; } if (DEBUG_WAKEUP) Slog.i(TAG, "Screen turned off..."); if (DEBUG_WAKEUP) Slog.i(TAG, "Display" + displayId + " turned off..."); if (displayId == DEFAULT_DISPLAY) { updateScreenOffSleepToken(true); mRequestedOrSleepingDefaultDisplay = false; mDefaultDisplayPolicy.screenTurnedOff(); synchronized (mLock) { if (mKeyguardDelegate != null) { Loading @@ -4268,6 +4291,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { } mDefaultDisplayRotation.updateOrientationListener(); reportScreenStateToVrManager(false); if (mCameraGestureTriggeredDuringGoingToSleep) { wakeUp(SystemClock.uptimeMillis(), mAllowTheaterModeWakeFromPowerKey, PowerManager.WAKE_REASON_CAMERA_LAUNCH, "com.android.systemui:CAMERA_GESTURE_PREVENT_LOCK"); } } } private long getKeyguardDrawnTimeout() { Loading @@ -4280,13 +4309,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Called on the DisplayManager's DisplayPowerController thread. @Override public void screenTurningOn(int displayId, final ScreenOnListener screenOnListener) { if (displayId != DEFAULT_DISPLAY) { return; } if (DEBUG_WAKEUP) Slog.i(TAG, "Display " + displayId + " turning on..."); if (DEBUG_WAKEUP) Slog.i(TAG, "Screen turning on..."); Trace.asyncTraceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "screenTurningOn", 0 /* cookie */); if (displayId == DEFAULT_DISPLAY) { Trace.asyncTraceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "screenTurningOn", 0 /* cookie */); updateScreenOffSleepToken(false); mDefaultDisplayPolicy.screenTurnedOn(screenOnListener); Loading @@ -4302,6 +4329,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { mHandler.sendEmptyMessage(MSG_KEYGUARD_DRAWN_COMPLETE); } } } else { mScreenOnListeners.put(displayId, screenOnListener); } } // Called on the DisplayManager's DisplayPowerController thread. Loading @@ -4321,11 +4351,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { @Override public void screenTurningOff(int displayId, ScreenOffListener screenOffListener) { mWindowManagerFuncs.screenTurningOff(displayId, screenOffListener); if (displayId != DEFAULT_DISPLAY) { return; } mWindowManagerFuncs.screenTurningOff(screenOffListener); mRequestedOrSleepingDefaultDisplay = true; synchronized (mLock) { if (mKeyguardDelegate != null) { mKeyguardDelegate.onScreenTurningOff(); Loading Loading @@ -4380,6 +4411,14 @@ public class PhoneWindowManager implements WindowManagerPolicy { listener.onScreenOn(); } for (int i = mScreenOnListeners.size() - 1; i >= 0; i--) { final ScreenOnListener screenOnListener = mScreenOnListeners.valueAt(i); if (screenOnListener != null) { screenOnListener.onScreenOn(); } } mScreenOnListeners.clear(); if (enableScreen) { try { mWindowManager.enableScreenIfNeeded(); Loading Loading @@ -4410,7 +4449,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { @Override public boolean okToAnimate() { return mDefaultDisplayPolicy.isAwake() && !mGoingToSleep; return mDefaultDisplayPolicy.isAwake() && !mDeviceGoingToSleep; } /** {@inheritDoc} */ Loading Loading @@ -4777,7 +4816,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { mWindowManagerFuncs.lockDeviceNow(); break; case LID_BEHAVIOR_SLEEP: goToSleep(SystemClock.uptimeMillis(), sleepDefaultDisplay(SystemClock.uptimeMillis(), PowerManager.GO_TO_SLEEP_REASON_LID_SWITCH, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); break; Loading
services/core/java/com/android/server/policy/WindowManagerPolicy.java +2 −1 Original line number Diff line number Diff line Loading @@ -303,9 +303,10 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { /** * Notifies the window manager that screen is being turned off. * * @param displayId the ID of the display which is turning off * @param listener callback to call when display can be turned off */ void screenTurningOff(ScreenOffListener listener); void screenTurningOff(int displayId, ScreenOffListener listener); /** * Convert the lid state to a human readable format. Loading
services/core/java/com/android/server/wm/TaskSnapshotController.java +4 −3 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.os.Handler; import android.util.ArraySet; import android.util.Pair; import android.util.Slog; import android.view.Display; import android.view.InsetsState; import android.view.SurfaceControl; import android.view.ThreadedRenderer; Loading Loading @@ -624,7 +625,7 @@ class TaskSnapshotController { /** * Called when screen is being turned off. */ void screenTurningOff(ScreenOffListener listener) { void screenTurningOff(int displayId, ScreenOffListener listener) { if (shouldDisableSnapshots()) { listener.onScreenOff(); return; Loading @@ -635,7 +636,7 @@ class TaskSnapshotController { try { synchronized (mService.mGlobalLock) { mTmpTasks.clear(); mService.mRoot.forAllTasks(task -> { mService.mRoot.getDisplayContent(displayId).forAllTasks(task -> { // Since RecentsAnimation will handle task snapshot while switching apps // with the best capture timing (e.g. IME window capture), No need // additional task capture while task is controlled by RecentsAnimation. Loading @@ -645,7 +646,7 @@ class TaskSnapshotController { }); // Allow taking snapshot of home when turning screen off to reduce the delay of // waking from secure lock to home. final boolean allowSnapshotHome = final boolean allowSnapshotHome = displayId == Display.DEFAULT_DISPLAY && mService.mPolicy.isKeyguardSecure(mService.mCurrentUserId); snapshotTasks(mTmpTasks, allowSnapshotHome); } Loading
services/core/java/com/android/server/wm/WindowManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -2985,8 +2985,8 @@ public class WindowManagerService extends IWindowManager.Stub } @Override public void screenTurningOff(ScreenOffListener listener) { mTaskSnapshotController.screenTurningOff(listener); public void screenTurningOff(int displayId, ScreenOffListener listener) { mTaskSnapshotController.screenTurningOff(displayId, listener); } @Override Loading