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

Commit 49f668d4 authored by Jeremy Sim's avatar Jeremy Sim Committed by Android (Google) Code Review
Browse files

Merge "Refactor how split ratios are stored and passed between Launcher and Shell" into main

parents 8a45f22a 70719529
Loading
Loading
Loading
Loading
+32 −7
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.wm.shell.common.split;
import static android.view.WindowManager.DOCKED_INVALID;
import static android.view.WindowManager.DOCKED_LEFT;
import static android.view.WindowManager.DOCKED_RIGHT;

import static com.android.wm.shell.common.split.SplitScreenConstants.SNAP_TO_30_70;
import static com.android.wm.shell.common.split.SplitScreenConstants.SNAP_TO_50_50;
import static com.android.wm.shell.common.split.SplitScreenConstants.SNAP_TO_70_30;
@@ -36,6 +37,8 @@ import android.hardware.display.DisplayManager;
import android.view.Display;
import android.view.DisplayInfo;

import androidx.annotation.Nullable;

import java.util.ArrayList;

/**
@@ -203,6 +206,21 @@ public class DividerSnapAlgorithm {
        }
    }

    /**
     * Gets the SnapTarget corresponding to the given {@link SnapPosition}, or null if no such
     * SnapTarget exists.
     */
    @Nullable
    public SnapTarget findSnapTarget(@SnapPosition int snapPosition) {
        for (SnapTarget t : mTargets) {
            if (t.snapPosition == snapPosition) {
                return t;
            }
        }

        return null;
    }

    public float calculateDismissingFraction(int position) {
        if (position < mFirstSplitTarget.position) {
            return 1f - (float) (position - getStartInset())
@@ -356,9 +374,9 @@ public class DividerSnapAlgorithm {
     * Adds a target at {@param position} but only if the area with size of {@param smallerSize}
     * meets the minimal size requirement.
     */
    private void maybeAddTarget(int position, int smallerSize, @SnapPosition int snapTo) {
    private void maybeAddTarget(int position, int smallerSize, @SnapPosition int snapPosition) {
        if (smallerSize >= mMinimalSizeResizableTask) {
            mTargets.add(new SnapTarget(position, position, snapTo));
            mTargets.add(new SnapTarget(position, position, snapPosition));
        }
    }

@@ -418,6 +436,13 @@ public class DividerSnapAlgorithm {
        return mLastSplitTarget != mMiddleTarget;
    }

    /**
     * Finds the {@link SnapPosition} nearest to the given position.
     */
    public int calculateNearestSnapPosition(int currentPosition) {
        return snap(currentPosition, /* hardDismiss */ true).snapPosition;
    }

    /**
     * Cycles through all non-dismiss targets with a stepping of {@param increment}. It moves left
     * if {@param increment} is negative and moves right otherwise.
@@ -454,7 +479,7 @@ public class DividerSnapAlgorithm {
        /**
         * An int describing the placement of the divider in this snap target.
         */
        public final @SnapPosition int snapTo;
        public final @SnapPosition int snapPosition;

        public boolean isMiddleTarget;

@@ -464,15 +489,15 @@ public class DividerSnapAlgorithm {
         */
        private final float distanceMultiplier;

        public SnapTarget(int position, int taskPosition, @SnapPosition int snapTo) {
            this(position, taskPosition, snapTo, 1f);
        public SnapTarget(int position, int taskPosition, @SnapPosition int snapPosition) {
            this(position, taskPosition, snapPosition, 1f);
        }

        public SnapTarget(int position, int taskPosition, @SnapPosition int snapTo,
        public SnapTarget(int position, int taskPosition, @SnapPosition int snapPosition,
                float distanceMultiplier) {
            this.position = position;
            this.taskPosition = taskPosition;
            this.snapTo = snapTo;
            this.snapPosition = snapPosition;
            this.distanceMultiplier = distanceMultiplier;
        }
    }
+29 −18
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static android.view.WindowManager.DOCKED_INVALID;
import static android.view.WindowManager.DOCKED_LEFT;
import static android.view.WindowManager.DOCKED_RIGHT;
import static android.view.WindowManager.DOCKED_TOP;

import static com.android.internal.jank.InteractionJankMonitor.CUJ_SPLIT_SCREEN_DOUBLE_TAP_DIVIDER;
import static com.android.internal.jank.InteractionJankMonitor.CUJ_SPLIT_SCREEN_RESIZE;
import static com.android.wm.shell.animation.Interpolators.DIM_INTERPOLATOR;
@@ -66,6 +67,7 @@ import com.android.wm.shell.common.DisplayImeController;
import com.android.wm.shell.common.DisplayInsetsController;
import com.android.wm.shell.common.DisplayLayout;
import com.android.wm.shell.common.InteractionJankMonitorUtils;
import com.android.wm.shell.common.split.SplitScreenConstants.SnapPosition;
import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition;

import java.io.PrintWriter;
@@ -115,7 +117,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
    @VisibleForTesting DividerSnapAlgorithm mDividerSnapAlgorithm;
    private WindowContainerToken mWinToken1;
    private WindowContainerToken mWinToken2;
    private int mDividePosition;
    private int mDividerPosition;
    private boolean mInitialized = false;
    private boolean mFreezeDividerWindow = false;
    private int mOrientation;
@@ -267,7 +269,14 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
    }

    int getDividePosition() {
        return mDividePosition;
        return mDividerPosition;
    }

    /**
     * Finds the {@link SnapPosition} nearest to the current divider position.
     */
    public int calculateCurrentSnapPosition() {
        return mDividerSnapAlgorithm.calculateNearestSnapPosition(mDividerPosition);
    }

    /**
@@ -344,16 +353,16 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
    }

    private void initDividerPosition(Rect oldBounds) {
        final float snapRatio = (float) mDividePosition
        final float snapRatio = (float) mDividerPosition
                / (float) (isLandscape(oldBounds) ? oldBounds.width() : oldBounds.height());
        // Estimate position by previous ratio.
        final float length =
                (float) (isLandscape() ? mRootBounds.width() : mRootBounds.height());
        final int estimatePosition = (int) (length * snapRatio);
        // Init divider position by estimated position using current bounds snap algorithm.
        mDividePosition = mDividerSnapAlgorithm.calculateNonDismissingSnapTarget(
        mDividerPosition = mDividerSnapAlgorithm.calculateNonDismissingSnapTarget(
                estimatePosition).position;
        updateBounds(mDividePosition);
        updateBounds(mDividerPosition);
    }

    private void updateBounds(int position) {
@@ -467,27 +476,29 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
    }

    void setDividePosition(int position, boolean applyLayoutChange) {
        mDividePosition = position;
        updateBounds(mDividePosition);
        mDividerPosition = position;
        updateBounds(mDividerPosition);
        if (applyLayoutChange) {
            mSplitLayoutHandler.onLayoutSizeChanged(this);
        }
    }

    /** Updates divide position and split bounds base on the ratio within root bounds. */
    public void setDivideRatio(float ratio) {
        final int position = isLandscape()
                ? mRootBounds.left + (int) (mRootBounds.width() * ratio)
                : mRootBounds.top + (int) (mRootBounds.height() * ratio);
        final DividerSnapAlgorithm.SnapTarget snapTarget =
                mDividerSnapAlgorithm.calculateNonDismissingSnapTarget(position);
    public void setDivideRatio(@SnapPosition int snapPosition) {
        final DividerSnapAlgorithm.SnapTarget snapTarget = mDividerSnapAlgorithm.findSnapTarget(
                snapPosition);

        if (snapTarget == null) {
            throw new IllegalArgumentException("No SnapTarget for position " + snapPosition);
        }

        setDividePosition(snapTarget.position, false /* applyLayoutChange */);
    }

    /** Resets divider position. */
    public void resetDividerPosition() {
        mDividePosition = mDividerSnapAlgorithm.getMiddleTarget().position;
        updateBounds(mDividePosition);
        mDividerPosition = mDividerSnapAlgorithm.getMiddleTarget().position;
        updateBounds(mDividerPosition);
        mWinToken1 = null;
        mWinToken2 = null;
        mWinBounds1.setEmpty();
@@ -510,7 +521,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
     * target indicates dismissing split.
     */
    public void snapToTarget(int currentPosition, DividerSnapAlgorithm.SnapTarget snapTarget) {
        switch (snapTarget.snapTo) {
        switch (snapTarget.snapPosition) {
            case SNAP_TO_START_AND_DISMISS:
                flingDividePosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION,
                        () -> mSplitLayoutHandler.onSnappedToDismiss(false /* bottomOrRight */,
@@ -668,8 +679,8 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange

            @Override
            public void onAnimationEnd(Animator animation) {
                mDividePosition = dividerPos;
                updateBounds(mDividePosition);
                mDividerPosition = dividerPos;
                updateBounds(mDividerPosition);
                finishCallback.accept(insets);
                InteractionJankMonitorUtils.endTracing(CUJ_SPLIT_SCREEN_DOUBLE_TAP_DIVIDER);
            }
+8 −8
Original line number Diff line number Diff line
@@ -91,42 +91,42 @@ interface ISplitScreen {
     * Starts tasks simultaneously in one transition.
     */
    oneway void startTasks(int taskId1, in Bundle options1, int taskId2, in Bundle options2,
            int splitPosition, float splitRatio, in RemoteTransition remoteTransition,
            int splitPosition, int snapPosition, in RemoteTransition remoteTransition,
            in InstanceId instanceId) = 10;

    /**
     * Starts a pair of intent and task in one transition.
     */
    oneway void startIntentAndTask(in PendingIntent pendingIntent, int userId1, in Bundle options1,
            int taskId, in Bundle options2, int sidePosition, float splitRatio,
            int taskId, in Bundle options2, int sidePosition, int snapPosition,
            in RemoteTransition remoteTransition, in InstanceId instanceId) = 16;

    /**
     * Starts a pair of shortcut and task in one transition.
     */
    oneway void startShortcutAndTask(in ShortcutInfo shortcutInfo, in Bundle options1, int taskId,
            in Bundle options2, int splitPosition, float splitRatio,
            in Bundle options2, int splitPosition, int snapPosition,
            in RemoteTransition remoteTransition, in InstanceId instanceId) = 17;

    /**
     * Version of startTasks using legacy transition system.
     */
    oneway void startTasksWithLegacyTransition(int taskId1, in Bundle options1, int taskId2,
            in Bundle options2, int splitPosition, float splitRatio,
            in Bundle options2, int splitPosition, int snapPosition,
            in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 11;

    /**
     * Starts a pair of intent and task using legacy transition system.
     */
    oneway void startIntentAndTaskWithLegacyTransition(in PendingIntent pendingIntent, int userId1,
            in Bundle options1, int taskId, in Bundle options2, int splitPosition, float splitRatio,
            in Bundle options1, int taskId, in Bundle options2, int splitPosition, int snapPosition,
            in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 12;

    /**
     * Starts a pair of shortcut and task using legacy transition system.
     */
    oneway void startShortcutAndTaskWithLegacyTransition(in ShortcutInfo shortcutInfo,
            in Bundle options1, int taskId, in Bundle options2, int splitPosition, float splitRatio,
            in Bundle options1, int taskId, in Bundle options2, int splitPosition, int snapPosition,
            in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 15;

    /**
@@ -135,7 +135,7 @@ interface ISplitScreen {
    oneway void startIntentsWithLegacyTransition(in PendingIntent pendingIntent1, int userId1,
            in ShortcutInfo shortcutInfo1, in Bundle options1, in PendingIntent pendingIntent2,
            int userId2, in ShortcutInfo shortcutInfo2, in Bundle options2, int splitPosition,
            float splitRatio, in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 18;
            int snapPosition, in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 18;

    /**
     * Start a pair of intents in one transition.
@@ -143,7 +143,7 @@ interface ISplitScreen {
    oneway void startIntents(in PendingIntent pendingIntent1, int userId1,
            in ShortcutInfo shortcutInfo1, in Bundle options1, in PendingIntent pendingIntent2,
            int userId2, in ShortcutInfo shortcutInfo2, in Bundle options2, int splitPosition,
            float splitRatio, in RemoteTransition remoteTransition, in InstanceId instanceId) = 19;
            int snapPosition, in RemoteTransition remoteTransition, in InstanceId instanceId) = 19;

    /**
     * Blocking call that notifies and gets additional split-screen targets when entering
+47 −39

File changed.

Preview size limit exceeded, changes collapsed.

+35 −32
Original line number Diff line number Diff line
@@ -128,6 +128,7 @@ import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.common.TransactionPool;
import com.android.wm.shell.common.split.SplitLayout;
import com.android.wm.shell.common.split.SplitScreenConstants.SnapPosition;
import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition;
import com.android.wm.shell.common.split.SplitScreenUtils;
import com.android.wm.shell.common.split.SplitWindowManager;
@@ -631,8 +632,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
    }

    /** Starts 2 tasks in one transition. */
    void startTasks(int taskId1, @Nullable Bundle options1, int taskId2,
            @Nullable Bundle options2, @SplitPosition int splitPosition, float splitRatio,
    void startTasks(int taskId1, @Nullable Bundle options1, int taskId2, @Nullable Bundle options2,
            @SplitPosition int splitPosition, @SnapPosition int snapPosition,
            @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
        final WindowContainerTransaction wct = new WindowContainerTransaction();
        if (taskId2 == INVALID_TASK_ID) {
@@ -654,13 +655,13 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        addActivityOptions(options1, mSideStage);
        wct.startTask(taskId1, options1);

        startWithTask(wct, taskId2, options2, splitRatio, remoteTransition, instanceId);
        startWithTask(wct, taskId2, options2, snapPosition, remoteTransition, instanceId);
    }

    /** Start an intent and a task to a split pair in one transition. */
    void startIntentAndTask(PendingIntent pendingIntent, Intent fillInIntent,
            @Nullable Bundle options1, int taskId, @Nullable Bundle options2,
            @SplitPosition int splitPosition, float splitRatio,
            @SplitPosition int splitPosition, @SnapPosition int snapPosition,
            @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
        final WindowContainerTransaction wct = new WindowContainerTransaction();
        if (taskId == INVALID_TASK_ID) {
@@ -676,13 +677,14 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        addActivityOptions(options1, mSideStage);
        wct.sendPendingIntent(pendingIntent, fillInIntent, options1);

        startWithTask(wct, taskId, options2, splitRatio, remoteTransition, instanceId);
        startWithTask(wct, taskId, options2, snapPosition, remoteTransition, instanceId);
    }

    /** Starts a shortcut and a task to a split pair in one transition. */
    void startShortcutAndTask(ShortcutInfo shortcutInfo, @Nullable Bundle options1,
            int taskId, @Nullable Bundle options2, @SplitPosition int splitPosition,
            float splitRatio, @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
            @SnapPosition int snapPosition, @Nullable RemoteTransition remoteTransition,
            InstanceId instanceId) {
        final WindowContainerTransaction wct = new WindowContainerTransaction();
        if (taskId == INVALID_TASK_ID) {
            options1 = options1 != null ? options1 : new Bundle();
@@ -697,7 +699,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        addActivityOptions(options1, mSideStage);
        wct.startShortcut(mContext.getPackageName(), shortcutInfo, options1);

        startWithTask(wct, taskId, options2, splitRatio, remoteTransition, instanceId);
        startWithTask(wct, taskId, options2, snapPosition, remoteTransition, instanceId);
    }

    /**
@@ -708,14 +710,14 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
     *                   {@link SplitscreenEventLogger#logEnter(float, int, int, int, int, boolean)}
     */
    private void startWithTask(WindowContainerTransaction wct, int mainTaskId,
            @Nullable Bundle mainOptions, float splitRatio,
            @Nullable Bundle mainOptions, @SnapPosition int snapPosition,
            @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
        if (!mMainStage.isActive()) {
            // Build a request WCT that will launch both apps such that task 0 is on the main stage
            // while task 1 is on the side stage.
            mMainStage.activate(wct, false /* reparent */);
        }
        mSplitLayout.setDivideRatio(splitRatio);
        mSplitLayout.setDivideRatio(snapPosition);
        updateWindowBounds(mSplitLayout, wct);
        wct.reorder(mRootTaskInfo.token, true);
        setRootForceTranslucent(false, wct);
@@ -740,7 +742,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
            @Nullable ShortcutInfo shortcutInfo1, @Nullable Bundle options1,
            PendingIntent pendingIntent2, Intent fillInIntent2,
            @Nullable ShortcutInfo shortcutInfo2, @Nullable Bundle options2,
            @SplitPosition int splitPosition, float splitRatio,
            @SplitPosition int splitPosition, @SnapPosition int snapPosition,
            @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
        final WindowContainerTransaction wct = new WindowContainerTransaction();
        if (pendingIntent2 == null) {
@@ -762,7 +764,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        }

        setSideStagePosition(splitPosition, wct);
        mSplitLayout.setDivideRatio(splitRatio);
        mSplitLayout.setDivideRatio(snapPosition);
        updateWindowBounds(mSplitLayout, wct);
        wct.reorder(mRootTaskInfo.token, true);
        setRootForceTranslucent(false, wct);
@@ -790,7 +792,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
    /** Starts a pair of tasks using legacy transition. */
    void startTasksWithLegacyTransition(int taskId1, @Nullable Bundle options1,
            int taskId2, @Nullable Bundle options2, @SplitPosition int splitPosition,
            float splitRatio, RemoteAnimationAdapter adapter, InstanceId instanceId) {
            @SnapPosition int snapPosition, RemoteAnimationAdapter adapter, InstanceId instanceId) {
        final WindowContainerTransaction wct = new WindowContainerTransaction();
        if (options1 == null) options1 = new Bundle();
        if (taskId2 == INVALID_TASK_ID) {
@@ -811,7 +813,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        addActivityOptions(options1, mSideStage);
        wct.startTask(taskId1, options1);
        mSplitRequest = new SplitRequest(taskId1, taskId2, splitPosition);
        startWithLegacyTransition(wct, taskId2, options2, splitPosition, splitRatio, adapter,
        startWithLegacyTransition(wct, taskId2, options2, splitPosition, snapPosition, adapter,
                instanceId);
    }

@@ -820,8 +822,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
            @Nullable ShortcutInfo shortcutInfo1, @Nullable Bundle options1,
            @Nullable PendingIntent pendingIntent2, Intent fillInIntent2,
            @Nullable ShortcutInfo shortcutInfo2, @Nullable Bundle options2,
            @SplitPosition int splitPosition, float splitRatio, RemoteAnimationAdapter adapter,
            InstanceId instanceId) {
            @SplitPosition int splitPosition, @SnapPosition int snapPosition,
            RemoteAnimationAdapter adapter, InstanceId instanceId) {
        final WindowContainerTransaction wct = new WindowContainerTransaction();
        if (options1 == null) options1 = new Bundle();
        if (pendingIntent2 == null) {
@@ -840,13 +842,13 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
                    pendingIntent2 != null ? pendingIntent2.getIntent() : null, splitPosition);
        }
        startWithLegacyTransition(wct, pendingIntent2, fillInIntent2, shortcutInfo2, options2,
                splitPosition, splitRatio, adapter, instanceId);
                splitPosition, snapPosition, adapter, instanceId);
    }

    void startIntentAndTaskWithLegacyTransition(PendingIntent pendingIntent, Intent fillInIntent,
            @Nullable Bundle options1, int taskId, @Nullable Bundle options2,
            @SplitPosition int splitPosition, float splitRatio, RemoteAnimationAdapter adapter,
            InstanceId instanceId) {
            @SplitPosition int splitPosition, @SnapPosition int snapPosition,
            RemoteAnimationAdapter adapter, InstanceId instanceId) {
        final WindowContainerTransaction wct = new WindowContainerTransaction();
        if (options1 == null) options1 = new Bundle();
        if (taskId == INVALID_TASK_ID) {
@@ -859,15 +861,15 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        addActivityOptions(options1, mSideStage);
        wct.sendPendingIntent(pendingIntent, fillInIntent, options1);
        mSplitRequest = new SplitRequest(taskId, pendingIntent.getIntent(), splitPosition);
        startWithLegacyTransition(wct, taskId, options2, splitPosition, splitRatio, adapter,
        startWithLegacyTransition(wct, taskId, options2, splitPosition, snapPosition, adapter,
                instanceId);
    }

    /** Starts a pair of shortcut and task using legacy transition. */
    void startShortcutAndTaskWithLegacyTransition(ShortcutInfo shortcutInfo,
            @Nullable Bundle options1, int taskId, @Nullable Bundle options2,
            @SplitPosition int splitPosition, float splitRatio, RemoteAnimationAdapter adapter,
            InstanceId instanceId) {
            @SplitPosition int splitPosition, @SnapPosition int snapPosition,
            RemoteAnimationAdapter adapter, InstanceId instanceId) {
        final WindowContainerTransaction wct = new WindowContainerTransaction();
        if (options1 == null) options1 = new Bundle();
        if (taskId == INVALID_TASK_ID) {
@@ -878,7 +880,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,

        addActivityOptions(options1, mSideStage);
        wct.startShortcut(mContext.getPackageName(), shortcutInfo, options1);
        startWithLegacyTransition(wct, taskId, options2, splitPosition, splitRatio, adapter,
        startWithLegacyTransition(wct, taskId, options2, splitPosition, snapPosition, adapter,
                instanceId);
    }

@@ -928,18 +930,19 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
    private void startWithLegacyTransition(WindowContainerTransaction wct,
            @Nullable PendingIntent mainPendingIntent, @Nullable Intent mainFillInIntent,
            @Nullable ShortcutInfo mainShortcutInfo, @Nullable Bundle mainOptions,
            @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter,
            InstanceId instanceId) {
            @SplitPosition int sidePosition, @SnapPosition int snapPosition,
            RemoteAnimationAdapter adapter, InstanceId instanceId) {
        startWithLegacyTransition(wct, INVALID_TASK_ID, mainPendingIntent, mainFillInIntent,
                mainShortcutInfo, mainOptions, sidePosition, splitRatio, adapter, instanceId);
                mainShortcutInfo, mainOptions, sidePosition, snapPosition, adapter, instanceId);
    }

    private void startWithLegacyTransition(WindowContainerTransaction wct, int mainTaskId,
            @Nullable Bundle mainOptions, @SplitPosition int sidePosition, float splitRatio,
            RemoteAnimationAdapter adapter, InstanceId instanceId) {
            @Nullable Bundle mainOptions, @SplitPosition int sidePosition,
            @SnapPosition int snapPosition, RemoteAnimationAdapter adapter,
            InstanceId instanceId) {
        startWithLegacyTransition(wct, mainTaskId, null /* mainPendingIntent */,
                null /* mainFillInIntent */, null /* mainShortcutInfo */, mainOptions, sidePosition,
                splitRatio, adapter, instanceId);
                snapPosition, adapter, instanceId);
    }

    /**
@@ -950,15 +953,15 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
    private void startWithLegacyTransition(WindowContainerTransaction wct, int mainTaskId,
            @Nullable PendingIntent mainPendingIntent, @Nullable Intent mainFillInIntent,
            @Nullable ShortcutInfo mainShortcutInfo, @Nullable Bundle options,
            @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter,
            InstanceId instanceId) {
            @SplitPosition int sidePosition, @SnapPosition int snapPosition,
            RemoteAnimationAdapter adapter, InstanceId instanceId) {
        if (!isSplitScreenVisible()) {
            exitSplitScreen(null /* childrenToTop */, EXIT_REASON_RECREATE_SPLIT);
        }

        // Init divider first to make divider leash for remote animation target.
        mSplitLayout.init();
        mSplitLayout.setDivideRatio(splitRatio);
        mSplitLayout.setDivideRatio(snapPosition);

        // Apply surface bounds before animation start.
        SurfaceControl.Transaction startT = mTransactionPool.acquire();
@@ -1761,7 +1764,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
                rightBottomTaskId = sideStageTopTaskId;
            }
            SplitBounds splitBounds = new SplitBounds(topLeftBounds, bottomRightBounds,
                    leftTopTaskId, rightBottomTaskId);
                    leftTopTaskId, rightBottomTaskId, mSplitLayout.calculateCurrentSnapPosition());
            if (mainStageTopTaskId != INVALID_TASK_ID && sideStageTopTaskId != INVALID_TASK_ID) {
                // Update the pair for the top tasks
                recentTasks.addSplitPair(mainStageTopTaskId, sideStageTopTaskId, splitBounds);
Loading