1 package com.android.systemui.statusbar.phone 2 3 import android.graphics.Point 4 import android.testing.TestableLooper 5 import android.view.Display 6 import android.view.Surface 7 import android.view.View 8 import android.view.WindowManager 9 import androidx.test.filters.SmallTest 10 import com.android.systemui.SysuiTestCase 11 import com.android.systemui.unfold.FakeUnfoldTransitionProvider 12 import com.android.systemui.unfold.util.CurrentActivityTypeProvider 13 import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider 14 import com.android.systemui.util.mockito.whenever 15 import com.google.common.truth.Truth.assertThat 16 import org.junit.Before 17 import org.junit.Test 18 import org.mockito.ArgumentMatchers.any 19 import org.mockito.Mock 20 import org.mockito.MockitoAnnotations 21 22 @SmallTest 23 @TestableLooper.RunWithLooper 24 class StatusBarMoveFromCenterAnimationControllerTest : SysuiTestCase() { 25 26 @Mock private lateinit var windowManager: WindowManager 27 28 @Mock private lateinit var display: Display 29 30 @Mock private lateinit var currentActivityTypeProvider: CurrentActivityTypeProvider 31 32 private val view: View = View(context) 33 private val progressProvider = FakeUnfoldTransitionProvider() 34 private val scopedProvider = ScopedUnfoldTransitionProgressProvider(progressProvider) 35 36 private lateinit var controller: StatusBarMoveFromCenterAnimationController 37 38 @Before setUpnull39 fun setUp() { 40 MockitoAnnotations.initMocks(this) 41 42 whenever(windowManager.defaultDisplay).thenReturn(display) 43 whenever(display.rotation).thenReturn(Surface.ROTATION_0) 44 whenever(display.getSize(any())).thenAnswer { 45 val point = it.arguments[0] as Point 46 point.x = 100 47 point.y = 100 48 Unit 49 } 50 51 scopedProvider.setReadyToHandleTransition(true) 52 53 controller = 54 StatusBarMoveFromCenterAnimationController( 55 scopedProvider, 56 currentActivityTypeProvider, 57 windowManager 58 ) 59 } 60 61 @Test onTransitionProgressAndFinished_resetsTranslationsnull62 fun onTransitionProgressAndFinished_resetsTranslations() { 63 controller.onViewsReady(arrayOf(view)) 64 65 progressProvider.onTransitionProgress(0.5f) 66 progressProvider.onTransitionFinished() 67 68 assertThat(view.translationX).isZero() 69 } 70 71 @Test onStatusBarWidthChangedWithNoTransitionBefore_noTranslationnull72 fun onStatusBarWidthChangedWithNoTransitionBefore_noTranslation() { 73 controller.onViewsReady(arrayOf(view)) 74 75 controller.onStatusBarWidthChanged() 76 77 assertThat(view.translationX).isZero() 78 } 79 80 @Test onTransitionProgress_updatesTranslationsnull81 fun onTransitionProgress_updatesTranslations() { 82 controller.onViewsReady(arrayOf(view)) 83 84 progressProvider.onTransitionProgress(0.5f) 85 86 assertThat(view.translationX).isNonZero() 87 } 88 89 @Test onTransitionProgress_whenDetached_doesNotUpdateTranslationsnull90 fun onTransitionProgress_whenDetached_doesNotUpdateTranslations() { 91 controller.onViewsReady(arrayOf(view)) 92 controller.onViewDetached() 93 94 progressProvider.onTransitionProgress(0.5f) 95 96 assertThat(view.translationX).isZero() 97 } 98 99 @Test detachedAfterProgress_resetsTranslationsnull100 fun detachedAfterProgress_resetsTranslations() { 101 controller.onViewsReady(arrayOf(view)) 102 progressProvider.onTransitionProgress(0.5f) 103 104 controller.onViewDetached() 105 106 assertThat(view.translationX).isZero() 107 } 108 109 @Test alpha_onLauncher_alphaDoesNotChangenull110 fun alpha_onLauncher_alphaDoesNotChange() { 111 whenever(currentActivityTypeProvider.isHomeActivity).thenReturn(true) 112 controller.onViewsReady(arrayOf(view)) 113 progressProvider.onTransitionStarted() 114 progressProvider.onTransitionProgress(0.0f) 115 assertThat(view.alpha).isEqualTo(1.0f) 116 117 progressProvider.onTransitionProgress(1.0f) 118 119 assertThat(view.alpha).isEqualTo(1.0f) 120 } 121 122 @Test alpha_NotOnLauncher_alphaChangesnull123 fun alpha_NotOnLauncher_alphaChanges() { 124 whenever(currentActivityTypeProvider.isHomeActivity).thenReturn(false) 125 controller.onViewsReady(arrayOf(view)) 126 progressProvider.onTransitionStarted() 127 assertThat(view.alpha).isEqualTo(1.0f) 128 129 progressProvider.onTransitionProgress(0.5f) 130 131 assertThat(view.alpha).isNotEqualTo(1.0f) 132 } 133 134 @Test transitionFinished_viewReAttached_noChangesToTranslationnull135 fun transitionFinished_viewReAttached_noChangesToTranslation() { 136 controller.onViewsReady(arrayOf(view)) 137 progressProvider.onTransitionProgress(0.5f) 138 progressProvider.onTransitionFinished() 139 controller.onViewDetached() 140 141 controller.onViewsReady(arrayOf(view)) 142 controller.onStatusBarWidthChanged() 143 144 assertThat(view.translationX).isZero() 145 } 146 } 147