From c5f6dc060408b8ce9ce293ec99c83b17d2ac60bf Mon Sep 17 00:00:00 2001 From: Will Leshner Date: Mon, 28 Nov 2022 15:06:03 -0800 Subject: [PATCH] Lock device on short power button press. If a device is configured to dream on short power press, also make sure it locks as well. Also fixes an issue where the screen does not turn off when another user (not user zero) presses the power button. Bug: 260135090 Test: manually by configuring device to dream on short power press and then making sure it is also locked after press. Change-Id: I16ca4eab7a0e8a3f2ef42c090147bd7e62445c69 --- .../android/server/policy/PhoneWindowManager.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 6d5da3254eac1..85a2a5d0e0ebf 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -1049,6 +1049,19 @@ public class PhoneWindowManager implements WindowManagerPolicy { return; } + // Make sure the device locks. Unfortunately, this has the side-effect of briefly revealing + // the lock screen before the dream appears. Note that this locking behavior needs to + // happen regardless of whether we end up dreaming (below) or not. + // TODO(b/261662912): Find a better way to lock the device that doesn't result in jank. + lockNow(null); + + // Don't dream if the user isn't user zero. + // TODO(b/261907079): Move this check to DreamManagerService#canStartDreamingInternal(). + if (ActivityManager.getCurrentUser() != UserHandle.USER_SYSTEM) { + noDreamAction.run(); + return; + } + final DreamManagerInternal dreamManagerInternal = getDreamManagerInternal(); if (dreamManagerInternal == null || !dreamManagerInternal.canStartDreaming(isScreenOn)) { noDreamAction.run();