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.filters.SmallTest
20 import com.android.systemui.SysuiTestCase
21 import com.google.common.truth.Truth.assertThat
22 import org.junit.Before
23 import org.junit.Test
24 
25 @SmallTest
26 class ShadeExpansionStateManagerTest : SysuiTestCase() {
27 
28     private lateinit var shadeExpansionStateManager: ShadeExpansionStateManager
29 
30     @Before
setUpnull31     fun setUp() {
32         shadeExpansionStateManager = ShadeExpansionStateManager()
33     }
34 
35     @Test
onPanelExpansionChanged_listenerNotifiednull36     fun onPanelExpansionChanged_listenerNotified() {
37         val listener = TestShadeExpansionListener()
38         val currentState = shadeExpansionStateManager.addExpansionListener(listener)
39         listener.onPanelExpansionChanged(currentState)
40         val fraction = 0.6f
41         val expanded = true
42         val tracking = true
43         val dragDownAmount = 1234f
44 
45         shadeExpansionStateManager.onPanelExpansionChanged(fraction, expanded, tracking)
46 
47         assertThat(listener.fraction).isEqualTo(fraction)
48         assertThat(listener.expanded).isEqualTo(expanded)
49         assertThat(listener.tracking).isEqualTo(tracking)
50     }
51 
52     @Test
addExpansionListener_listenerNotifiedOfCurrentValuesnull53     fun addExpansionListener_listenerNotifiedOfCurrentValues() {
54         val fraction = 0.6f
55         val expanded = true
56         val tracking = true
57         val dragDownAmount = 1234f
58         shadeExpansionStateManager.onPanelExpansionChanged(fraction, expanded, tracking)
59         val listener = TestShadeExpansionListener()
60 
61         val currentState = shadeExpansionStateManager.addExpansionListener(listener)
62         listener.onPanelExpansionChanged(currentState)
63 
64         assertThat(listener.fraction).isEqualTo(fraction)
65         assertThat(listener.expanded).isEqualTo(expanded)
66         assertThat(listener.tracking).isEqualTo(tracking)
67     }
68 
69     @Test
updateState_listenerNotifiednull70     fun updateState_listenerNotified() {
71         val listener = TestShadeStateListener()
72         shadeExpansionStateManager.addStateListener(listener)
73 
74         shadeExpansionStateManager.updateState(STATE_OPEN)
75 
76         assertThat(listener.state).isEqualTo(STATE_OPEN)
77     }
78 
79     /* ***** [PanelExpansionStateManager.onPanelExpansionChanged] test cases *******/
80 
81     /* Fraction < 1 test cases */
82 
83     @Test
onPEC_fractionLessThanOne_expandedTrue_trackingFalse_becomesStateOpeningnull84     fun onPEC_fractionLessThanOne_expandedTrue_trackingFalse_becomesStateOpening() {
85         val listener = TestShadeStateListener()
86         shadeExpansionStateManager.addStateListener(listener)
87 
88         shadeExpansionStateManager.onPanelExpansionChanged(
89             fraction = 0.5f,
90             expanded = true,
91             tracking = false
92         )
93 
94         assertThat(listener.state).isEqualTo(STATE_OPENING)
95     }
96 
97     @Test
onPEC_fractionLessThanOne_expandedTrue_trackingTrue_becomesStateOpeningnull98     fun onPEC_fractionLessThanOne_expandedTrue_trackingTrue_becomesStateOpening() {
99         val listener = TestShadeStateListener()
100         shadeExpansionStateManager.addStateListener(listener)
101 
102         shadeExpansionStateManager.onPanelExpansionChanged(
103             fraction = 0.5f,
104             expanded = true,
105             tracking = true
106         )
107 
108         assertThat(listener.state).isEqualTo(STATE_OPENING)
109     }
110 
111     @Test
onPEC_fractionLessThanOne_expandedFalse_trackingFalse_becomesStateClosednull112     fun onPEC_fractionLessThanOne_expandedFalse_trackingFalse_becomesStateClosed() {
113         val listener = TestShadeStateListener()
114         shadeExpansionStateManager.addStateListener(listener)
115         // Start out on a different state
116         shadeExpansionStateManager.updateState(STATE_OPEN)
117 
118         shadeExpansionStateManager.onPanelExpansionChanged(
119             fraction = 0.5f,
120             expanded = false,
121             tracking = false
122         )
123 
124         assertThat(listener.state).isEqualTo(STATE_CLOSED)
125     }
126 
127     @Test
onPEC_fractionLessThanOne_expandedFalse_trackingTrue_doesNotBecomeStateClosednull128     fun onPEC_fractionLessThanOne_expandedFalse_trackingTrue_doesNotBecomeStateClosed() {
129         val listener = TestShadeStateListener()
130         shadeExpansionStateManager.addStateListener(listener)
131         // Start out on a different state
132         shadeExpansionStateManager.updateState(STATE_OPEN)
133 
134         shadeExpansionStateManager.onPanelExpansionChanged(
135             fraction = 0.5f,
136             expanded = false,
137             tracking = true
138         )
139 
140         assertThat(listener.state).isEqualTo(STATE_OPEN)
141     }
142 
143     /* Fraction = 1 test cases */
144 
145     @Test
onPEC_fractionOne_expandedTrue_trackingFalse_becomesStateOpeningThenStateOpennull146     fun onPEC_fractionOne_expandedTrue_trackingFalse_becomesStateOpeningThenStateOpen() {
147         val listener = TestShadeStateListener()
148         shadeExpansionStateManager.addStateListener(listener)
149 
150         shadeExpansionStateManager.onPanelExpansionChanged(
151             fraction = 1f,
152             expanded = true,
153             tracking = false
154         )
155 
156         assertThat(listener.previousState).isEqualTo(STATE_OPENING)
157         assertThat(listener.state).isEqualTo(STATE_OPEN)
158     }
159 
160     @Test
onPEC_fractionOne_expandedTrue_trackingTrue_becomesStateOpeningnull161     fun onPEC_fractionOne_expandedTrue_trackingTrue_becomesStateOpening() {
162         val listener = TestShadeStateListener()
163         shadeExpansionStateManager.addStateListener(listener)
164 
165         shadeExpansionStateManager.onPanelExpansionChanged(
166             fraction = 1f,
167             expanded = true,
168             tracking = true
169         )
170 
171         assertThat(listener.state).isEqualTo(STATE_OPENING)
172     }
173 
174     @Test
onPEC_fractionOne_expandedFalse_trackingFalse_becomesStateClosednull175     fun onPEC_fractionOne_expandedFalse_trackingFalse_becomesStateClosed() {
176         val listener = TestShadeStateListener()
177         shadeExpansionStateManager.addStateListener(listener)
178         // Start out on a different state
179         shadeExpansionStateManager.updateState(STATE_OPEN)
180 
181         shadeExpansionStateManager.onPanelExpansionChanged(
182             fraction = 1f,
183             expanded = false,
184             tracking = false
185         )
186 
187         assertThat(listener.state).isEqualTo(STATE_CLOSED)
188     }
189 
190     @Test
onPEC_fractionOne_expandedFalse_trackingTrue_doesNotBecomeStateClosednull191     fun onPEC_fractionOne_expandedFalse_trackingTrue_doesNotBecomeStateClosed() {
192         val listener = TestShadeStateListener()
193         shadeExpansionStateManager.addStateListener(listener)
194         // Start out on a different state
195         shadeExpansionStateManager.updateState(STATE_OPEN)
196 
197         shadeExpansionStateManager.onPanelExpansionChanged(
198             fraction = 1f,
199             expanded = false,
200             tracking = true
201         )
202 
203         assertThat(listener.state).isEqualTo(STATE_OPEN)
204     }
205 
206     /* ***** end [PanelExpansionStateManager.onPanelExpansionChanged] test cases ******/
207 
208     class TestShadeExpansionListener : ShadeExpansionListener {
209         var fraction: Float = 0f
210         var expanded: Boolean = false
211         var tracking: Boolean = false
212 
onPanelExpansionChangednull213         override fun onPanelExpansionChanged(event: ShadeExpansionChangeEvent) {
214             this.fraction = event.fraction
215             this.expanded = event.expanded
216             this.tracking = event.tracking
217         }
218     }
219 
220     class TestShadeStateListener : ShadeStateListener {
221         @PanelState var previousState: Int = STATE_CLOSED
222         @PanelState var state: Int = STATE_CLOSED
223 
onPanelStateChangednull224         override fun onPanelStateChanged(state: Int) {
225             this.previousState = this.state
226             this.state = state
227         }
228     }
229 }
230