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

Commit 1457ccf8 authored by Louis Chang's avatar Louis Chang Committed by Automerger Merge Worker
Browse files

Merge "Remove use of TaskTile" into rvc-dev am: 32a26120

Change-Id: I960de6dd1c2f5019c6d7e4308899c7d278b625a6
parents 685a356d 32a26120
Loading
Loading
Loading
Loading
+16 −0
Original line number Original line Diff line number Diff line
@@ -25,6 +25,7 @@ import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.animation.ValueAnimator;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.app.ActivityTaskManager;
import android.content.Context;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.graphics.Rect;
@@ -129,6 +130,7 @@ public class DividerView extends FrameLayout implements OnTouchListener,


    private int mDividerInsets;
    private int mDividerInsets;
    private final Display mDefaultDisplay;
    private final Display mDefaultDisplay;
    private boolean mSupportSplitScreenMultiWindow;


    private int mDividerSize;
    private int mDividerSize;
    private int mTouchElevation;
    private int mTouchElevation;
@@ -282,6 +284,8 @@ public class DividerView extends FrameLayout implements OnTouchListener,
        final DisplayManager displayManager =
        final DisplayManager displayManager =
                (DisplayManager) mContext.getSystemService(Context.DISPLAY_SERVICE);
                (DisplayManager) mContext.getSystemService(Context.DISPLAY_SERVICE);
        mDefaultDisplay = displayManager.getDisplay(Display.DEFAULT_DISPLAY);
        mDefaultDisplay = displayManager.getDisplay(Display.DEFAULT_DISPLAY);
        mSupportSplitScreenMultiWindow =
                ActivityTaskManager.supportsSplitScreenMultiWindow(mContext);
    }
    }


    @Override
    @Override
@@ -354,6 +358,11 @@ public class DividerView extends FrameLayout implements OnTouchListener,


    @Override
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        if (!mSupportSplitScreenMultiWindow) {
            super.onLayout(changed, left, top, right, bottom);
            return;
        }

        if (mFirstLayout) {
        if (mFirstLayout) {
            // Wait for first layout so that the ViewRootImpl surface has been created.
            // Wait for first layout so that the ViewRootImpl surface has been created.
            initializeSurfaceState();
            initializeSurfaceState();
@@ -1085,6 +1094,13 @@ public class DividerView extends FrameLayout implements OnTouchListener,
        crop.offsetTo(-(otherTaskRect.left - otherRect.left),
        crop.offsetTo(-(otherTaskRect.left - otherRect.left),
                -(otherTaskRect.top - otherRect.top));
                -(otherTaskRect.top - otherRect.top));
        t.setWindowCrop(mTiles.mSecondarySurface, crop);
        t.setWindowCrop(mTiles.mSecondarySurface, crop);
        // Reposition home and recents surfaces or they would be positioned relatively to its
        // parent (split-screen secondary task) position.
        for (int i = mTiles.mHomeAndRecentsSurfaces.size() - 1; i >= 0; --i) {
            t.setPosition(mTiles.mHomeAndRecentsSurfaces.get(i),
                    mTiles.mHomeBounds.left - otherTaskRect.left,
                    mTiles.mHomeBounds.top - otherTaskRect.top);
        }
        final SurfaceControl dividerCtrl = getWindowSurfaceControl();
        final SurfaceControl dividerCtrl = getWindowSurfaceControl();
        if (dividerCtrl != null) {
        if (dividerCtrl != null) {
            if (isHorizontalDivision()) {
            if (isHorizontalDivision()) {
+6 −1
Original line number Original line Diff line number Diff line
@@ -26,12 +26,15 @@ import static android.window.WindowOrganizer.TaskOrganizer;


import android.app.ActivityManager.RunningTaskInfo;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.WindowConfiguration;
import android.app.WindowConfiguration;
import android.graphics.Rect;
import android.os.RemoteException;
import android.os.RemoteException;
import android.util.Log;
import android.util.Log;
import android.view.Display;
import android.view.Display;
import android.window.ITaskOrganizer;
import android.view.SurfaceControl;
import android.view.SurfaceControl;
import android.view.SurfaceSession;
import android.view.SurfaceSession;
import android.window.ITaskOrganizer;

import java.util.ArrayList;


class SplitScreenTaskOrganizer extends ITaskOrganizer.Stub {
class SplitScreenTaskOrganizer extends ITaskOrganizer.Stub {
    private static final String TAG = "SplitScreenTaskOrganizer";
    private static final String TAG = "SplitScreenTaskOrganizer";
@@ -43,6 +46,8 @@ class SplitScreenTaskOrganizer extends ITaskOrganizer.Stub {
    SurfaceControl mSecondarySurface;
    SurfaceControl mSecondarySurface;
    SurfaceControl mPrimaryDim;
    SurfaceControl mPrimaryDim;
    SurfaceControl mSecondaryDim;
    SurfaceControl mSecondaryDim;
    ArrayList<SurfaceControl> mHomeAndRecentsSurfaces = new ArrayList<>();
    Rect mHomeBounds = new Rect();
    final Divider mDivider;
    final Divider mDivider;


    SplitScreenTaskOrganizer(Divider divider) {
    SplitScreenTaskOrganizer(Divider divider) {
+10 −4
Original line number Original line Diff line number Diff line
@@ -29,9 +29,9 @@ import android.graphics.Rect;
import android.os.RemoteException;
import android.os.RemoteException;
import android.util.Log;
import android.util.Log;
import android.view.Display;
import android.view.Display;
import android.view.WindowManagerGlobal;
import android.window.IWindowContainer;
import android.window.IWindowContainer;
import android.window.WindowContainerTransaction;
import android.window.WindowContainerTransaction;
import android.view.WindowManagerGlobal;
import android.window.WindowOrganizer;
import android.window.WindowOrganizer;


import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.GuardedBy;
@@ -157,6 +157,7 @@ public class WindowManagerProxy {
        for (int i = homeStacks.size() - 1; i >= 0; --i) {
        for (int i = homeStacks.size() - 1; i >= 0; --i) {
            wct.setBounds(homeStacks.get(i), homeBounds);
            wct.setBounds(homeStacks.get(i), homeBounds);
        }
        }
        layout.mTiles.mHomeBounds.set(homeBounds);
        return isHomeResizable;
        return isHomeResizable;
    }
    }


@@ -180,13 +181,17 @@ public class WindowManagerProxy {
            if (rootTasks.isEmpty()) {
            if (rootTasks.isEmpty()) {
                return false;
                return false;
            }
            }
            tiles.mHomeAndRecentsSurfaces.clear();
            for (int i = rootTasks.size() - 1; i >= 0; --i) {
            for (int i = rootTasks.size() - 1; i >= 0; --i) {
                if (rootTasks.get(i).configuration.windowConfiguration.getWindowingMode()
                final ActivityManager.RunningTaskInfo rootTask = rootTasks.get(i);
                if (isHomeOrRecentTask(rootTask)) {
                    tiles.mHomeAndRecentsSurfaces.add(rootTask.token.getLeash());
                }
                if (rootTask.configuration.windowConfiguration.getWindowingMode()
                        != WINDOWING_MODE_FULLSCREEN) {
                        != WINDOWING_MODE_FULLSCREEN) {
                    continue;
                    continue;
                }
                }
                wct.reparent(rootTasks.get(i).token, tiles.mSecondary.token,
                wct.reparent(rootTask.token, tiles.mSecondary.token, true /* onTop */);
                        true /* onTop */);
            }
            }
            boolean isHomeResizable = applyHomeTasksMinimized(layout, null /* parent */, wct);
            boolean isHomeResizable = applyHomeTasksMinimized(layout, null /* parent */, wct);
            WindowOrganizer.applyTransaction(wct);
            WindowOrganizer.applyTransaction(wct);
@@ -213,6 +218,7 @@ public class WindowManagerProxy {
            // Set launch root first so that any task created after getChildContainers and
            // Set launch root first so that any task created after getChildContainers and
            // before reparent (pretty unlikely) are put into fullscreen.
            // before reparent (pretty unlikely) are put into fullscreen.
            TaskOrganizer.setLaunchRoot(Display.DEFAULT_DISPLAY, null);
            TaskOrganizer.setLaunchRoot(Display.DEFAULT_DISPLAY, null);
            tiles.mHomeAndRecentsSurfaces.clear();
            // TODO(task-org): Once task-org is more complete, consider using Appeared/Vanished
            // TODO(task-org): Once task-org is more complete, consider using Appeared/Vanished
            //                 plus specific APIs to clean this up.
            //                 plus specific APIs to clean this up.
            List<ActivityManager.RunningTaskInfo> primaryChildren =
            List<ActivityManager.RunningTaskInfo> primaryChildren =
+22 −103
Original line number Original line Diff line number Diff line
@@ -302,9 +302,6 @@ class ActivityStack extends Task {


    private static final int TRANSLUCENT_TIMEOUT_MSG = FIRST_ACTIVITY_STACK_MSG + 1;
    private static final int TRANSLUCENT_TIMEOUT_MSG = FIRST_ACTIVITY_STACK_MSG + 1;


    // TODO(task-hierarchy): remove when tiles can be actual parents
    TaskTile mTile = null;

    private final Handler mHandler;
    private final Handler mHandler;


    private class ActivityStackHandler extends Handler {
    private class ActivityStackHandler extends Handler {
@@ -550,10 +547,10 @@ class ActivityStack extends Task {
    }
    }


    ActivityStack(ActivityTaskManagerService atmService, int id, int activityType,
    ActivityStack(ActivityTaskManagerService atmService, int id, int activityType,
            ActivityInfo info, Intent intent) {
            ActivityInfo info, Intent intent, boolean createdByOrganizer) {
        this(atmService, id, info, intent, null /*voiceSession*/, null /*voiceInteractor*/,
        this(atmService, id, info, intent, null /*voiceSession*/, null /*voiceInteractor*/,
                null /*taskDescription*/, null /*stack*/);
                null /*taskDescription*/, null /*stack*/);

        mCreatedByOrganizer = createdByOrganizer;
        setActivityType(activityType);
        setActivityType(activityType);
    }
    }


@@ -599,21 +596,12 @@ class ActivityStack extends Task {
        mCurrentUser = mAtmService.mAmInternal.getCurrentUserId();
        mCurrentUser = mAtmService.mAmInternal.getCurrentUserId();
    }
    }


    @Override
    public void resolveTileOverrideConfiguration(Configuration newParentConfig) {
        super.resolveTileOverrideConfiguration(newParentConfig);
        if (mTile != null) {
            // If this is a virtual child of a tile, simulate the parent-child relationship
            mTile.updateResolvedConfig(getResolvedOverrideConfiguration());
        }
    }

    @Override
    @Override
    public void onConfigurationChanged(Configuration newParentConfig) {
    public void onConfigurationChanged(Configuration newParentConfig) {
        // Calling Task#onConfigurationChanged() for leaf task since the ops in this method are
        // Calling Task#onConfigurationChanged() for leaf task since the ops in this method are
        // particularly for ActivityStack, like preventing bounds changes when inheriting certain
        // particularly for ActivityStack, like preventing bounds changes when inheriting certain
        // windowing mode.
        // windowing mode.
        if (!isRootTask() || this instanceof TaskTile) {
        if (!isRootTask()) {
            super.onConfigurationChanged(newParentConfig);
            super.onConfigurationChanged(newParentConfig);
            return;
            return;
        }
        }
@@ -688,6 +676,9 @@ class ActivityStack extends Task {


    @Override
    @Override
    public void setWindowingMode(int windowingMode) {
    public void setWindowingMode(int windowingMode) {
        // Reset the cached result of toString()
        stringName = null;

        // Calling Task#setWindowingMode() for leaf task since this is the a specialization of
        // Calling Task#setWindowingMode() for leaf task since this is the a specialization of
        // {@link #setWindowingMode(int)} for ActivityStack.
        // {@link #setWindowingMode(int)} for ActivityStack.
        if (!isRootTask()) {
        if (!isRootTask()) {
@@ -741,7 +732,6 @@ class ActivityStack extends Task {
        final int currentOverrideMode = getRequestedOverrideWindowingMode();
        final int currentOverrideMode = getRequestedOverrideWindowingMode();
        final DisplayContent display = getDisplay();
        final DisplayContent display = getDisplay();
        final Task topTask = getTopMostTask();
        final Task topTask = getTopMostTask();
        final ActivityStack splitScreenStack = display.getRootSplitScreenPrimaryTask();
        int windowingMode = preferredWindowingMode;
        int windowingMode = preferredWindowingMode;
        if (preferredWindowingMode == WINDOWING_MODE_UNDEFINED
        if (preferredWindowingMode == WINDOWING_MODE_UNDEFINED
                && isTransientWindowingMode(currentMode)) {
                && isTransientWindowingMode(currentMode)) {
@@ -755,14 +745,14 @@ class ActivityStack extends Task {
            windowingMode = display.validateWindowingMode(windowingMode,
            windowingMode = display.validateWindowingMode(windowingMode,
                    null /* ActivityRecord */, topTask, getActivityType());
                    null /* ActivityRecord */, topTask, getActivityType());
        }
        }
        if (splitScreenStack == this
        if (display.getRootSplitScreenPrimaryTask() == this
                && windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY) {
                && windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY) {
            // Resolution to split-screen secondary for the primary split-screen stack means
            // Resolution to split-screen secondary for the primary split-screen stack means
            // we want to leave split-screen mode.
            // we want to leave split-screen mode.
            windowingMode = mRestoreOverrideWindowingMode;
            windowingMode = mRestoreOverrideWindowingMode;
        }
        }


        final boolean alreadyInSplitScreenMode = display.hasSplitScreenPrimaryTask();
        final boolean alreadyInSplitScreenMode = display.isSplitScreenModeActivated();


        // Don't send non-resizeable notifications if the windowing mode changed was a side effect
        // Don't send non-resizeable notifications if the windowing mode changed was a side effect
        // of us entering split-screen mode.
        // of us entering split-screen mode.
@@ -830,7 +820,7 @@ class ActivityStack extends Task {
                return;
                return;
            }
            }


            if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY && splitScreenStack != null) {
            if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY && alreadyInSplitScreenMode) {
                // We already have a split-screen stack in this display, so just move the tasks over.
                // We already have a split-screen stack in this display, so just move the tasks over.
                // TODO: Figure-out how to do all the stuff in
                // TODO: Figure-out how to do all the stuff in
                // AMS.setTaskWindowingModeSplitScreenPrimary
                // AMS.setTaskWindowingModeSplitScreenPrimary
@@ -1062,7 +1052,7 @@ class ActivityStack extends Task {
        final DisplayContent display = getDisplay();
        final DisplayContent display = getDisplay();


        if (inSplitScreenSecondaryWindowingMode()) {
        if (inSplitScreenSecondaryWindowingMode()) {
            // If the stack is in split-screen seconardy mode, we need to make sure we move the
            // If the stack is in split-screen secondary mode, we need to make sure we move the
            // primary split-screen stack forward in the case it is currently behind a fullscreen
            // primary split-screen stack forward in the case it is currently behind a fullscreen
            // stack so both halves of the split-screen appear on-top and the fullscreen stack isn't
            // stack so both halves of the split-screen appear on-top and the fullscreen stack isn't
            // cutting between them.
            // cutting between them.
@@ -1084,12 +1074,13 @@ class ActivityStack extends Task {
            display.moveHomeStackToFront(reason + " returnToHome");
            display.moveHomeStackToFront(reason + " returnToHome");
        }
        }


        final boolean movingTask = task != null;
        if (isRootTask()) {
        display.positionStackAtTop(this, !movingTask /* includingParents */, reason);
            display.positionStackAtTop(this, false /* includingParents */, reason);
        if (movingTask) {
            // This also moves the entire hierarchy branch to top, including parents
            positionChildAtTop(task);
        }
        }
        if (task == null) {
            task = this;
        }
        task.getParent().positionChildAt(POSITION_TOP, task, true /* includingParents */);
    }
    }


    /**
    /**
@@ -1115,12 +1106,6 @@ class ActivityStack extends Task {
        }
        }
    }
    }


    @Override
    boolean isFocusable() {
        // Special check for tile which isn't really in the hierarchy
        return mTile != null ? mTile.isFocusable() : super.isFocusable();
    }

    boolean isTopActivityFocusable() {
    boolean isTopActivityFocusable() {
        final ActivityRecord r = topRunningActivity();
        final ActivityRecord r = topRunningActivity();
        return r != null ? r.isFocusable()
        return r != null ? r.isFocusable()
@@ -3541,6 +3526,10 @@ class ActivityStack extends Task {


    @Override
    @Override
    void onChildPositionChanged(WindowContainer child) {
    void onChildPositionChanged(WindowContainer child) {
        if (isOrganized()) {
            mAtmService.mTaskOrganizerController.dispatchTaskInfoChanged(this, false /* force */);
        }

        if (!mChildren.contains(child)) {
        if (!mChildren.contains(child)) {
            return;
            return;
        }
        }
@@ -3571,11 +3560,6 @@ class ActivityStack extends Task {
        if (oldDisplay != null && oldDisplay.isRemoving()) {
        if (oldDisplay != null && oldDisplay.isRemoving()) {
            postReparent();
            postReparent();
        }
        }
        if (mTile != null && getSurfaceControl() != null) {
            // by now, the TaskStack should already have been reparented, so we can reparent its
            // surface here
            reparentSurfaceControl(getPendingTransaction(), mTile.getSurfaceControl());
        }
    }
    }


    void reparent(DisplayContent newParent, boolean onTop) {
    void reparent(DisplayContent newParent, boolean onTop) {
@@ -3613,16 +3597,7 @@ class ActivityStack extends Task {


    @Override
    @Override
    void getRelativeDisplayedPosition(Point outPos) {
    void getRelativeDisplayedPosition(Point outPos) {
        // check for tile which is "virtually" a parent.
        if (mTile != null) {
            final Rect dispBounds = getDisplayedBounds();
            outPos.set(dispBounds.left, dispBounds.top);
            final Rect parentBounds = mTile.getBounds();
            outPos.offset(-parentBounds.left, -parentBounds.top);
        } else {
        super.getRelativeDisplayedPosition(outPos);
        super.getRelativeDisplayedPosition(outPos);
        }

        final int outset = getStackOutset();
        final int outset = getStackOutset();
        outPos.x -= outset;
        outPos.x -= outset;
        outPos.y -= outset;
        outPos.y -= outset;
@@ -3632,16 +3607,6 @@ class ActivityStack extends Task {
        if (mSurfaceControl == null) {
        if (mSurfaceControl == null) {
            return;
            return;
        }
        }
        if (mTile != null) {
            // Tile controls crop, so the app needs to be able to draw its background outside of
            // the stack bounds for when the tile crop gets bigger than the stack.
            if (mLastSurfaceSize.equals(0, 0)) {
                return;
            }
            transaction.setWindowCrop(mSurfaceControl, null);
            mLastSurfaceSize.set(0, 0);
            return;
        }


        final Rect stackBounds = getDisplayedBounds();
        final Rect stackBounds = getDisplayedBounds();
        int width = stackBounds.width();
        int width = stackBounds.width();
@@ -3665,9 +3630,6 @@ class ActivityStack extends Task {


    @Override
    @Override
    void onDisplayChanged(DisplayContent dc) {
    void onDisplayChanged(DisplayContent dc) {
        if (mTile != null && dc != mTile.getDisplay()) {
            mTile.removeChild(this);
        }
        super.onDisplayChanged(dc);
        super.onDisplayChanged(dc);
        if (isRootTask()) {
        if (isRootTask()) {
            updateSurfaceBounds();
            updateSurfaceBounds();
@@ -3810,49 +3772,6 @@ class ActivityStack extends Task {
        return shouldSleepActivities() || mAtmService.mShuttingDown;
        return shouldSleepActivities() || mAtmService.mShuttingDown;
    }
    }


    TaskTile getTile() {
        return mTile;
    }

    /**
     * Don't call this directly. instead use {@link TaskTile#addChild} or
     * {@link TaskTile#removeChild}.
     */
    void setTile(TaskTile tile) {
        TaskTile origTile = mTile;
        mTile = tile;
        final ConfigurationContainer parent = getParent();
        if (parent != null) {
            onConfigurationChanged(parent.getConfiguration());
        }

        // Reparent to tile surface or back to original parent
        if (getSurfaceControl() == null) {
            return;
        }
        if (mTile != null) {
            // don't use reparentSurfaceControl because we need to bypass taskorg check
            mSurfaceAnimator.reparent(getPendingTransaction(), mTile.getSurfaceControl());
        } else if (mTile == null && origTile != null) {
            mSurfaceAnimator.reparent(getPendingTransaction(), getParentSurfaceControl());
        }
    }

    @Override
    public SurfaceControl getParentSurfaceControl() {
        // Tile is a "virtual" parent, so we need to intercept the parent surface here
        return mTile != null ? mTile.getSurfaceControl() : super.getParentSurfaceControl();
    }

    @Override
    void removeImmediately() {
        // TODO(task-hierarchy): remove this override when tiles are in hierarchy
        if (mTile != null) {
            mTile.removeChild(this);
        }
        super.removeImmediately();
    }

    @Override
    @Override
    public void dumpDebug(ProtoOutputStream proto, long fieldId,
    public void dumpDebug(ProtoOutputStream proto, long fieldId,
            @WindowTraceLogLevel int logLevel) {
            @WindowTraceLogLevel int logLevel) {
@@ -3897,7 +3816,7 @@ class ActivityStack extends Task {
            proto.write(SURFACE_HEIGHT, mSurfaceControl.getHeight());
            proto.write(SURFACE_HEIGHT, mSurfaceControl.getHeight());
        }
        }


        proto.write(CREATED_BY_ORGANIZER, this instanceof TaskTile);
        proto.write(CREATED_BY_ORGANIZER, mCreatedByOrganizer);


        proto.end(token);
        proto.end(token);
    }
    }
+11 −9
Original line number Original line Diff line number Diff line
@@ -423,6 +423,10 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {


            final ActivityStack toStack = mToDisplay.getOrCreateStack(
            final ActivityStack toStack = mToDisplay.getOrCreateStack(
                    null, mTmpOptions, task, task.getActivityType(), mOnTop);
                    null, mTmpOptions, task, task.getActivityType(), mOnTop);
            if (task == toStack) {
                // The task was reused as the root task.
                return;
            }


            if (mOnTop) {
            if (mOnTop) {
                final boolean isTopTask = task == mTopTask;
                final boolean isTopTask = task == mTopTask;
@@ -1704,7 +1708,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
                mRootWindowContainer.getLaunchStack(null, aOptions, task, onTop);
                mRootWindowContainer.getLaunchStack(null, aOptions, task, onTop);
        final WindowContainer parent = task.getParent();
        final WindowContainer parent = task.getParent();


        if (parent == stack) {
        if (parent == stack || task == stack) {
            // Nothing else to do since it is already restored in the right stack.
            // Nothing else to do since it is already restored in the right stack.
            return true;
            return true;
        }
        }
@@ -2237,7 +2241,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
        final boolean isSecondaryDisplayPreferred =
        final boolean isSecondaryDisplayPreferred =
                (preferredDisplayId != DEFAULT_DISPLAY && preferredDisplayId != INVALID_DISPLAY);
                (preferredDisplayId != DEFAULT_DISPLAY && preferredDisplayId != INVALID_DISPLAY);
        final boolean inSplitScreenMode = actualStack != null
        final boolean inSplitScreenMode = actualStack != null
                && actualStack.getDisplay().hasSplitScreenPrimaryTask();
                && actualStack.getDisplay().isSplitScreenModeActivated();
        if (((!inSplitScreenMode && preferredWindowingMode != WINDOWING_MODE_SPLIT_SCREEN_PRIMARY)
        if (((!inSplitScreenMode && preferredWindowingMode != WINDOWING_MODE_SPLIT_SCREEN_PRIMARY)
                && !isSecondaryDisplayPreferred) || !task.isActivityTypeStandardOrUndefined()) {
                && !isSecondaryDisplayPreferred) || !task.isActivityTypeStandardOrUndefined()) {
            return;
            return;
@@ -2284,16 +2288,14 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
        if (!task.supportsSplitScreenWindowingMode() || forceNonResizable) {
        if (!task.supportsSplitScreenWindowingMode() || forceNonResizable) {
            // Dismiss docked stack. If task appeared to be in docked stack but is not resizable -
            // Dismiss docked stack. If task appeared to be in docked stack but is not resizable -
            // we need to move it to top of fullscreen stack, otherwise it will be covered.
            // we need to move it to top of fullscreen stack, otherwise it will be covered.

            final DisplayContent display = task.getStack().getDisplay();
            final ActivityStack dockedStack =
            if (display.isSplitScreenModeActivated()) {
                    task.getStack().getDisplay().getRootSplitScreenPrimaryTask();
            if (dockedStack != null) {
                // Display a warning toast that we tried to put an app that doesn't support
                // Display a warning toast that we tried to put an app that doesn't support
                // split-screen in split-screen.
                // split-screen in split-screen.
                mService.getTaskChangeNotificationController()
                mService.getTaskChangeNotificationController()
                        .notifyActivityDismissingDockedStack();
                        .notifyActivityDismissingDockedStack();
                dockedStack.getDisplay().onSplitScreenModeDismissed();
                display.onSplitScreenModeDismissed();
                dockedStack.getDisplay().ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS,
                display.ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS,
                        true /* notifyClients */);
                        true /* notifyClients */);
            }
            }
            return;
            return;
@@ -2602,7 +2604,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
                        "startActivityFromRecents: Task " + taskId + " not found.");
                        "startActivityFromRecents: Task " + taskId + " not found.");
            } else if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY
            } else if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY
                    && task.getWindowingMode() != windowingMode) {
                    && task.getWindowingMode() != windowingMode) {
                mService.moveTaskToSplitScreenPrimaryTile(task, true /* toTop */);
                mService.moveTaskToSplitScreenPrimaryTask(task, true /* toTop */);
            }
            }


            if (windowingMode != WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
            if (windowingMode != WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
Loading