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