diff options
| author | 2023-10-20 11:01:58 -0700 | |
|---|---|---|
| committer | 2023-10-30 12:37:16 -0700 | |
| commit | 82f73a4a3c4885aa32feff0ea6d4d6e2ea34e17a (patch) | |
| tree | df5baf15e71787e6883fb974e450ab1d436f3621 | |
| parent | ea23ced3ea8b22e528fd29102404bf13fe210832 (diff) | |
Allow split apps to use fullscreen button.
When the fullscreen button is clicked in a split app's handle menu,
dismiss the other app and move the chosen app to fullscreen.
Additionally, set the windowing mode to WINDOWING_MODE_UNDEFINED rather
than WINDOWING_MODE_MULTI_WINDOW as the latter interferes with the
existing split screen -> fullscreen framework.
Bug: 306230346
Test: Manual
Change-Id: I98605c53c5aa7ef7d471ff12aed1772a84448075
2 files changed, 14 insertions, 8 deletions
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 412a5b5a6997..8e12991080ed 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 @@ -343,9 +343,8 @@ class DesktopTasksController( task.taskId ) val wct = WindowContainerTransaction() - wct.setWindowingMode(task.token, WINDOWING_MODE_MULTI_WINDOW) wct.setBounds(task.token, Rect()) - wct.setDensityDpi(task.token, getDefaultDensityDpi()) + addMoveToSplitChanges(wct, task) if (Transitions.ENABLE_SHELL_TRANSITIONS) { transitions.startTransition(TRANSIT_CHANGE, wct, null /* handler */) } else { @@ -827,7 +826,9 @@ class DesktopTasksController( wct: WindowContainerTransaction, taskInfo: RunningTaskInfo ) { - wct.setWindowingMode(taskInfo.token, WINDOWING_MODE_MULTI_WINDOW) + // Explicitly setting multi-window at task level interferes with animations. + // Let task inherit windowing mode once transition is complete instead. + wct.setWindowingMode(taskInfo.token, WINDOWING_MODE_UNDEFINED) // The task's density may have been overridden in freeform; revert it here as we don't // want it overridden in multi-window. wct.setDensityDpi(taskInfo.token, getDefaultDensityDpi()) 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 ca91d580b4ac..ca74620ea82c 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 @@ -81,6 +81,7 @@ import com.android.wm.shell.freeform.FreeformTaskTransitionStarter; import com.android.wm.shell.recents.RecentsTransitionHandler; import com.android.wm.shell.recents.RecentsTransitionStateListener; import com.android.wm.shell.splitscreen.SplitScreen; +import com.android.wm.shell.splitscreen.SplitScreen.StageType; import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.sysui.KeyguardChangeListener; import com.android.wm.shell.sysui.ShellCommandHandler; @@ -237,7 +238,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { mSplitScreenController = splitScreenController; mSplitScreenController.registerSplitScreenListener(new SplitScreen.SplitScreenListener() { @Override - public void onTaskStageChanged(int taskId, int stage, boolean visible) { + public void onTaskStageChanged(int taskId, @StageType int stage, boolean visible) { if (visible) { DesktopModeWindowDecoration decor = mWindowDecorByTaskId.get(taskId); if (decor != null && DesktopModeStatus.isEnabled() @@ -389,10 +390,10 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { final DesktopModeWindowDecoration decoration = mWindowDecorByTaskId.get(mTaskId); final int id = v.getId(); if (id == R.id.close_window) { - mTaskOperations.closeTask(mTaskToken); if (isTaskInSplitScreen(mTaskId)) { - RunningTaskInfo remainingTask = getOtherSplitTask(mTaskId); - mSplitScreenController.moveTaskToFullscreen(remainingTask.taskId); + mSplitScreenController.moveTaskToFullscreen(getOtherSplitTask(mTaskId).taskId); + } else { + mTaskOperations.closeTask(mTaskToken); } decoration.closeMaximizeMenu(); } else if (id == R.id.back_button) { @@ -417,8 +418,12 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { } decoration.closeHandleMenu(); } else if (id == R.id.fullscreen_button) { - mDesktopTasksController.ifPresent(c -> c.moveToFullscreen(mTaskId)); decoration.closeHandleMenu(); + if (isTaskInSplitScreen(mTaskId)) { + mSplitScreenController.moveTaskToFullscreen(mTaskId); + } else { + mDesktopTasksController.ifPresent(c -> c.moveToFullscreen(mTaskId)); + } } else if (id == R.id.split_screen_button) { decoration.closeHandleMenu(); mDesktopTasksController.ifPresent(c -> { |