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 }