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.statusbar.window 18 19 import android.app.StatusBarManager.WindowVisibleState 20 import android.app.StatusBarManager.WINDOW_NAVIGATION_BAR 21 import android.app.StatusBarManager.WINDOW_STATE_HIDDEN 22 import android.app.StatusBarManager.WINDOW_STATE_SHOWING 23 import android.app.StatusBarManager.WINDOW_STATUS_BAR 24 import androidx.test.filters.SmallTest 25 import com.android.systemui.SysuiTestCase 26 import com.android.systemui.statusbar.CommandQueue 27 import com.google.common.truth.Truth.assertThat 28 import org.junit.Before 29 import org.junit.Test 30 import org.mockito.ArgumentCaptor 31 import org.mockito.Mock 32 import org.mockito.Mockito.verify 33 import org.mockito.MockitoAnnotations 34 35 @SmallTest 36 class StatusBarWindowStateControllerTest : SysuiTestCase() { 37 private lateinit var controller: StatusBarWindowStateController 38 private lateinit var callback: CommandQueue.Callbacks 39 40 @Mock 41 private lateinit var commandQueue: CommandQueue 42 43 @Before 44 fun setUp() { 45 MockitoAnnotations.initMocks(this) 46 controller = StatusBarWindowStateController(DISPLAY_ID, commandQueue) 47 48 val callbackCaptor = ArgumentCaptor.forClass(CommandQueue.Callbacks::class.java) 49 verify(commandQueue).addCallback(callbackCaptor.capture()) 50 callback = callbackCaptor.value!! 51 } 52 53 @Test 54 fun setWindowState_notSameDisplayId_listenersNotNotified() { 55 val listener = TestListener() 56 controller.addListener(listener) 57 58 callback.setWindowState(DISPLAY_ID + 1, WINDOW_STATUS_BAR, WINDOW_STATE_HIDDEN) 59 60 assertThat(listener.state).isNull() 61 } 62 63 @Test 64 fun setWindowState_notStatusBarWindow_listenersNotNotified() { 65 val listener = TestListener() 66 controller.addListener(listener) 67 68 callback.setWindowState(DISPLAY_ID, WINDOW_NAVIGATION_BAR, WINDOW_STATE_HIDDEN) 69 70 assertThat(listener.state).isNull() 71 } 72 73 @Test 74 fun setWindowState_sameState_listenersNotNotified() { 75 val listener = TestListener() 76 controller.addListener(listener) 77 78 callback.setWindowState(DISPLAY_ID, WINDOW_STATUS_BAR, WINDOW_STATE_SHOWING) 79 80 assertThat(listener.state).isNull() 81 } 82 83 @Test 84 fun setWindowState_newState_listenersNotified() { 85 val listener = TestListener() 86 controller.addListener(listener) 87 val newState = WINDOW_STATE_HIDDEN 88 89 callback.setWindowState(DISPLAY_ID, WINDOW_STATUS_BAR, newState) 90 91 assertThat(listener.state).isEqualTo(newState) 92 } 93 94 private class TestListener : StatusBarWindowStateListener { 95 @WindowVisibleState var state: Int? = null 96 override fun onStatusBarWindowStateChanged(@WindowVisibleState state: Int) { 97 this.state = state 98 } 99 } 100 } 101 102 private const val DISPLAY_ID = 10 103