1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.systemui.shade
18 
19 import androidx.test.ext.junit.runners.AndroidJUnit4
20 import androidx.test.filters.SmallTest
21 import com.android.systemui.SysuiTestCase
22 import com.google.common.truth.Truth.assertThat
23 import org.junit.Before
24 import org.junit.Test
25 import org.junit.runner.RunWith
26 
27 @SmallTest
28 @RunWith(AndroidJUnit4::class)
29 class ShadeExpansionStateManagerTest : SysuiTestCase() {
30 
31     private lateinit var shadeExpansionStateManager: ShadeExpansionStateManager
32 
33     @Before
setUpnull34     fun setUp() {
35         shadeExpansionStateManager = ShadeExpansionStateManager()
36     }
37 
38     @Test
onPanelExpansionChanged_listenerNotifiednull39     fun onPanelExpansionChanged_listenerNotified() {
40         val listener = TestShadeExpansionListener()
41         val currentState = shadeExpansionStateManager.addExpansionListener(listener)
42         listener.onPanelExpansionChanged(currentState)
43         val fraction = 0.6f
44         val expanded = true
45         val tracking = true
46         val dragDownAmount = 1234f
47 
48         shadeExpansionStateManager.onPanelExpansionChanged(fraction, expanded, tracking)
49 
50         assertThat(listener.fraction).isEqualTo(fraction)
51         assertThat(listener.expanded).isEqualTo(expanded)
52         assertThat(listener.tracking).isEqualTo(tracking)
53     }
54 
55     @Test
addExpansionListener_listenerNotifiedOfCurrentValuesnull56     fun addExpansionListener_listenerNotifiedOfCurrentValues() {
57         val fraction = 0.6f
58         val expanded = true
59         val tracking = true
60         val dragDownAmount = 1234f
61         shadeExpansionStateManager.onPanelExpansionChanged(fraction, expanded, tracking)
62         val listener = TestShadeExpansionListener()
63 
64         val currentState = shadeExpansionStateManager.addExpansionListener(listener)
65         listener.onPanelExpansionChanged(currentState)
66 
67         assertThat(listener.fraction).isEqualTo(fraction)
68         assertThat(listener.expanded).isEqualTo(expanded)
69         assertThat(listener.tracking).isEqualTo(tracking)
70     }
71 
72     @Test
updateState_listenerNotifiednull73     fun updateState_listenerNotified() {
74         val listener = TestShadeStateListener()
75         shadeExpansionStateManager.addStateListener(listener)
76 
77         shadeExpansionStateManager.updateState(STATE_OPEN)
78 
79         assertThat(listener.state).isEqualTo(STATE_OPEN)
80     }
81 
82     /* ***** [PanelExpansionStateManager.onPanelExpansionChanged] test cases *******/
83 
84     /* Fraction < 1 test cases */
85 
86     @Test
onPEC_fractionLessThanOne_expandedTrue_trackingFalse_becomesStateOpeningnull87     fun onPEC_fractionLessThanOne_expandedTrue_trackingFalse_becomesStateOpening() {
88         val listener = TestShadeStateListener()
89         shadeExpansionStateManager.addStateListener(listener)
90 
91         shadeExpansionStateManager.onPanelExpansionChanged(
92             fraction = 0.5f,
93             expanded = true,
94             tracking = false
95         )
96 
97         assertThat(listener.state).isEqualTo(STATE_OPENING)
98     }
99 
100     @Test
onPEC_fractionLessThanOne_expandedTrue_trackingTrue_becomesStateOpeningnull101     fun onPEC_fractionLessThanOne_expandedTrue_trackingTrue_becomesStateOpening() {
102         val listener = TestShadeStateListener()
103         shadeExpansionStateManager.addStateListener(listener)
104 
105         shadeExpansionStateManager.onPanelExpansionChanged(
106             fraction = 0.5f,
107             expanded = true,
108             tracking = true
109         )
110 
111         assertThat(listener.state).isEqualTo(STATE_OPENING)
112     }
113 
114     @Test
onPEC_fractionLessThanOne_expandedFalse_trackingFalse_becomesStateClosednull115     fun onPEC_fractionLessThanOne_expandedFalse_trackingFalse_becomesStateClosed() {
116         val listener = TestShadeStateListener()
117         shadeExpansionStateManager.addStateListener(listener)
118         // Start out on a different state
119         shadeExpansionStateManager.updateState(STATE_OPEN)
120 
121         shadeExpansionStateManager.onPanelExpansionChanged(
122             fraction = 0.5f,
123             expanded = false,
124             tracking = false
125         )
126 
127         assertThat(listener.state).isEqualTo(STATE_CLOSED)
128     }
129 
130     @Test
onPEC_fractionLessThanOne_expandedFalse_trackingTrue_doesNotBecomeStateClosednull131     fun onPEC_fractionLessThanOne_expandedFalse_trackingTrue_doesNotBecomeStateClosed() {
132         val listener = TestShadeStateListener()
133         shadeExpansionStateManager.addStateListener(listener)
134         // Start out on a different state
135         shadeExpansionStateManager.updateState(STATE_OPEN)
136 
137         shadeExpansionStateManager.onPanelExpansionChanged(
138             fraction = 0.5f,
139             expanded = false,
140             tracking = true
141         )
142 
143         assertThat(listener.state).isEqualTo(STATE_OPEN)
144     }
145 
146     /* Fraction = 1 test cases */
147 
148     @Test
onPEC_fractionOne_expandedTrue_trackingFalse_becomesStateOpeningThenStateOpennull149     fun onPEC_fractionOne_expandedTrue_trackingFalse_becomesStateOpeningThenStateOpen() {
150         val listener = TestShadeStateListener()
151         shadeExpansionStateManager.addStateListener(listener)
152 
153         shadeExpansionStateManager.onPanelExpansionChanged(
154             fraction = 1f,
155             expanded = true,
156             tracking = false
157         )
158 
159         assertThat(listener.previousState).isEqualTo(STATE_OPENING)
160         assertThat(listener.state).isEqualTo(STATE_OPEN)
161     }
162 
163     @Test
onPEC_fractionOne_expandedTrue_trackingTrue_becomesStateOpeningnull164     fun onPEC_fractionOne_expandedTrue_trackingTrue_becomesStateOpening() {
165         val listener = TestShadeStateListener()
166         shadeExpansionStateManager.addStateListener(listener)
167 
168         shadeExpansionStateManager.onPanelExpansionChanged(
169             fraction = 1f,
170             expanded = true,
171             tracking = true
172         )
173 
174         assertThat(listener.state).isEqualTo(STATE_OPENING)
175     }
176 
177     @Test
onPEC_fractionOne_expandedFalse_trackingFalse_becomesStateClosednull178     fun onPEC_fractionOne_expandedFalse_trackingFalse_becomesStateClosed() {
179         val listener = TestShadeStateListener()
180         shadeExpansionStateManager.addStateListener(listener)
181         // Start out on a different state
182         shadeExpansionStateManager.updateState(STATE_OPEN)
183 
184         shadeExpansionStateManager.onPanelExpansionChanged(
185             fraction = 1f,
186             expanded = false,
187             tracking = false
188         )
189 
190         assertThat(listener.state).isEqualTo(STATE_CLOSED)
191     }
192 
193     @Test
onPEC_fractionOne_expandedFalse_trackingTrue_doesNotBecomeStateClosednull194     fun onPEC_fractionOne_expandedFalse_trackingTrue_doesNotBecomeStateClosed() {
195         val listener = TestShadeStateListener()
196         shadeExpansionStateManager.addStateListener(listener)
197         // Start out on a different state
198         shadeExpansionStateManager.updateState(STATE_OPEN)
199 
200         shadeExpansionStateManager.onPanelExpansionChanged(
201             fraction = 1f,
202             expanded = false,
203             tracking = true
204         )
205 
206         assertThat(listener.state).isEqualTo(STATE_OPEN)
207     }
208 
209     /* ***** end [PanelExpansionStateManager.onPanelExpansionChanged] test cases ******/
210 
211     class TestShadeExpansionListener : ShadeExpansionListener {
212         var fraction: Float = 0f
213         var expanded: Boolean = false
214         var tracking: Boolean = false
215 
onPanelExpansionChangednull216         override fun onPanelExpansionChanged(event: ShadeExpansionChangeEvent) {
217             this.fraction = event.fraction
218             this.expanded = event.expanded
219             this.tracking = event.tracking
220         }
221     }
222 
223     class TestShadeStateListener : ShadeStateListener {
224         @PanelState var previousState: Int = STATE_CLOSED
225         @PanelState var state: Int = STATE_CLOSED
226 
onPanelStateChangednull227         override fun onPanelStateChanged(state: Int) {
228             this.previousState = this.state
229             this.state = state
230         }
231     }
232 }
233