Initialize navigation mode for TaskbarDelegate

* Previously we were only initializing nav mode for
EdgeBackGestureHandler and never updating state in
TaskbarDelegate

Fixes: 260226345
Test: Wrote new tests,
killed sysui process and dump state in terminal and
observe nav mode matches between NavigationModeController
and TaskbarDelegate

Change-Id: I637fbf759ab86cd9ff25875e24dca9327fee35fa
This commit is contained in:
Vinit Nayak
2022-11-28 15:24:28 -08:00
parent dcb2710560
commit 939fad5ca1
2 changed files with 101 additions and 3 deletions

View File

@@ -55,6 +55,7 @@ import android.view.WindowInsetsController.Appearance;
import android.view.WindowInsetsController.Behavior;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import com.android.internal.statusbar.LetterboxDetails;
import com.android.internal.view.AppearanceRegion;
@@ -125,7 +126,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
private final DisplayManager mDisplayManager;
private Context mWindowContext;
private ScreenPinningNotify mScreenPinningNotify;
private int mNavigationMode;
private int mNavigationMode = -1;
private final Consumer<Rect> mPipListener;
/**
@@ -217,8 +218,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
parseCurrentSysuiState();
mCommandQueue.addCallback(this);
mOverviewProxyService.addCallback(this);
mEdgeBackGestureHandler.onNavigationModeChanged(
mNavigationModeController.addListener(this));
onNavigationModeChanged(mNavigationModeController.addListener(this));
mNavBarHelper.registerNavTaskStateUpdater(mNavbarTaskbarStateUpdater);
mNavBarHelper.init();
mEdgeBackGestureHandler.onNavBarAttached();
@@ -492,6 +492,11 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
!QuickStepContract.isGesturalMode(mNavigationMode));
}
@VisibleForTesting
int getNavigationMode() {
return mNavigationMode;
}
@Override
public void dump(@NonNull PrintWriter pw, @NonNull String[] args) {
pw.println("TaskbarDelegate (displayId=" + mDisplayId + "):");

View File

@@ -0,0 +1,93 @@
package com.android.systemui.navigationbar
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.DumpManager
import com.android.systemui.model.SysUiState
import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler
import com.android.systemui.recents.OverviewProxyService
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.phone.AutoHideController
import com.android.systemui.statusbar.phone.LightBarController
import com.android.systemui.statusbar.phone.LightBarTransitionsController
import com.android.wm.shell.back.BackAnimation
import com.android.wm.shell.pip.Pip
import org.junit.Before
import org.junit.Test
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.any
import org.mockito.Mockito.anyBoolean
import org.mockito.Mockito.anyInt
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
import java.util.Optional
@SmallTest
class TaskbarDelegateTest : SysuiTestCase() {
val DISPLAY_ID = 0;
val MODE_GESTURE = 0;
val MODE_THREE_BUTTON = 1;
private lateinit var mTaskbarDelegate: TaskbarDelegate
@Mock
lateinit var mEdgeBackGestureHandlerFactory : EdgeBackGestureHandler.Factory
@Mock
lateinit var mEdgeBackGestureHandler : EdgeBackGestureHandler
@Mock
lateinit var mLightBarControllerFactory : LightBarTransitionsController.Factory
@Mock
lateinit var mLightBarTransitionController: LightBarTransitionsController
@Mock
lateinit var mCommandQueue: CommandQueue
@Mock
lateinit var mOverviewProxyService: OverviewProxyService
@Mock
lateinit var mNavBarHelper: NavBarHelper
@Mock
lateinit var mNavigationModeController: NavigationModeController
@Mock
lateinit var mSysUiState: SysUiState
@Mock
lateinit var mDumpManager: DumpManager
@Mock
lateinit var mAutoHideController: AutoHideController
@Mock
lateinit var mLightBarController: LightBarController
@Mock
lateinit var mOptionalPip: Optional<Pip>
@Mock
lateinit var mBackAnimation: BackAnimation
@Mock
lateinit var mCurrentSysUiState: NavBarHelper.CurrentSysuiState
@Before
fun setup() {
MockitoAnnotations.initMocks(this)
`when`(mEdgeBackGestureHandlerFactory.create(context)).thenReturn(mEdgeBackGestureHandler)
`when`(mLightBarControllerFactory.create(any())).thenReturn(mLightBarTransitionController)
`when`(mNavBarHelper.currentSysuiState).thenReturn(mCurrentSysUiState)
`when`(mSysUiState.setFlag(anyInt(), anyBoolean())).thenReturn(mSysUiState)
mTaskbarDelegate = TaskbarDelegate(context, mEdgeBackGestureHandlerFactory,
mLightBarControllerFactory)
mTaskbarDelegate.setDependencies(mCommandQueue, mOverviewProxyService, mNavBarHelper,
mNavigationModeController, mSysUiState, mDumpManager, mAutoHideController,
mLightBarController, mOptionalPip, mBackAnimation)
}
@Test
fun navigationModeInitialized() {
`when`(mNavigationModeController.addListener(any())).thenReturn(MODE_THREE_BUTTON)
assert(mTaskbarDelegate.navigationMode == -1)
mTaskbarDelegate.init(DISPLAY_ID)
assert(mTaskbarDelegate.navigationMode == MODE_THREE_BUTTON)
}
@Test
fun navigationModeInitialized_notifyEdgeBackHandler() {
`when`(mNavigationModeController.addListener(any())).thenReturn(MODE_GESTURE)
mTaskbarDelegate.init(DISPLAY_ID)
verify(mEdgeBackGestureHandler, times(1)).onNavigationModeChanged(MODE_GESTURE)
}
}