From 282457293b1f51b4ed80002c259acabd4f646122 Mon Sep 17 00:00:00 2001 From: Matt Pietal Date: Fri, 25 Mar 2022 15:23:41 -0400 Subject: Move onDrawn callback earlier The new remote animation flow is waiting for the onDrawn callback to be issues before triggering the exit animation. This means for wakeAndUnlock flows, onDrawn cannot wait for the exit animation to begin. Remove all code that put this callback into a pending state. Also remove BiometricUnlockController delay. This causes a poor animation experience when unlocking with devices (sunfish) that delay the unlock. Fixes: 220340156 Test: atest KeyguardViewMediatorTest ScreenOnCoordinatorTest && Use rear FPS devices with AoD on/off Change-Id: I6129c9d1fea76f8dded2a8d567c75fb21085a5dd (cherry picked from commit e2608c01b74ea2f7da1727d68abf1a07abe3f780) --- core/res/res/values/config.xml | 4 --- core/res/res/values/symbols.xml | 1 - .../keyguard/mediator/ScreenOnCoordinator.kt | 20 -------------- .../systemui/keyguard/KeyguardViewMediator.java | 31 +++++++--------------- .../statusbar/phone/BiometricUnlockController.java | 14 ++-------- .../keyguard/mediator/ScreenOnCoordinatorTest.kt | 21 --------------- .../phone/BiometricsUnlockControllerTest.java | 1 - 7 files changed, 12 insertions(+), 80 deletions(-) diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index fa58a71f25b9..c09b612357d7 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1372,10 +1372,6 @@ 1 0.0 - - 0 - diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index cefba56b957e..58cc71774806 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3972,7 +3972,6 @@ - diff --git a/packages/SystemUI/src/com/android/keyguard/mediator/ScreenOnCoordinator.kt b/packages/SystemUI/src/com/android/keyguard/mediator/ScreenOnCoordinator.kt index 705cf6d5df8e..4b7e9a57ef6a 100644 --- a/packages/SystemUI/src/com/android/keyguard/mediator/ScreenOnCoordinator.kt +++ b/packages/SystemUI/src/com/android/keyguard/mediator/ScreenOnCoordinator.kt @@ -48,18 +48,6 @@ class ScreenOnCoordinator @Inject constructor( SysUIUnfoldComponent::getFoldAodAnimationController).getOrNull() private val pendingTasks = PendingTasksContainer() - private var wakeAndUnlockingTask: Runnable? = null - var wakeAndUnlocking = false - set(value) { - if (!value && field) { - // When updating the value back to false, mark the task complete in order to - // callback onDrawn - wakeAndUnlockingTask?.run() - wakeAndUnlockingTask = null - } - field = value - } - init { screenLifecycle.addObserver(this) } @@ -76,10 +64,6 @@ class ScreenOnCoordinator @Inject constructor( unfoldLightRevealAnimation?.onScreenTurningOn(pendingTasks.registerTask("unfold-reveal")) foldAodAnimationController?.onScreenTurningOn(pendingTasks.registerTask("fold-to-aod")) - if (wakeAndUnlocking) { - wakeAndUnlockingTask = pendingTasks.registerTask("wake-and-unlocking") - } - pendingTasks.onTasksComplete { onDrawn.run() } Trace.endSection() } @@ -91,8 +75,4 @@ class ScreenOnCoordinator @Inject constructor( pendingTasks.reset() } - - override fun onScreenTurnedOff() { - wakeAndUnlockingTask = null - } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 0486fee4239d..0dcdbf1f5beb 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -309,6 +309,8 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, // true if the keyguard is hidden by another window private boolean mOccluded = false; + private boolean mWakeAndUnlocking = false; + /** * Helps remember whether the screen has turned on since the last time * it turned off due to timeout. see {@link #onScreenTurnedOff(int)} @@ -443,7 +445,6 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, private boolean mLockLater; private boolean mShowHomeOverLockscreen; private boolean mInGestureNavigationMode; - private CharSequence mCustomMessage; /** @@ -1201,7 +1202,7 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, synchronized (this) { mDeviceInteractive = false; mGoingToSleep = false; - mScreenOnCoordinator.setWakeAndUnlocking(false); + mWakeAndUnlocking = false; mAnimatingScreenOff = mDozeParameters.shouldAnimateDozingChange(); resetKeyguardDonePendingLocked(); @@ -2215,7 +2216,7 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, mHiding = false; mKeyguardExitAnimationRunner = null; - mScreenOnCoordinator.setWakeAndUnlocking(false); + mWakeAndUnlocking = false; mPendingLock = false; setShowingLocked(true); mKeyguardViewControllerLazy.get().show(options); @@ -2247,14 +2248,12 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, int flags = 0; if (mKeyguardViewControllerLazy.get().shouldDisableWindowAnimationsForUnlock() - || mScreenOnCoordinator.getWakeAndUnlocking() - && !mWallpaperSupportsAmbientMode) { + || mWakeAndUnlocking && !mWallpaperSupportsAmbientMode) { flags |= WindowManagerPolicyConstants .KEYGUARD_GOING_AWAY_FLAG_NO_WINDOW_ANIMATIONS; } if (mKeyguardViewControllerLazy.get().isGoingToNotificationShade() - || mScreenOnCoordinator.getWakeAndUnlocking() - && mWallpaperSupportsAmbientMode) { + || mWakeAndUnlocking && mWallpaperSupportsAmbientMode) { // When the wallpaper supports ambient mode, the scrim isn't fully opaque during // wake and unlock, and we should fade in the app on top of the wallpaper flags |= WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_TO_SHADE; @@ -2367,16 +2366,6 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, IRemoteAnimationRunner runner = mKeyguardExitAnimationRunner; mKeyguardExitAnimationRunner = null; - if (mScreenOnCoordinator.getWakeAndUnlocking()) { - - // Hack level over 9000: To speed up wake-and-unlock sequence, force it to report - // the next draw from here, so we don't have to wait for window manager to signal - // this to our ViewRootImpl. - mKeyguardViewControllerLazy.get().getViewRootImpl().setReportNextDraw( - false /* syncBuffer */); - mScreenOnCoordinator.setWakeAndUnlocking(false); - } - LatencyTracker.getInstance(mContext) .onActionEnd(LatencyTracker.ACTION_LOCKSCREEN_UNLOCK); @@ -2499,7 +2488,7 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, } setShowingLocked(false); - mScreenOnCoordinator.setWakeAndUnlocking(false); + mWakeAndUnlocking = false; mDismissCallbackRegistry.notifyDismissSucceeded(); resetKeyguardDonePendingLocked(); mHideAnimationRun = false; @@ -2743,7 +2732,7 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, public void onWakeAndUnlocking() { Trace.beginSection("KeyguardViewMediator#onWakeAndUnlocking"); - mScreenOnCoordinator.setWakeAndUnlocking(true); + mWakeAndUnlocking = true; keyguardDone(); Trace.endSection(); } @@ -2879,7 +2868,7 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, pw.print(" mHideAnimationRun: "); pw.println(mHideAnimationRun); pw.print(" mPendingReset: "); pw.println(mPendingReset); pw.print(" mPendingLock: "); pw.println(mPendingLock); - pw.print(" wakeAndUnlocking: "); pw.println(mScreenOnCoordinator.getWakeAndUnlocking()); + pw.print(" wakeAndUnlocking: "); pw.println(mWakeAndUnlocking); } /** @@ -2953,7 +2942,7 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, } private void setShowingLocked(boolean showing, boolean forceCallbacks) { - final boolean aodShowing = mDozing && !mScreenOnCoordinator.getWakeAndUnlocking(); + final boolean aodShowing = mDozing && !mWakeAndUnlocking; final boolean notifyDefaultDisplayCallbacks = showing != mShowing || forceCallbacks; final boolean updateActivityLockScreenState = showing != mShowing || aodShowing != mAodShowing || forceCallbacks; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java index aab5ff8d92e6..159d33b5a143 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java @@ -166,7 +166,6 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp private final NotificationShadeWindowController mNotificationShadeWindowController; private final SessionTracker mSessionTracker; private final int mConsecutiveFpFailureThreshold; - private final int mWakeUpDelay; private int mMode; private BiometricSourceType mBiometricType; private KeyguardViewController mKeyguardViewController; @@ -302,7 +301,6 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp mScrimController = scrimController; mKeyguardStateController = keyguardStateController; mHandler = handler; - mWakeUpDelay = resources.getInteger(com.android.internal.R.integer.config_wakeUpDelayDoze); mConsecutiveFpFailureThreshold = resources.getInteger( R.integer.fp_consecutive_failure_time_ms); mKeyguardBypassController = keyguardBypassController; @@ -433,7 +431,6 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp // During wake and unlock, we need to draw black before waking up to avoid abrupt // brightness changes due to display state transitions. boolean alwaysOnEnabled = mDozeParameters.getAlwaysOn(); - boolean delayWakeUp = mode == MODE_WAKE_AND_UNLOCK && alwaysOnEnabled && mWakeUpDelay > 0; Runnable wakeUp = ()-> { if (!wasDeviceInteractive) { if (DEBUG_BIO_WAKELOCK) { @@ -442,15 +439,12 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp mPowerManager.wakeUp(SystemClock.uptimeMillis(), PowerManager.WAKE_REASON_GESTURE, "android.policy:BIOMETRIC"); } - if (delayWakeUp) { - mKeyguardViewMediator.onWakeAndUnlocking(); - } Trace.beginSection("release wake-and-unlock"); releaseBiometricWakeLock(); Trace.endSection(); }; - if (!delayWakeUp && mMode != MODE_NONE) { + if (mMode != MODE_NONE) { wakeUp.run(); } switch (mMode) { @@ -504,11 +498,7 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp mUpdateMonitor.awakenFromDream(); } mNotificationShadeWindowController.setNotificationShadeFocusable(false); - if (delayWakeUp) { - mHandler.postDelayed(wakeUp, mWakeUpDelay); - } else { - mKeyguardViewMediator.onWakeAndUnlocking(); - } + mKeyguardViewMediator.onWakeAndUnlocking(); Trace.endSection(); break; case MODE_ONLY_WAKE: diff --git a/packages/SystemUI/tests/src/com/android/keyguard/mediator/ScreenOnCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/mediator/ScreenOnCoordinatorTest.kt index 96e6bd15a3e2..5734c3de70e0 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/mediator/ScreenOnCoordinatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/mediator/ScreenOnCoordinatorTest.kt @@ -37,7 +37,6 @@ import org.mockito.ArgumentCaptor import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito.`when` -import org.mockito.Mockito.never import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations @@ -104,26 +103,6 @@ class ScreenOnCoordinatorTest : SysuiTestCase() { verify(runnable).run() } - @Test - fun testWakeAndUnlockDelaysRunnable() { - // GIVEN wakeAndUnlocking has been set to true - screenOnCoordinator.wakeAndUnlocking = true - - // WHEN the screen turns on and two tasks have completed - screenOnCoordinator.onScreenTurningOn(runnable) - onUnfoldOverlayReady() - onFoldAodReady() - - // THEN the runnable should not have run yet - verify(runnable, never()).run() - - // WHEN the value of wakeAndUnlocking changes - screenOnCoordinator.wakeAndUnlocking = false - - // THEN the runnable should have run, as it is the last task to complete - verify(runnable).run() - } - private fun onUnfoldOverlayReady() { verify(unfoldAnimation).onScreenTurningOn(capture(readyCaptor)) readyCaptor.getValue().run() diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java index 142c2c1ed017..fb8c339e73c8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java @@ -127,7 +127,6 @@ public class BiometricsUnlockControllerTest extends SysuiTestCase { when(mAuthController.isUdfpsFingerDown()).thenReturn(false); when(mKeyguardBypassController.canPlaySubtleWindowAnimations()).thenReturn(true); mDependency.injectTestDependency(NotificationMediaManager.class, mMediaManager); - res.addOverride(com.android.internal.R.integer.config_wakeUpDelayDoze, 0); mBiometricUnlockController = new BiometricUnlockController(mDozeScrimController, mKeyguardViewMediator, mScrimController, mShadeController, mNotificationShadeWindowController, mKeyguardStateController, mHandler, -- cgit v1.2.3-59-g8ed1b