Merge "Fix lockscreen jump-cutting in during screen off." into tm-qpr-dev
This commit is contained in:
@@ -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.");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user