1 package com.android.systemui.navigationbar 2 3 import android.app.ActivityManager 4 import androidx.test.filters.SmallTest 5 import com.android.systemui.SysuiTestCase 6 import com.android.systemui.dump.DumpManager 7 import com.android.systemui.model.SysUiState 8 import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler 9 import com.android.systemui.recents.OverviewProxyService 10 import com.android.systemui.shared.system.QuickStepContract 11 import com.android.systemui.shared.system.TaskStackChangeListeners 12 import com.android.systemui.statusbar.CommandQueue 13 import com.android.systemui.statusbar.phone.AutoHideController 14 import com.android.systemui.statusbar.phone.LightBarController 15 import com.android.systemui.statusbar.phone.LightBarTransitionsController 16 import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager 17 import com.android.wm.shell.back.BackAnimation 18 import com.android.wm.shell.pip.Pip 19 import org.junit.Before 20 import org.junit.Test 21 import org.mockito.ArgumentMatchers 22 import org.mockito.Mock 23 import org.mockito.Mockito.`when` 24 import org.mockito.Mockito.any 25 import org.mockito.Mockito.anyBoolean 26 import org.mockito.Mockito.anyInt 27 import org.mockito.Mockito.times 28 import org.mockito.Mockito.verify 29 import org.mockito.MockitoAnnotations 30 import java.util.Optional 31 32 @SmallTest 33 class TaskbarDelegateTest : SysuiTestCase() { 34 val DISPLAY_ID = 0; 35 val MODE_GESTURE = 0; 36 val MODE_THREE_BUTTON = 1; 37 38 private lateinit var mTaskStackChangeListeners: TaskStackChangeListeners 39 private lateinit var mTaskbarDelegate: TaskbarDelegate 40 @Mock 41 lateinit var mEdgeBackGestureHandler : EdgeBackGestureHandler 42 @Mock 43 lateinit var mLightBarControllerFactory : LightBarTransitionsController.Factory 44 @Mock 45 lateinit var mLightBarTransitionController: LightBarTransitionsController 46 @Mock 47 lateinit var mCommandQueue: CommandQueue 48 @Mock 49 lateinit var mOverviewProxyService: OverviewProxyService 50 @Mock 51 lateinit var mNavBarHelper: NavBarHelper 52 @Mock 53 lateinit var mNavigationModeController: NavigationModeController 54 @Mock 55 lateinit var mSysUiState: SysUiState 56 @Mock 57 lateinit var mDumpManager: DumpManager 58 @Mock 59 lateinit var mAutoHideController: AutoHideController 60 @Mock 61 lateinit var mLightBarController: LightBarController 62 @Mock 63 lateinit var mOptionalPip: Optional<Pip> 64 @Mock 65 lateinit var mBackAnimation: BackAnimation 66 @Mock 67 lateinit var mCurrentSysUiState: NavBarHelper.CurrentSysuiState 68 @Mock 69 lateinit var mStatusBarKeyguardViewManager: StatusBarKeyguardViewManager 70 71 @Before 72 fun setup() { 73 MockitoAnnotations.initMocks(this) 74 `when`(mNavBarHelper.edgeBackGestureHandler).thenReturn(mEdgeBackGestureHandler) 75 `when`(mLightBarControllerFactory.create(any())).thenReturn(mLightBarTransitionController) 76 `when`(mNavBarHelper.currentSysuiState).thenReturn(mCurrentSysUiState) 77 `when`(mSysUiState.setFlag(anyInt(), anyBoolean())).thenReturn(mSysUiState) 78 mTaskStackChangeListeners = TaskStackChangeListeners.getTestInstance() 79 mTaskbarDelegate = TaskbarDelegate(context, mLightBarControllerFactory, 80 mStatusBarKeyguardViewManager) 81 mTaskbarDelegate.setDependencies(mCommandQueue, mOverviewProxyService, mNavBarHelper, 82 mNavigationModeController, mSysUiState, mDumpManager, mAutoHideController, 83 mLightBarController, mOptionalPip, mBackAnimation, mTaskStackChangeListeners) 84 } 85 86 @Test 87 fun navigationModeInitialized() { 88 `when`(mNavigationModeController.addListener(any())).thenReturn(MODE_THREE_BUTTON) 89 assert(mTaskbarDelegate.navigationMode == -1) 90 mTaskbarDelegate.init(DISPLAY_ID) 91 assert(mTaskbarDelegate.navigationMode == MODE_THREE_BUTTON) 92 } 93 94 @Test 95 fun navigationModeInitialized_notifyEdgeBackHandler() { 96 `when`(mNavigationModeController.addListener(any())).thenReturn(MODE_GESTURE) 97 mTaskbarDelegate.init(DISPLAY_ID) 98 verify(mEdgeBackGestureHandler, times(1)).onNavigationModeChanged(MODE_GESTURE) 99 } 100 101 @Test 102 fun screenPinningEnabled_updatesSysuiState() { 103 mTaskbarDelegate.init(DISPLAY_ID) 104 mTaskStackChangeListeners.listenerImpl.onLockTaskModeChanged( 105 ActivityManager.LOCK_TASK_MODE_PINNED) 106 verify(mSysUiState, times(1)).setFlag( 107 ArgumentMatchers.eq(QuickStepContract.SYSUI_STATE_SCREEN_PINNING), 108 ArgumentMatchers.eq(true) 109 ) 110 } 111 }