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 31 fun setUp() { 32 shadeExpansionStateManager = ShadeExpansionStateManager() 33 } 34 35 @Test 36 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( 46 fraction, 47 expanded, 48 tracking, 49 dragDownAmount 50 ) 51 52 assertThat(listener.fraction).isEqualTo(fraction) 53 assertThat(listener.expanded).isEqualTo(expanded) 54 assertThat(listener.tracking).isEqualTo(tracking) 55 assertThat(listener.dragDownAmountPx).isEqualTo(dragDownAmount) 56 } 57 58 @Test 59 fun addExpansionListener_listenerNotifiedOfCurrentValues() { 60 val fraction = 0.6f 61 val expanded = true 62 val tracking = true 63 val dragDownAmount = 1234f 64 shadeExpansionStateManager.onPanelExpansionChanged( 65 fraction, 66 expanded, 67 tracking, 68 dragDownAmount 69 ) 70 val listener = TestShadeExpansionListener() 71 72 val currentState = shadeExpansionStateManager.addExpansionListener(listener) 73 listener.onPanelExpansionChanged(currentState) 74 75 assertThat(listener.fraction).isEqualTo(fraction) 76 assertThat(listener.expanded).isEqualTo(expanded) 77 assertThat(listener.tracking).isEqualTo(tracking) 78 assertThat(listener.dragDownAmountPx).isEqualTo(dragDownAmount) 79 } 80 81 @Test 82 fun updateState_listenerNotified() { 83 val listener = TestShadeStateListener() 84 shadeExpansionStateManager.addStateListener(listener) 85 86 shadeExpansionStateManager.updateState(STATE_OPEN) 87 88 assertThat(listener.state).isEqualTo(STATE_OPEN) 89 } 90 91 /* ***** [PanelExpansionStateManager.onPanelExpansionChanged] test cases *******/ 92 93 /* Fraction < 1 test cases */ 94 95 @Test 96 fun onPEC_fractionLessThanOne_expandedTrue_trackingFalse_becomesStateOpening() { 97 val listener = TestShadeStateListener() 98 shadeExpansionStateManager.addStateListener(listener) 99 100 shadeExpansionStateManager.onPanelExpansionChanged( 101 fraction = 0.5f, 102 expanded = true, 103 tracking = false, 104 dragDownPxAmount = 0f 105 ) 106 107 assertThat(listener.state).isEqualTo(STATE_OPENING) 108 } 109 110 @Test 111 fun onPEC_fractionLessThanOne_expandedTrue_trackingTrue_becomesStateOpening() { 112 val listener = TestShadeStateListener() 113 shadeExpansionStateManager.addStateListener(listener) 114 115 shadeExpansionStateManager.onPanelExpansionChanged( 116 fraction = 0.5f, 117 expanded = true, 118 tracking = true, 119 dragDownPxAmount = 0f 120 ) 121 122 assertThat(listener.state).isEqualTo(STATE_OPENING) 123 } 124 125 @Test 126 fun onPEC_fractionLessThanOne_expandedFalse_trackingFalse_becomesStateClosed() { 127 val listener = TestShadeStateListener() 128 shadeExpansionStateManager.addStateListener(listener) 129 // Start out on a different state 130 shadeExpansionStateManager.updateState(STATE_OPEN) 131 132 shadeExpansionStateManager.onPanelExpansionChanged( 133 fraction = 0.5f, 134 expanded = false, 135 tracking = false, 136 dragDownPxAmount = 0f 137 ) 138 139 assertThat(listener.state).isEqualTo(STATE_CLOSED) 140 } 141 142 @Test 143 fun onPEC_fractionLessThanOne_expandedFalse_trackingTrue_doesNotBecomeStateClosed() { 144 val listener = TestShadeStateListener() 145 shadeExpansionStateManager.addStateListener(listener) 146 // Start out on a different state 147 shadeExpansionStateManager.updateState(STATE_OPEN) 148 149 shadeExpansionStateManager.onPanelExpansionChanged( 150 fraction = 0.5f, 151 expanded = false, 152 tracking = true, 153 dragDownPxAmount = 0f 154 ) 155 156 assertThat(listener.state).isEqualTo(STATE_OPEN) 157 } 158 159 /* Fraction = 1 test cases */ 160 161 @Test 162 fun onPEC_fractionOne_expandedTrue_trackingFalse_becomesStateOpeningThenStateOpen() { 163 val listener = TestShadeStateListener() 164 shadeExpansionStateManager.addStateListener(listener) 165 166 shadeExpansionStateManager.onPanelExpansionChanged( 167 fraction = 1f, 168 expanded = true, 169 tracking = false, 170 dragDownPxAmount = 0f 171 ) 172 173 assertThat(listener.previousState).isEqualTo(STATE_OPENING) 174 assertThat(listener.state).isEqualTo(STATE_OPEN) 175 } 176 177 @Test 178 fun onPEC_fractionOne_expandedTrue_trackingTrue_becomesStateOpening() { 179 val listener = TestShadeStateListener() 180 shadeExpansionStateManager.addStateListener(listener) 181 182 shadeExpansionStateManager.onPanelExpansionChanged( 183 fraction = 1f, 184 expanded = true, 185 tracking = true, 186 dragDownPxAmount = 0f 187 ) 188 189 assertThat(listener.state).isEqualTo(STATE_OPENING) 190 } 191 192 @Test 193 fun onPEC_fractionOne_expandedFalse_trackingFalse_becomesStateClosed() { 194 val listener = TestShadeStateListener() 195 shadeExpansionStateManager.addStateListener(listener) 196 // Start out on a different state 197 shadeExpansionStateManager.updateState(STATE_OPEN) 198 199 shadeExpansionStateManager.onPanelExpansionChanged( 200 fraction = 1f, 201 expanded = false, 202 tracking = false, 203 dragDownPxAmount = 0f 204 ) 205 206 assertThat(listener.state).isEqualTo(STATE_CLOSED) 207 } 208 209 @Test 210 fun onPEC_fractionOne_expandedFalse_trackingTrue_doesNotBecomeStateClosed() { 211 val listener = TestShadeStateListener() 212 shadeExpansionStateManager.addStateListener(listener) 213 // Start out on a different state 214 shadeExpansionStateManager.updateState(STATE_OPEN) 215 216 shadeExpansionStateManager.onPanelExpansionChanged( 217 fraction = 1f, 218 expanded = false, 219 tracking = true, 220 dragDownPxAmount = 0f 221 ) 222 223 assertThat(listener.state).isEqualTo(STATE_OPEN) 224 } 225 226 /* ***** end [PanelExpansionStateManager.onPanelExpansionChanged] test cases ******/ 227 228 class TestShadeExpansionListener : ShadeExpansionListener { 229 var fraction: Float = 0f 230 var expanded: Boolean = false 231 var tracking: Boolean = false 232 var dragDownAmountPx: Float = 0f 233 234 override fun onPanelExpansionChanged(event: ShadeExpansionChangeEvent) { 235 this.fraction = event.fraction 236 this.expanded = event.expanded 237 this.tracking = event.tracking 238 this.dragDownAmountPx = event.dragDownPxAmount 239 } 240 } 241 242 class TestShadeStateListener : ShadeStateListener { 243 @PanelState var previousState: Int = STATE_CLOSED 244 @PanelState var state: Int = STATE_CLOSED 245 246 override fun onPanelStateChanged(state: Int) { 247 this.previousState = this.state 248 this.state = state 249 } 250 } 251 } 252