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