diff options
2 files changed, 88 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt index 122e25975837..1a158c89dee7 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt @@ -637,7 +637,9 @@ class KeyguardUnlockAnimationController @Inject constructor( * Unlock to the launcher, using in-window animations, and the smartspace shared element * transition if possible. */ - private fun unlockToLauncherWithInWindowAnimations() { + + @VisibleForTesting + fun unlockToLauncherWithInWindowAnimations() { setSurfaceBehindAppearAmount(1f, wallpapers = false) try { @@ -662,7 +664,9 @@ class KeyguardUnlockAnimationController @Inject constructor( // Now that the Launcher surface (with its smartspace positioned identically to ours) is // visible, hide our smartspace. - lockscreenSmartspace?.visibility = View.INVISIBLE + if (lockscreenSmartspace?.visibility == View.VISIBLE) { + lockscreenSmartspace?.visibility = View.INVISIBLE + } // Start an animation for the wallpaper, which will finish keyguard exit when it completes. fadeInWallpaper() @@ -914,7 +918,9 @@ class KeyguardUnlockAnimationController @Inject constructor( willUnlockWithSmartspaceTransition = false // The lockscreen surface is gone, so it is now safe to re-show the smartspace. - lockscreenSmartspace?.visibility = View.VISIBLE + if (lockscreenSmartspace?.visibility == View.INVISIBLE) { + lockscreenSmartspace?.visibility = View.VISIBLE + } listeners.forEach { it.onUnlockAnimationFinished() } } 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 688c2db044e4..477e076669b7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardUnlockAnimationControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardUnlockAnimationControllerTest.kt @@ -10,6 +10,7 @@ import android.testing.TestableLooper.RunWithLooper import android.view.RemoteAnimationTarget import android.view.SurfaceControl import android.view.SyncRtSurfaceTransactionApplier +import android.view.View import android.view.ViewRootImpl import androidx.test.filters.SmallTest import com.android.keyguard.KeyguardViewController @@ -32,6 +33,7 @@ import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.Mockito.atLeastOnce import org.mockito.Mockito.mock +import org.mockito.Mockito.never import org.mockito.Mockito.times import org.mockito.Mockito.verify import org.mockito.Mockito.verifyNoMoreInteractions @@ -374,6 +376,83 @@ class KeyguardUnlockAnimationControllerTest : SysuiTestCase() { verifyNoMoreInteractions(surfaceTransactionApplier) } + @Test + fun unlockToLauncherWithInWindowAnimations_ssViewIsVisible() { + val mockLockscreenSmartspaceView = mock(View::class.java) + whenever(mockLockscreenSmartspaceView.visibility).thenReturn(View.VISIBLE) + keyguardUnlockAnimationController.lockscreenSmartspace = mockLockscreenSmartspaceView + + keyguardUnlockAnimationController.unlockToLauncherWithInWindowAnimations() + + verify(mockLockscreenSmartspaceView).visibility = View.INVISIBLE + } + + @Test + fun unlockToLauncherWithInWindowAnimations_ssViewIsInvisible() { + val mockLockscreenSmartspaceView = mock(View::class.java) + whenever(mockLockscreenSmartspaceView.visibility).thenReturn(View.INVISIBLE) + keyguardUnlockAnimationController.lockscreenSmartspace = mockLockscreenSmartspaceView + + keyguardUnlockAnimationController.unlockToLauncherWithInWindowAnimations() + + verify(mockLockscreenSmartspaceView, never()).visibility = View.INVISIBLE + } + + @Test + fun unlockToLauncherWithInWindowAnimations_ssViewIsGone() { + val mockLockscreenSmartspaceView = mock(View::class.java) + whenever(mockLockscreenSmartspaceView.visibility).thenReturn(View.GONE) + keyguardUnlockAnimationController.lockscreenSmartspace = mockLockscreenSmartspaceView + + keyguardUnlockAnimationController.unlockToLauncherWithInWindowAnimations() + + verify(mockLockscreenSmartspaceView, never()).visibility = View.INVISIBLE + } + + @Test + fun notifyFinishedKeyguardExitAnimation_ssViewIsInvisibleAndCancelledIsTrue() { + val mockLockscreenSmartspaceView = mock(View::class.java) + whenever(mockLockscreenSmartspaceView.visibility).thenReturn(View.INVISIBLE) + keyguardUnlockAnimationController.lockscreenSmartspace = mockLockscreenSmartspaceView + + keyguardUnlockAnimationController.notifyFinishedKeyguardExitAnimation(true) + + verify(mockLockscreenSmartspaceView).visibility = View.VISIBLE + } + + @Test + fun notifyFinishedKeyguardExitAnimation_ssViewIsGoneAndCancelledIsTrue() { + val mockLockscreenSmartspaceView = mock(View::class.java) + whenever(mockLockscreenSmartspaceView.visibility).thenReturn(View.GONE) + keyguardUnlockAnimationController.lockscreenSmartspace = mockLockscreenSmartspaceView + + keyguardUnlockAnimationController.notifyFinishedKeyguardExitAnimation(true) + + verify(mockLockscreenSmartspaceView, never()).visibility = View.VISIBLE + } + + @Test + fun notifyFinishedKeyguardExitAnimation_ssViewIsInvisibleAndCancelledIsFalse() { + val mockLockscreenSmartspaceView = mock(View::class.java) + whenever(mockLockscreenSmartspaceView.visibility).thenReturn(View.INVISIBLE) + keyguardUnlockAnimationController.lockscreenSmartspace = mockLockscreenSmartspaceView + + keyguardUnlockAnimationController.notifyFinishedKeyguardExitAnimation(false) + + verify(mockLockscreenSmartspaceView).visibility = View.VISIBLE + } + + @Test + fun notifyFinishedKeyguardExitAnimation_ssViewIsGoneAndCancelledIsFalse() { + val mockLockscreenSmartspaceView = mock(View::class.java) + whenever(mockLockscreenSmartspaceView.visibility).thenReturn(View.GONE) + keyguardUnlockAnimationController.lockscreenSmartspace = mockLockscreenSmartspaceView + + keyguardUnlockAnimationController.notifyFinishedKeyguardExitAnimation(false) + + verify(mockLockscreenSmartspaceView, never()).visibility = View.VISIBLE + } + private class ArgThatCaptor<T> { private var allArgs: MutableList<T> = mutableListOf() |