Merge "Fix lockscreen jump-cutting in during screen off." into tm-qpr-dev

This commit is contained in:
Josh Tsuji
2023-01-08 18:35:24 +00:00
committed by Android (Google) Code Review
2 changed files with 43 additions and 4 deletions

View File

@@ -1458,16 +1458,16 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
public void maybeHandlePendingLock() { public void maybeHandlePendingLock() {
if (mPendingLock) { if (mPendingLock) {
// The screen off animation is playing, so if we lock now, the foreground app will // The screen off animation is playing or is about to be, so if we lock now, the
// vanish and the keyguard will jump-cut in. Delay it, until either: // foreground app will vanish and the keyguard will jump-cut in. Delay it, until either:
// - The screen off animation ends. We will call maybeHandlePendingLock from // - The screen off animation ends. We will call maybeHandlePendingLock from
// the end action in UnlockedScreenOffAnimationController#animateInKeyguard. // the end action in UnlockedScreenOffAnimationController#animateInKeyguard.
// - The screen off animation is cancelled by the device waking back up. We will call // - The screen off animation is cancelled by the device waking back up. We will call
// maybeHandlePendingLock from KeyguardViewMediator#onStartedWakingUp. // maybeHandlePendingLock from KeyguardViewMediator#onStartedWakingUp.
if (mScreenOffAnimationController.isKeyguardShowDelayed()) { if (mScreenOffAnimationController.shouldDelayKeyguardShow()) {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "#maybeHandlePendingLock: not handling because the screen off " Log.d(TAG, "#maybeHandlePendingLock: not handling because the screen off "
+ "animation's isKeyguardShowDelayed() returned true. This should be " + "animation's shouldDelayKeyguardShow() returned true. This should be "
+ "handled soon by #onStartedWakingUp, or by the end actions of the " + "handled soon by #onStartedWakingUp, or by the end actions of the "
+ "screen off animation."); + "screen off animation.");
} }

View File

@@ -444,6 +444,45 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
TestableLooper.get(this).processAllMessages(); TestableLooper.get(this).processAllMessages();
} }
@Test
@TestableLooper.RunWithLooper(setAsMainLooper = true)
public void testKeyguardDelayedOnGoingToSleep_ifScreenOffAnimationWillPlayButIsntPlayingYet() {
mViewMediator.onSystemReady();
TestableLooper.get(this).processAllMessages();
mViewMediator.setShowingLocked(false);
TestableLooper.get(this).processAllMessages();
mViewMediator.onStartedGoingToSleep(OFF_BECAUSE_OF_USER);
TestableLooper.get(this).processAllMessages();
when(mScreenOffAnimationController.shouldDelayKeyguardShow()).thenReturn(true);
when(mScreenOffAnimationController.isKeyguardShowDelayed()).thenReturn(false);
mViewMediator.onFinishedGoingToSleep(OFF_BECAUSE_OF_USER, false);
TestableLooper.get(this).processAllMessages();
assertFalse(mViewMediator.isShowingAndNotOccluded());
}
@Test
@TestableLooper.RunWithLooper(setAsMainLooper = true)
public void testKeyguardNotDelayedOnGoingToSleep_ifScreenOffAnimationWillNotPlay() {
mViewMediator.onSystemReady();
TestableLooper.get(this).processAllMessages();
mViewMediator.setShowingLocked(false);
TestableLooper.get(this).processAllMessages();
mViewMediator.onStartedGoingToSleep(OFF_BECAUSE_OF_USER);
TestableLooper.get(this).processAllMessages();
when(mScreenOffAnimationController.shouldDelayKeyguardShow()).thenReturn(false);
mViewMediator.onFinishedGoingToSleep(OFF_BECAUSE_OF_USER, false);
TestableLooper.get(this).processAllMessages();
assertTrue(mViewMediator.isShowingAndNotOccluded());
}
private void createAndStartViewMediator() { private void createAndStartViewMediator() {
mViewMediator = new KeyguardViewMediator( mViewMediator = new KeyguardViewMediator(
mContext, mContext,