diff options
11 files changed, 109 insertions, 67 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java index 0f636588476a..b04a75dd9cd5 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java @@ -885,6 +885,7 @@ public abstract class WMShellModule { SyncTransactionQueue syncQueue, Transitions transitions, Optional<DesktopTasksController> desktopTasksController, + Optional<DesktopImmersiveController> desktopImmersiveController, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer, InteractionJankMonitor interactionJankMonitor, AppToWebGenericLinksParser genericLinksParser, @@ -906,6 +907,7 @@ public abstract class WMShellModule { mainChoreographer, bgExecutor, shellInit, shellCommandHandler, windowManager, taskOrganizer, desktopRepository, displayController, shellController, displayInsetsController, syncQueue, transitions, desktopTasksController, + desktopImmersiveController.get(), rootTaskDisplayAreaOrganizer, interactionJankMonitor, genericLinksParser, assistContentRequester, multiInstanceHelper, desktopTasksLimiter, appHandleEducationController, appToWebEducationController, diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopImmersiveController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopImmersiveController.kt index 4723eb273988..dd95273dd4f3 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopImmersiveController.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopImmersiveController.kt @@ -99,6 +99,7 @@ class DesktopImmersiveController( /** Starts a transition to enter full immersive state inside the desktop. */ fun moveTaskToImmersive(taskInfo: RunningTaskInfo) { + check(taskInfo.isFreeform) { "Task must already be in freeform" } if (inProgress) { logV( "Cannot start entry because transition(s) already in progress: %s", @@ -121,6 +122,7 @@ class DesktopImmersiveController( /** Starts a transition to move an immersive task out of immersive. */ fun moveTaskToNonImmersive(taskInfo: RunningTaskInfo, reason: ExitReason) { + check(taskInfo.isFreeform) { "Task must already be in freeform" } if (inProgress) { logV( "Cannot start exit because transition(s) already in progress: %s", diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandler.kt index 6cb23b81f1e4..798e499d68eb 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandler.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandler.kt @@ -72,7 +72,8 @@ class DesktopModeKeyGestureHandler( desktopModeWindowDecorViewModel.get().onSnapResize( it.taskId, true, - DesktopModeEventLogger.Companion.InputMethod.KEYBOARD + DesktopModeEventLogger.Companion.InputMethod.KEYBOARD, + /* fromMenu= */ false ) } return true @@ -83,7 +84,8 @@ class DesktopModeKeyGestureHandler( desktopModeWindowDecorViewModel.get().onSnapResize( it.taskId, false, - DesktopModeEventLogger.Companion.InputMethod.KEYBOARD + DesktopModeEventLogger.Companion.InputMethod.KEYBOARD, + /* fromMenu= */ false ) } return true diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeUiEventLogger.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeUiEventLogger.kt index d0e01625a3aa..2c432bcb55ab 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeUiEventLogger.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeUiEventLogger.kt @@ -124,7 +124,19 @@ class DesktopModeUiEventLogger( @UiEvent(doc = "Drag the window header to an edge to tile it to the left side") DESKTOP_WINDOW_APP_HEADER_DRAG_TO_TILE_TO_LEFT(2006), @UiEvent(doc = "Drag the window header to an edge to tile it to the right side") - DESKTOP_WINDOW_APP_HEADER_DRAG_TO_TILE_TO_RIGHT(2007); + DESKTOP_WINDOW_APP_HEADER_DRAG_TO_TILE_TO_RIGHT(2007), + @UiEvent(doc = "Hover or long press the maximize button to reveal the menu") + DESKTOP_WINDOW_MAXIMIZE_BUTTON_REVEAL_MENU(2015), + @UiEvent(doc = "Tap on the maximize option in the maximize button menu") + DESKTOP_WINDOW_MAXIMIZE_BUTTON_MENU_TAP_TO_MAXIMIZE(2009), + @UiEvent(doc = "Tap on the immersive option in the maximize button menu") + DESKTOP_WINDOW_MAXIMIZE_BUTTON_MENU_TAP_TO_IMMERSIVE(2010), + @UiEvent(doc = "Tap on the restore option in the maximize button menu") + DESKTOP_WINDOW_MAXIMIZE_BUTTON_MENU_TAP_TO_RESTORE(2011), + @UiEvent(doc = "Tap on the tile to left option in the maximize button menu") + DESKTOP_WINDOW_MAXIMIZE_BUTTON_MENU_TAP_TO_TILE_TO_LEFT(2012), + @UiEvent(doc = "Tap on the tile to right option in the maximize button menu") + DESKTOP_WINDOW_MAXIMIZE_BUTTON_MENU_TAP_TO_TILE_TO_RIGHT(2013); override fun getId(): Int = mId } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt index 3e3dd74ae4b4..ad28dcc5598a 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt @@ -788,31 +788,6 @@ class DesktopTasksController( transitions.startTransition(TRANSIT_CHANGE, wct, null /* handler */) } - /** Moves a task in/out of full immersive state within the desktop. */ - fun toggleDesktopTaskFullImmersiveState(taskInfo: RunningTaskInfo) { - if (taskRepository.isTaskInFullImmersiveState(taskInfo.taskId)) { - exitDesktopTaskFromFullImmersive( - taskInfo, - DesktopImmersiveController.ExitReason.USER_INTERACTION, - ) - } else { - moveDesktopTaskToFullImmersive(taskInfo) - } - } - - private fun moveDesktopTaskToFullImmersive(taskInfo: RunningTaskInfo) { - check(taskInfo.isFreeform) { "Task must already be in freeform" } - desktopImmersiveController.moveTaskToImmersive(taskInfo) - } - - private fun exitDesktopTaskFromFullImmersive( - taskInfo: RunningTaskInfo, - reason: DesktopImmersiveController.ExitReason, - ) { - check(taskInfo.isFreeform) { "Task must already be in freeform" } - desktopImmersiveController.moveTaskToNonImmersive(taskInfo, reason) - } - /** * Quick-resizes a desktop task, toggling between a fullscreen state (represented by the stable * bounds) and a free floating state (either the last saved bounds if available or the default @@ -2375,7 +2350,7 @@ class DesktopTasksController( if (inImmersive && !requestingImmersive && !RecentsTransitionStateListener.isRunning(recentsTransitionState)) { // Exit immersive if the app is no longer requesting it. - exitDesktopTaskFromFullImmersive( + desktopImmersiveController.moveTaskToNonImmersive( taskInfo, DesktopImmersiveController.ExitReason.APP_NOT_IMMERSIVE ) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java index f48226930871..cdd439281ed5 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java @@ -107,6 +107,7 @@ import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.compatui.CompatUIController; import com.android.wm.shell.desktopmode.DesktopActivityOrientationChangeHandler; +import com.android.wm.shell.desktopmode.DesktopImmersiveController; import com.android.wm.shell.desktopmode.DesktopModeEventLogger; import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger; import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventEnum; @@ -174,6 +175,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, private final DisplayController mDisplayController; private final SyncTransactionQueue mSyncQueue; private final DesktopTasksController mDesktopTasksController; + private final DesktopImmersiveController mDesktopImmersiveController; private final InputManager mInputManager; private final InteractionJankMonitor mInteractionJankMonitor; private final MultiInstanceHelper mMultiInstanceHelper; @@ -249,6 +251,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, SyncTransactionQueue syncQueue, Transitions transitions, Optional<DesktopTasksController> desktopTasksController, + DesktopImmersiveController desktopImmersiveController, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer, InteractionJankMonitor interactionJankMonitor, AppToWebGenericLinksParser genericLinksParser, @@ -279,6 +282,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, syncQueue, transitions, desktopTasksController, + desktopImmersiveController, genericLinksParser, assistContentRequester, multiInstanceHelper, @@ -318,6 +322,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, SyncTransactionQueue syncQueue, Transitions transitions, Optional<DesktopTasksController> desktopTasksController, + DesktopImmersiveController desktopImmersiveController, AppToWebGenericLinksParser genericLinksParser, AssistContentRequester assistContentRequester, MultiInstanceHelper multiInstanceHelper, @@ -351,6 +356,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, mSyncQueue = syncQueue; mTransitions = transitions; mDesktopTasksController = desktopTasksController.get(); + mDesktopImmersiveController = desktopImmersiveController; mMultiInstanceHelper = multiInstanceHelper; mShellCommandHandler = shellCommandHandler; mWindowManager = windowManager; @@ -594,16 +600,33 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, if (decoration == null) { return; } - mDesktopTasksController.toggleDesktopTaskFullImmersiveState(decoration.mTaskInfo); + if (mDesktopRepository.isTaskInFullImmersiveState(taskId)) { + mDesktopModeUiEventLogger.log(decoration.mTaskInfo, + DesktopUiEventEnum.DESKTOP_WINDOW_MAXIMIZE_BUTTON_MENU_TAP_TO_RESTORE); + mDesktopImmersiveController.moveTaskToNonImmersive( + decoration.mTaskInfo, DesktopImmersiveController.ExitReason.USER_INTERACTION); + } else { + mDesktopModeUiEventLogger.log(decoration.mTaskInfo, + DesktopUiEventEnum.DESKTOP_WINDOW_MAXIMIZE_BUTTON_MENU_TAP_TO_IMMERSIVE); + mDesktopImmersiveController.moveTaskToImmersive(decoration.mTaskInfo); + } decoration.closeMaximizeMenu(); } - public void onSnapResize(int taskId, boolean left, InputMethod inputMethod) { + /** Snap-resize a task to the left or right side of the desktop. */ + public void onSnapResize(int taskId, boolean left, InputMethod inputMethod, boolean fromMenu) { final DesktopModeWindowDecoration decoration = mWindowDecorByTaskId.get(taskId); if (decoration == null) { return; } + if (fromMenu) { + final DesktopModeUiEventLogger.DesktopUiEventEnum event = left + ? DesktopUiEventEnum.DESKTOP_WINDOW_MAXIMIZE_BUTTON_MENU_TAP_TO_TILE_TO_LEFT + : DesktopUiEventEnum.DESKTOP_WINDOW_MAXIMIZE_BUTTON_MENU_TAP_TO_TILE_TO_RIGHT; + mDesktopModeUiEventLogger.log(decoration.mTaskInfo, event); + } + mInteractionJankMonitor.begin(decoration.mTaskSurface, mContext, mMainHandler, Cuj.CUJ_DESKTOP_MODE_SNAP_RESIZE, "maximize_menu_resizable"); mDesktopTasksController.handleInstantSnapResizingTask( @@ -932,6 +955,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, decoration.closeMaximizeMenu(); } else { mHasLongClicked = true; + mDesktopModeUiEventLogger.log(decoration.mTaskInfo, + DesktopUiEventEnum.DESKTOP_WINDOW_MAXIMIZE_BUTTON_REVEAL_MENU); decoration.createMaximizeMenu(); } return true; @@ -1587,13 +1612,13 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, windowDecoration.setOnLeftSnapClickListener(() -> { onSnapResize(taskInfo.taskId, /* isLeft= */ true, DesktopModeEventLogger.getInputMethodFromMotionEvent( - touchEventListener.mMotionEvent)); + touchEventListener.mMotionEvent), /* fromMenu= */ true); return Unit.INSTANCE; }); windowDecoration.setOnRightSnapClickListener(() -> { onSnapResize(taskInfo.taskId, /* isLeft= */ false, DesktopModeEventLogger.getInputMethodFromMotionEvent( - touchEventListener.mMotionEvent)); + touchEventListener.mMotionEvent), /* fromMenu= */ true); return Unit.INSTANCE; }); windowDecoration.setOnToDesktopClickListener(desktopModeTransitionSource -> { @@ -1622,6 +1647,14 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, CompatUIController.launchUserAspectRatioSettings(mContext, taskInfo); return Unit.INSTANCE; }); + windowDecoration.setOnMaximizeHoverListener(() -> { + if (!windowDecoration.isMaximizeMenuActive()) { + mDesktopModeUiEventLogger.log(taskInfo, + DesktopUiEventEnum.DESKTOP_WINDOW_MAXIMIZE_BUTTON_REVEAL_MENU); + windowDecoration.createMaximizeMenu(); + } + return Unit.INSTANCE; + }); windowDecoration.setCaptionListeners( touchEventListener, touchEventListener, touchEventListener, touchEventListener); windowDecoration.setExclusionRegionListener(mExclusionRegionListener); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java index d57044a4d27c..e283982b8469 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java @@ -155,6 +155,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin private Function0<Unit> mOnNewWindowClickListener; private Function0<Unit> mOnManageWindowsClickListener; private Function0<Unit> mOnChangeAspectRatioClickListener; + private Function0<Unit> mOnMaximizeHoverListener; private DragPositioningCallback mDragPositioningCallback; private DragResizeInputListener mDragResizeListener; private Runnable mCurrentViewHostRunnable = null; @@ -370,6 +371,11 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin mOnChangeAspectRatioClickListener = listener; } + /** Registers a listener to be called when the maximize header button is hovered. */ + void setOnMaximizeHoverListener(Function0<Unit> listener) { + mOnMaximizeHoverListener = listener; + } + void setCaptionListeners( View.OnClickListener onCaptionButtonClickListener, View.OnTouchListener onCaptionTouchListener, @@ -841,12 +847,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin mOnCaptionGenericMotionListener, mAppName, mAppIconBitmap, - () -> { - if (!isMaximizeMenuActive()) { - createMaximizeMenu(); - } - return Unit.INSTANCE; - }); + mOnMaximizeHoverListener); } throw new IllegalArgumentException("Unexpected layout resource id"); } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandlerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandlerTest.kt index 887bdc259f54..0756b6b6246c 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandlerTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandlerTest.kt @@ -206,7 +206,10 @@ class DesktopModeKeyGestureHandlerTest : ShellTestCase() { assertThat(result).isTrue() verify(desktopModeWindowDecorViewModel).onSnapResize( - task.taskId, true, DesktopModeEventLogger.Companion.InputMethod.KEYBOARD + task.taskId, + true, + DesktopModeEventLogger.Companion.InputMethod.KEYBOARD, + /* fromMenu= */ false ) } @@ -235,7 +238,10 @@ class DesktopModeKeyGestureHandlerTest : ShellTestCase() { assertThat(result).isTrue() verify(desktopModeWindowDecorViewModel).onSnapResize( - task.taskId, false, DesktopModeEventLogger.Companion.InputMethod.KEYBOARD + task.taskId, + false, + DesktopModeEventLogger.Companion.InputMethod.KEYBOARD, + /* fromMenu= */ false ) } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt index fc31d08b4571..5c0027220ec9 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt @@ -3751,26 +3751,6 @@ class DesktopTasksControllerTest : ShellTestCase() { } @Test - fun toggleImmersive_enter_movesToImmersive() { - val task = setUpFreeformTask(DEFAULT_DISPLAY) - taskRepository.setTaskInFullImmersiveState(DEFAULT_DISPLAY, task.taskId, false /* immersive */) - - controller.toggleDesktopTaskFullImmersiveState(task) - - verify(mMockDesktopImmersiveController).moveTaskToImmersive(task) - } - - @Test - fun toggleImmersive_exit_movesToNonImmersive() { - val task = setUpFreeformTask(DEFAULT_DISPLAY) - taskRepository.setTaskInFullImmersiveState(DEFAULT_DISPLAY, task.taskId, true /* immersive */) - - controller.toggleDesktopTaskFullImmersiveState(task) - - verify(mMockDesktopImmersiveController).moveTaskToNonImmersive(eq(task), any()) - } - - @Test @EnableFlags(FLAG_ENABLE_FULLY_IMMERSIVE_IN_DESKTOP) fun onTaskInfoChanged_inImmersiveUnrequestsImmersive_exits() { val task = setUpFreeformTask(DEFAULT_DISPLAY) diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.kt index b873162e6fe3..6c910f56f069 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.kt @@ -59,6 +59,7 @@ import com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn import com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession import com.android.window.flags.Flags import com.android.wm.shell.R +import com.android.wm.shell.desktopmode.DesktopImmersiveController import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.InputMethod import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.ResizeTrigger import com.android.wm.shell.desktopmode.DesktopTasksController.SnapPosition @@ -1000,7 +1001,7 @@ class DesktopModeWindowDecorViewModelTests : DesktopModeWindowDecorViewModelTest @Test @EnableFlags(Flags.FLAG_ENABLE_FULLY_IMMERSIVE_IN_DESKTOP) - fun testMaximizeButtonClick_requestingImmersive_togglesDesktopImmersiveState() { + fun testImmersiveButtonClick_entersImmersiveMode() { val onClickListenerCaptor = forClass(View.OnClickListener::class.java) as ArgumentCaptor<View.OnClickListener> val decor = createOpenTaskDecoration( @@ -1010,11 +1011,35 @@ class DesktopModeWindowDecorViewModelTests : DesktopModeWindowDecorViewModelTest ) val view = mock(View::class.java) whenever(view.id).thenReturn(R.id.maximize_window) + whenever(mockDesktopRepository.isTaskInFullImmersiveState(decor.mTaskInfo.taskId)) + .thenReturn(false) onClickListenerCaptor.value.onClick(view) - verify(mockDesktopTasksController) - .toggleDesktopTaskFullImmersiveState(decor.mTaskInfo) + verify(mockDesktopImmersiveController).moveTaskToImmersive(decor.mTaskInfo) + } + + @Test + @EnableFlags(Flags.FLAG_ENABLE_FULLY_IMMERSIVE_IN_DESKTOP) + fun testImmersiveRestoreButtonClick_exitsImmersiveMode() { + val onClickListenerCaptor = forClass(View.OnClickListener::class.java) + as ArgumentCaptor<View.OnClickListener> + val decor = createOpenTaskDecoration( + windowingMode = WINDOWING_MODE_FREEFORM, + onCaptionButtonClickListener = onClickListenerCaptor, + requestingImmersive = true, + ) + val view = mock(View::class.java) + whenever(view.id).thenReturn(R.id.maximize_window) + whenever(mockDesktopRepository.isTaskInFullImmersiveState(decor.mTaskInfo.taskId)) + .thenReturn(true) + + onClickListenerCaptor.value.onClick(view) + + verify(mockDesktopImmersiveController).moveTaskToNonImmersive( + decor.mTaskInfo, + DesktopImmersiveController.ExitReason.USER_INTERACTION + ) } @Test @@ -1042,18 +1067,19 @@ class DesktopModeWindowDecorViewModelTests : DesktopModeWindowDecorViewModelTest @Test @EnableFlags(Flags.FLAG_ENABLE_FULLY_IMMERSIVE_IN_DESKTOP) - fun testImmersiveClick_togglesImmersiveState() { + fun testImmersiveMenuOptionClick_entersImmersiveMode() { val onImmersiveClickCaptor = argumentCaptor<() -> Unit>() val decor = createOpenTaskDecoration( windowingMode = WINDOWING_MODE_FREEFORM, onImmersiveOrRestoreListenerCaptor = onImmersiveClickCaptor, requestingImmersive = true, ) + whenever(mockDesktopRepository.isTaskInFullImmersiveState(decor.mTaskInfo.taskId)) + .thenReturn(false) onImmersiveClickCaptor.firstValue() - verify(mockDesktopTasksController) - .toggleDesktopTaskFullImmersiveState(decor.mTaskInfo) + verify(mockDesktopImmersiveController).moveTaskToImmersive(decor.mTaskInfo) } @Test diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTestsBase.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTestsBase.kt index 1670f2a6815b..080f496593cf 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTestsBase.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTestsBase.kt @@ -54,6 +54,7 @@ import com.android.wm.shell.common.DisplayLayout import com.android.wm.shell.common.MultiInstanceHelper import com.android.wm.shell.common.SyncTransactionQueue import com.android.wm.shell.desktopmode.DesktopActivityOrientationChangeHandler +import com.android.wm.shell.desktopmode.DesktopImmersiveController import com.android.wm.shell.desktopmode.DesktopModeEventLogger import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger import com.android.wm.shell.desktopmode.DesktopRepository @@ -112,6 +113,7 @@ open class DesktopModeWindowDecorViewModelTestsBase : ShellTestCase() { protected val displayInsetsController = mock<DisplayInsetsController>() protected val mockSyncQueue = mock<SyncTransactionQueue>() protected val mockDesktopTasksController = mock<DesktopTasksController>() + protected val mockDesktopImmersiveController = mock<DesktopImmersiveController>() protected val mockInputMonitor = mock<InputMonitor>() protected val mockTransitions = mock<Transitions>() internal val mockInputMonitorFactory = @@ -183,6 +185,7 @@ open class DesktopModeWindowDecorViewModelTestsBase : ShellTestCase() { mockSyncQueue, mockTransitions, Optional.of(mockDesktopTasksController), + mockDesktopImmersiveController, mockGenericLinksParser, mockAssistContentRequester, mockMultiInstanceHelper, |