Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +2 −0 Original line number Diff line number Diff line Loading @@ -625,6 +625,7 @@ public abstract class WMShellModule { LaunchAdjacentController launchAdjacentController, Optional<WindowDecorViewModel> windowDecorViewModel, Optional<DesktopTasksController> desktopTasksController, Optional<DesktopUserRepositories> desktopUserRepositories, MultiInstanceHelper multiInstanceHelper, SplitState splitState, @ShellMainThread ShellExecutor mainExecutor, Loading Loading @@ -652,6 +653,7 @@ public abstract class WMShellModule { launchAdjacentController, windowDecorViewModel, desktopTasksController, desktopUserRepositories, null /* stageCoordinator */, multiInstanceHelper, splitState, Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +6 −1 Original line number Diff line number Diff line Loading @@ -98,6 +98,7 @@ import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.split.SplitScreenUtils; import com.android.wm.shell.common.split.SplitState; import com.android.wm.shell.desktopmode.DesktopTasksController; import com.android.wm.shell.desktopmode.DesktopUserRepositories; import com.android.wm.shell.draganddrop.DragAndDropController; import com.android.wm.shell.draganddrop.SplitDragPolicy; import com.android.wm.shell.protolog.ShellProtoLogGroup; Loading Loading @@ -206,6 +207,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter, private final LaunchAdjacentController mLaunchAdjacentController; private final Optional<WindowDecorViewModel> mWindowDecorViewModel; private final Optional<DesktopTasksController> mDesktopTasksController; private final Optional<DesktopUserRepositories> mDesktopUserRepositories; private final MultiInstanceHelper mMultiInstanceHelpher; private final SplitState mSplitState; private final RootDisplayAreaOrganizer mRootDisplayAreaOrganizer; Loading Loading @@ -239,6 +241,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter, LaunchAdjacentController launchAdjacentController, Optional<WindowDecorViewModel> windowDecorViewModel, Optional<DesktopTasksController> desktopTasksController, Optional<DesktopUserRepositories> desktopUserRepositories, @Nullable StageCoordinator stageCoordinator, MultiInstanceHelper multiInstanceHelper, SplitState splitState, Loading Loading @@ -268,6 +271,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter, mLaunchAdjacentController = launchAdjacentController; mWindowDecorViewModel = windowDecorViewModel; mDesktopTasksController = desktopTasksController; mDesktopUserRepositories = desktopUserRepositories; mStageCoordinator = stageCoordinator; mMultiInstanceHelpher = multiInstanceHelper; mSplitState = splitState; Loading Loading @@ -319,7 +323,8 @@ public class SplitScreenController implements SplitDragPolicy.Starter, mTaskOrganizer, mDisplayController, mDisplayImeController, mDisplayInsetsController, mTransitions, mTransactionPool, mIconProvider, mMainExecutor, mMainHandler, mRecentTasksOptional, mLaunchAdjacentController, mWindowDecorViewModel, mSplitState, mDesktopTasksController, mRootTDAOrganizer, mWindowDecorViewModel, mSplitState, mDesktopTasksController, mDesktopUserRepositories, mRootTDAOrganizer, mRootDisplayAreaOrganizer, mDesktopState, mActivityTaskManager, mMSDLPlayer); } Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +24 −0 Original line number Diff line number Diff line Loading @@ -155,7 +155,9 @@ import com.android.wm.shell.common.split.SplitDecorManager; import com.android.wm.shell.common.split.SplitLayout; import com.android.wm.shell.common.split.SplitState; import com.android.wm.shell.common.split.SplitWindowManager; import com.android.wm.shell.desktopmode.DesktopRepository; import com.android.wm.shell.desktopmode.DesktopTasksController; import com.android.wm.shell.desktopmode.DesktopUserRepositories; import com.android.wm.shell.protolog.ShellProtoLogGroup; import com.android.wm.shell.recents.RecentTasksController; import com.android.wm.shell.shared.TransactionPool; Loading Loading @@ -245,6 +247,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, private final LaunchAdjacentController mLaunchAdjacentController; private final Optional<WindowDecorViewModel> mWindowDecorViewModel; private final Optional<DesktopTasksController> mDesktopTasksController; private final Optional<DesktopUserRepositories> mDesktopUserRepositories; /** Singleton source of truth for the current state of split screen on this device. */ private final SplitState mSplitState; private final SplitStatusBarHider mStatusBarHider; Loading Loading @@ -395,6 +398,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, LaunchAdjacentController launchAdjacentController, Optional<WindowDecorViewModel> windowDecorViewModel, SplitState splitState, Optional<DesktopTasksController> desktopTasksController, Optional<DesktopUserRepositories> desktopUserRepositories, RootTaskDisplayAreaOrganizer rootTDAOrganizer, RootDisplayAreaOrganizer rootDisplayAreaOrganizer, DesktopState desktopState, IActivityTaskManager activityTaskManager, MSDLPlayer msdlPlayer) { Loading @@ -411,6 +415,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, mWindowDecorViewModel = windowDecorViewModel; mSplitState = splitState; mDesktopTasksController = desktopTasksController; mDesktopUserRepositories = desktopUserRepositories; mRootTDAOrganizer = rootTDAOrganizer; mDesktopState = desktopState; mMSDLPlayer = msdlPlayer; Loading Loading @@ -491,6 +496,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, LaunchAdjacentController launchAdjacentController, Optional<WindowDecorViewModel> windowDecorViewModel, SplitState splitState, Optional<DesktopTasksController> desktopTasksController, Optional<DesktopUserRepositories> desktopUserRepositories, RootTaskDisplayAreaOrganizer rootTDAOrganizer, RootDisplayAreaOrganizer rootDisplayAreaOrganizer, DesktopState desktopState, IActivityTaskManager activityTaskManager, MSDLPlayer msdlPlayer) { Loading @@ -517,6 +523,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, mWindowDecorViewModel = windowDecorViewModel; mSplitState = splitState; mDesktopTasksController = desktopTasksController; mDesktopUserRepositories = desktopUserRepositories; mRootTDAOrganizer = rootTDAOrganizer; mDesktopState = desktopState; mMSDLPlayer = msdlPlayer; Loading Loading @@ -982,7 +989,18 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, RunningTaskInfo taskInfo = mTaskOrganizer.getRunningTaskInfo(taskId); if (enableFullScreenWindowOnRemovingSplitScreenStageBugfix() && taskInfo != null && taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) { RunningTaskInfo task = mTaskOrganizer.getRunningTaskInfo(taskId); prepareTasksForSplitScreen(new int[]{taskId}, wct, outOptions); if (DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue()) { // TODO: b/422176395 - Use options#setReparentLeafTaskToTda instead once it can work // with wct#startTask. DesktopRepository currentDesktopRepo = mDesktopUserRepositories.map( DesktopUserRepositories::getCurrent).orElse( null); if (currentDesktopRepo != null && currentDesktopRepo.isActiveTask(taskId)) { wct.reparent(task.getToken(), null, true); } } } wct.startTask(taskId, outOptions[0]); mSplitTransitions.startFullscreenTransition(wct, remoteTransition); Loading Loading @@ -2071,6 +2089,12 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, int targetWindowingMode) { ActivityOptions options = ActivityOptions.fromBundle(opts); options.setLaunchWindowingMode(targetWindowingMode); // We are trying to move to fullscreen, reparent the task to tda to prevent it from being // launched in a previously existing root task. if (DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue() && targetWindowingMode == WINDOWING_MODE_FULLSCREEN) { options.setReparentLeafTaskToTda(true); } opts.putAll(options.toBundle()); addActivityOptions(opts, launchTarget); } Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/TvSplitScreenController.java +2 −1 Original line number Diff line number Diff line Loading @@ -103,7 +103,8 @@ public class TvSplitScreenController extends SplitScreenController { syncQueue, rootTDAOrganizer, displayController, displayImeController, displayInsetsController, null, transitions, transactionPool, iconProvider, recentTasks, launchAdjacentController, Optional.empty(), Optional.empty(), null /* stageCoordinator */, multiInstanceHelper, splitState, Optional.empty(), Optional.empty(), null /* stageCoordinator */, multiInstanceHelper, splitState, mainExecutor, mainHandler, rootDisplayAreaOrganizer, desktopState, activityTaskManager, msdlPlayer); Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/TvStageCoordinator.java +1 −1 Original line number Diff line number Diff line Loading @@ -67,7 +67,7 @@ public class TvStageCoordinator extends StageCoordinator super(context, displayId, syncQueue, taskOrganizer, displayController, displayImeController, displayInsetsController, transitions, transactionPool, iconProvider, mainExecutor, mainHandler, recentTasks, launchAdjacentController, Optional.empty(), splitState, Optional.empty(), rootTDAOrganizer, Optional.empty(), splitState, Optional.empty(), Optional.empty(), rootTDAOrganizer, rootDisplayAreaOrganizer, desktopState, activityTaskManager, msdlPlayer); mTvSplitMenuController = new TvSplitMenuController(context, this, Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +2 −0 Original line number Diff line number Diff line Loading @@ -625,6 +625,7 @@ public abstract class WMShellModule { LaunchAdjacentController launchAdjacentController, Optional<WindowDecorViewModel> windowDecorViewModel, Optional<DesktopTasksController> desktopTasksController, Optional<DesktopUserRepositories> desktopUserRepositories, MultiInstanceHelper multiInstanceHelper, SplitState splitState, @ShellMainThread ShellExecutor mainExecutor, Loading Loading @@ -652,6 +653,7 @@ public abstract class WMShellModule { launchAdjacentController, windowDecorViewModel, desktopTasksController, desktopUserRepositories, null /* stageCoordinator */, multiInstanceHelper, splitState, Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +6 −1 Original line number Diff line number Diff line Loading @@ -98,6 +98,7 @@ import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.split.SplitScreenUtils; import com.android.wm.shell.common.split.SplitState; import com.android.wm.shell.desktopmode.DesktopTasksController; import com.android.wm.shell.desktopmode.DesktopUserRepositories; import com.android.wm.shell.draganddrop.DragAndDropController; import com.android.wm.shell.draganddrop.SplitDragPolicy; import com.android.wm.shell.protolog.ShellProtoLogGroup; Loading Loading @@ -206,6 +207,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter, private final LaunchAdjacentController mLaunchAdjacentController; private final Optional<WindowDecorViewModel> mWindowDecorViewModel; private final Optional<DesktopTasksController> mDesktopTasksController; private final Optional<DesktopUserRepositories> mDesktopUserRepositories; private final MultiInstanceHelper mMultiInstanceHelpher; private final SplitState mSplitState; private final RootDisplayAreaOrganizer mRootDisplayAreaOrganizer; Loading Loading @@ -239,6 +241,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter, LaunchAdjacentController launchAdjacentController, Optional<WindowDecorViewModel> windowDecorViewModel, Optional<DesktopTasksController> desktopTasksController, Optional<DesktopUserRepositories> desktopUserRepositories, @Nullable StageCoordinator stageCoordinator, MultiInstanceHelper multiInstanceHelper, SplitState splitState, Loading Loading @@ -268,6 +271,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter, mLaunchAdjacentController = launchAdjacentController; mWindowDecorViewModel = windowDecorViewModel; mDesktopTasksController = desktopTasksController; mDesktopUserRepositories = desktopUserRepositories; mStageCoordinator = stageCoordinator; mMultiInstanceHelpher = multiInstanceHelper; mSplitState = splitState; Loading Loading @@ -319,7 +323,8 @@ public class SplitScreenController implements SplitDragPolicy.Starter, mTaskOrganizer, mDisplayController, mDisplayImeController, mDisplayInsetsController, mTransitions, mTransactionPool, mIconProvider, mMainExecutor, mMainHandler, mRecentTasksOptional, mLaunchAdjacentController, mWindowDecorViewModel, mSplitState, mDesktopTasksController, mRootTDAOrganizer, mWindowDecorViewModel, mSplitState, mDesktopTasksController, mDesktopUserRepositories, mRootTDAOrganizer, mRootDisplayAreaOrganizer, mDesktopState, mActivityTaskManager, mMSDLPlayer); } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +24 −0 Original line number Diff line number Diff line Loading @@ -155,7 +155,9 @@ import com.android.wm.shell.common.split.SplitDecorManager; import com.android.wm.shell.common.split.SplitLayout; import com.android.wm.shell.common.split.SplitState; import com.android.wm.shell.common.split.SplitWindowManager; import com.android.wm.shell.desktopmode.DesktopRepository; import com.android.wm.shell.desktopmode.DesktopTasksController; import com.android.wm.shell.desktopmode.DesktopUserRepositories; import com.android.wm.shell.protolog.ShellProtoLogGroup; import com.android.wm.shell.recents.RecentTasksController; import com.android.wm.shell.shared.TransactionPool; Loading Loading @@ -245,6 +247,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, private final LaunchAdjacentController mLaunchAdjacentController; private final Optional<WindowDecorViewModel> mWindowDecorViewModel; private final Optional<DesktopTasksController> mDesktopTasksController; private final Optional<DesktopUserRepositories> mDesktopUserRepositories; /** Singleton source of truth for the current state of split screen on this device. */ private final SplitState mSplitState; private final SplitStatusBarHider mStatusBarHider; Loading Loading @@ -395,6 +398,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, LaunchAdjacentController launchAdjacentController, Optional<WindowDecorViewModel> windowDecorViewModel, SplitState splitState, Optional<DesktopTasksController> desktopTasksController, Optional<DesktopUserRepositories> desktopUserRepositories, RootTaskDisplayAreaOrganizer rootTDAOrganizer, RootDisplayAreaOrganizer rootDisplayAreaOrganizer, DesktopState desktopState, IActivityTaskManager activityTaskManager, MSDLPlayer msdlPlayer) { Loading @@ -411,6 +415,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, mWindowDecorViewModel = windowDecorViewModel; mSplitState = splitState; mDesktopTasksController = desktopTasksController; mDesktopUserRepositories = desktopUserRepositories; mRootTDAOrganizer = rootTDAOrganizer; mDesktopState = desktopState; mMSDLPlayer = msdlPlayer; Loading Loading @@ -491,6 +496,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, LaunchAdjacentController launchAdjacentController, Optional<WindowDecorViewModel> windowDecorViewModel, SplitState splitState, Optional<DesktopTasksController> desktopTasksController, Optional<DesktopUserRepositories> desktopUserRepositories, RootTaskDisplayAreaOrganizer rootTDAOrganizer, RootDisplayAreaOrganizer rootDisplayAreaOrganizer, DesktopState desktopState, IActivityTaskManager activityTaskManager, MSDLPlayer msdlPlayer) { Loading @@ -517,6 +523,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, mWindowDecorViewModel = windowDecorViewModel; mSplitState = splitState; mDesktopTasksController = desktopTasksController; mDesktopUserRepositories = desktopUserRepositories; mRootTDAOrganizer = rootTDAOrganizer; mDesktopState = desktopState; mMSDLPlayer = msdlPlayer; Loading Loading @@ -982,7 +989,18 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, RunningTaskInfo taskInfo = mTaskOrganizer.getRunningTaskInfo(taskId); if (enableFullScreenWindowOnRemovingSplitScreenStageBugfix() && taskInfo != null && taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) { RunningTaskInfo task = mTaskOrganizer.getRunningTaskInfo(taskId); prepareTasksForSplitScreen(new int[]{taskId}, wct, outOptions); if (DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue()) { // TODO: b/422176395 - Use options#setReparentLeafTaskToTda instead once it can work // with wct#startTask. DesktopRepository currentDesktopRepo = mDesktopUserRepositories.map( DesktopUserRepositories::getCurrent).orElse( null); if (currentDesktopRepo != null && currentDesktopRepo.isActiveTask(taskId)) { wct.reparent(task.getToken(), null, true); } } } wct.startTask(taskId, outOptions[0]); mSplitTransitions.startFullscreenTransition(wct, remoteTransition); Loading Loading @@ -2071,6 +2089,12 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, int targetWindowingMode) { ActivityOptions options = ActivityOptions.fromBundle(opts); options.setLaunchWindowingMode(targetWindowingMode); // We are trying to move to fullscreen, reparent the task to tda to prevent it from being // launched in a previously existing root task. if (DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue() && targetWindowingMode == WINDOWING_MODE_FULLSCREEN) { options.setReparentLeafTaskToTda(true); } opts.putAll(options.toBundle()); addActivityOptions(opts, launchTarget); } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/TvSplitScreenController.java +2 −1 Original line number Diff line number Diff line Loading @@ -103,7 +103,8 @@ public class TvSplitScreenController extends SplitScreenController { syncQueue, rootTDAOrganizer, displayController, displayImeController, displayInsetsController, null, transitions, transactionPool, iconProvider, recentTasks, launchAdjacentController, Optional.empty(), Optional.empty(), null /* stageCoordinator */, multiInstanceHelper, splitState, Optional.empty(), Optional.empty(), null /* stageCoordinator */, multiInstanceHelper, splitState, mainExecutor, mainHandler, rootDisplayAreaOrganizer, desktopState, activityTaskManager, msdlPlayer); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/TvStageCoordinator.java +1 −1 Original line number Diff line number Diff line Loading @@ -67,7 +67,7 @@ public class TvStageCoordinator extends StageCoordinator super(context, displayId, syncQueue, taskOrganizer, displayController, displayImeController, displayInsetsController, transitions, transactionPool, iconProvider, mainExecutor, mainHandler, recentTasks, launchAdjacentController, Optional.empty(), splitState, Optional.empty(), rootTDAOrganizer, Optional.empty(), splitState, Optional.empty(), Optional.empty(), rootTDAOrganizer, rootDisplayAreaOrganizer, desktopState, activityTaskManager, msdlPlayer); mTvSplitMenuController = new TvSplitMenuController(context, this, Loading