Avoid lock screen flash when going to dream.

This is specifically when entering a dream from a single power button
tap on devices that are configured with that behavior.

Bug: 261662912
Test: manually by tapping power button to enter a dream and observing
that the device is locks at the same time without flashing the lock
screen.

Change-Id: I89ecce9cc39cb1cb6f7b19068908ba436643223c
This commit is contained in:
Will Leshner
2023-01-04 09:55:35 -08:00
parent 7be84b8a56
commit 77e35e9edd

View File

@@ -575,6 +575,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// What we do when the user double-taps on home
private int mDoubleTapOnHomeBehavior;
// Whether to lock the device after the next app transition has finished.
private boolean mLockAfterAppTransitionFinished;
// Allowed theater mode wake actions
private boolean mAllowTheaterModeWakeFromKey;
private boolean mAllowTheaterModeWakeFromPowerKey;
@@ -1073,11 +1076,10 @@ 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 locking is a side-effect of the no
// dream action that is executed if we early return above.
// TODO(b/261662912): Find a better way to lock the device that doesn't result in jank.
lockNow(null);
synchronized (mLock) {
// Lock the device after the dream transition has finished.
mLockAfterAppTransitionFinished = true;
}
dreamManagerInternal.requestDream();
}
@@ -2197,6 +2199,22 @@ public class PhoneWindowManager implements WindowManagerPolicy {
handleTransitionForKeyguardLw(
keyguardGoingAwayCancelled /* startKeyguardExitAnimation */,
true /* notifyOccluded */);
synchronized (mLock) {
mLockAfterAppTransitionFinished = false;
}
}
@Override
public void onAppTransitionFinishedLocked(IBinder token) {
synchronized (mLock) {
if (!mLockAfterAppTransitionFinished) {
return;
}
mLockAfterAppTransitionFinished = false;
}
lockNow(null);
}
});