summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java2
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopImmersiveController.kt2
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandler.kt6
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeUiEventLogger.kt14
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt27
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java41
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java13
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandlerTest.kt10
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt20
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.kt38
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTestsBase.kt3
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,