diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt index 29a7fe7d061ad..fec5c524868dc 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt @@ -50,6 +50,7 @@ import com.android.systemui.shared.system.smartspace.SmartspaceState import com.android.systemui.statusbar.NotificationShadeWindowController import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.phone.BiometricUnlockController +import com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK_FROM_DREAM import com.android.systemui.statusbar.policy.KeyguardStateController import dagger.Lazy import javax.inject.Inject @@ -171,7 +172,7 @@ class KeyguardUnlockAnimationController @Inject constructor( @JvmDefault fun onUnlockAnimationStarted( playingCannedAnimation: Boolean, - fromWakeAndUnlock: Boolean, + isWakeAndUnlockNotFromDream: Boolean, unlockAnimationStartDelay: Long, unlockAnimationDuration: Long ) {} @@ -575,10 +576,13 @@ class KeyguardUnlockAnimationController @Inject constructor( playCannedUnlockAnimation() } + // Notify if waking from AOD only + val isWakeAndUnlockNotFromDream = biometricUnlockControllerLazy.get().isWakeAndUnlock && + biometricUnlockControllerLazy.get().mode != MODE_WAKE_AND_UNLOCK_FROM_DREAM listeners.forEach { it.onUnlockAnimationStarted( playingCannedUnlockAnimation /* playingCannedAnimation */, - biometricUnlockControllerLazy.get().isWakeAndUnlock /* isWakeAndUnlock */, + isWakeAndUnlockNotFromDream /* isWakeAndUnlockNotFromDream */, CANNED_UNLOCK_START_DELAY /* unlockStartDelay */, LAUNCHER_ICONS_ANIMATION_DURATION_MS /* unlockAnimationDuration */) } diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index 047fea123dc39..9534ed9da27d0 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -934,10 +934,11 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump @Override public void onUnlockAnimationStarted( boolean playingCannedAnimation, - boolean isWakeAndUnlock, + boolean isWakeAndUnlockNotFromDream, long startDelay, long unlockAnimationDuration) { - unlockAnimationStarted(playingCannedAnimation, isWakeAndUnlock, startDelay); + unlockAnimationStarted(playingCannedAnimation, isWakeAndUnlockNotFromDream, + startDelay); } }); mAlternateBouncerInteractor = alternateBouncerInteractor; @@ -952,7 +953,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump private void unlockAnimationStarted( boolean playingCannedAnimation, - boolean isWakeAndUnlock, + boolean isWakeAndUnlockNotFromDream, long unlockAnimationStartDelay) { // Disable blurs while we're unlocking so that panel expansion does not // cause blurring. This will eventually be re-enabled by the panel view on @@ -960,7 +961,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump // unlock gesture, and we don't want that to cause blurring either. mDepthController.setBlursDisabledForUnlock(mTracking); - if (playingCannedAnimation && !isWakeAndUnlock) { + if (playingCannedAnimation && !isWakeAndUnlockNotFromDream) { // Hide the panel so it's not in the way or the surface behind the // keyguard, which will be appearing. If we're wake and unlocking, the // lock screen is hidden instantly so should not be flung away. diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardUnlockAnimationControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardUnlockAnimationControllerTest.kt index 477e076669b7c..e174bc475b85d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardUnlockAnimationControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardUnlockAnimationControllerTest.kt @@ -21,6 +21,7 @@ import com.android.systemui.statusbar.NotificationShadeWindowController import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.phone.BiometricUnlockController import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.argThat import com.android.systemui.util.mockito.whenever import junit.framework.Assert.assertEquals @@ -32,6 +33,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.Mockito.atLeastOnce +import org.mockito.Mockito.eq import org.mockito.Mockito.mock import org.mockito.Mockito.never import org.mockito.Mockito.times @@ -173,6 +175,46 @@ class KeyguardUnlockAnimationControllerTest : SysuiTestCase() { false /* cancelled */) } + @Test + fun onWakeAndUnlock_notifiesListenerWithTrue() { + whenever(biometricUnlockController.isWakeAndUnlock).thenReturn(true) + whenever(biometricUnlockController.mode).thenReturn( + BiometricUnlockController.MODE_WAKE_AND_UNLOCK) + + val listener = mock( + KeyguardUnlockAnimationController.KeyguardUnlockAnimationListener::class.java) + keyguardUnlockAnimationController.addKeyguardUnlockAnimationListener(listener) + + keyguardUnlockAnimationController.notifyStartSurfaceBehindRemoteAnimation( + remoteAnimationTargets, + wallpaperTargets, + 0 /* startTime */, + false /* requestedShowSurfaceBehindKeyguard */ + ) + + verify(listener).onUnlockAnimationStarted(any(), eq(true), any(), any()) + } + + @Test + fun onWakeAndUnlockFromDream_notifiesListenerWithFalse() { + whenever(biometricUnlockController.isWakeAndUnlock).thenReturn(true) + whenever(biometricUnlockController.mode).thenReturn( + BiometricUnlockController.MODE_WAKE_AND_UNLOCK_FROM_DREAM) + + val listener = mock( + KeyguardUnlockAnimationController.KeyguardUnlockAnimationListener::class.java) + keyguardUnlockAnimationController.addKeyguardUnlockAnimationListener(listener) + + keyguardUnlockAnimationController.notifyStartSurfaceBehindRemoteAnimation( + remoteAnimationTargets, + wallpaperTargets, + 0 /* startTime */, + false /* requestedShowSurfaceBehindKeyguard */ + ) + + verify(listener).onUnlockAnimationStarted(any(), eq(false), any(), any()) + } + /** * If we requested that the surface behind be made visible, and we're not flinging away the * keyguard, it means that we're swiping to unlock and want the surface visible so it can follow