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