Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 79fd35a4 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Reparent desktop task to TDA..." into main

parents aafaa0d0 40fd29e4
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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,
@@ -652,6 +653,7 @@ public abstract class WMShellModule {
                launchAdjacentController,
                windowDecorViewModel,
                desktopTasksController,
                desktopUserRepositories,
                null /* stageCoordinator */,
                multiInstanceHelper,
                splitState,
+6 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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,
@@ -268,6 +271,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
        mLaunchAdjacentController = launchAdjacentController;
        mWindowDecorViewModel = windowDecorViewModel;
        mDesktopTasksController = desktopTasksController;
        mDesktopUserRepositories = desktopUserRepositories;
        mStageCoordinator = stageCoordinator;
        mMultiInstanceHelpher = multiInstanceHelper;
        mSplitState = splitState;
@@ -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);
    }

+24 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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) {
@@ -411,6 +415,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        mWindowDecorViewModel = windowDecorViewModel;
        mSplitState = splitState;
        mDesktopTasksController = desktopTasksController;
        mDesktopUserRepositories = desktopUserRepositories;
        mRootTDAOrganizer = rootTDAOrganizer;
        mDesktopState = desktopState;
        mMSDLPlayer = msdlPlayer;
@@ -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) {
@@ -517,6 +523,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        mWindowDecorViewModel = windowDecorViewModel;
        mSplitState = splitState;
        mDesktopTasksController = desktopTasksController;
        mDesktopUserRepositories = desktopUserRepositories;
        mRootTDAOrganizer = rootTDAOrganizer;
        mDesktopState = desktopState;
        mMSDLPlayer = msdlPlayer;
@@ -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);
@@ -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);
    }
+2 −1
Original line number Diff line number Diff line
@@ -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);

+1 −1
Original line number Diff line number Diff line
@@ -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