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

Commit 5f5e11fc authored by Jerry Chang's avatar Jerry Chang Committed by Automerger Merge Worker
Browse files

Merge "Support to start tasks into split screen with specific split ratio"...

Merge "Support to start tasks into split screen with specific split ratio" into sc-v2-dev am: 488d986c am: 6977b7fe

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16331279

Change-Id: Ic149b0830d33a16b632e2b28c53aa8b29a7d205f
parents 9fc693ba 6977b7fe
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -321,6 +321,16 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
        mSplitLayoutHandler.onLayoutSizeChanged(this);
    }

    /** Sets divide position 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);
        DividerSnapAlgorithm.SnapTarget snapTarget =
                mDividerSnapAlgorithm.calculateNonDismissingSnapTarget(position);
        setDividePosition(snapTarget.position);
    }

    /** Resets divider position. */
    public void resetDividerPosition() {
        mDividePosition = mDividerSnapAlgorithm.getMiddleTarget().position;
+3 −2
Original line number Diff line number Diff line
@@ -83,14 +83,15 @@ interface ISplitScreen {
     * Starts tasks simultaneously in one transition.
     */
    oneway void startTasks(int mainTaskId, in Bundle mainOptions, int sideTaskId,
            in Bundle sideOptions, int sidePosition, in RemoteTransition remoteTransition) = 10;
            in Bundle sideOptions, int sidePosition, float splitRatio,
            in RemoteTransition remoteTransition) = 10;

    /**
     * Version of startTasks using legacy transition system.
     */
     oneway void startTasksWithLegacyTransition(int mainTaskId, in Bundle mainOptions,
                            int sideTaskId, in Bundle sideOptions, int sidePosition,
                            in RemoteAnimationAdapter adapter) = 11;
                            float splitRatio, in RemoteAnimationAdapter adapter) = 11;

    /**
     * Blocking call that notifies and gets additional split-screen targets when entering
+4 −4
Original line number Diff line number Diff line
@@ -610,21 +610,21 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
        @Override
        public void startTasksWithLegacyTransition(int mainTaskId, @Nullable Bundle mainOptions,
                int sideTaskId, @Nullable Bundle sideOptions, @SplitPosition int sidePosition,
                RemoteAnimationAdapter adapter) {
                float splitRatio, RemoteAnimationAdapter adapter) {
            executeRemoteCallWithTaskPermission(mController, "startTasks",
                    (controller) -> controller.mStageCoordinator.startTasksWithLegacyTransition(
                            mainTaskId, mainOptions, sideTaskId, sideOptions, sidePosition,
                            adapter));
                            splitRatio, adapter));
        }

        @Override
        public void startTasks(int mainTaskId, @Nullable Bundle mainOptions,
                int sideTaskId, @Nullable Bundle sideOptions,
                @SplitPosition int sidePosition,
                @SplitPosition int sidePosition, float splitRatio,
                @Nullable RemoteTransition remoteTransition) {
            executeRemoteCallWithTaskPermission(mController, "startTasks",
                    (controller) -> controller.mStageCoordinator.startTasks(mainTaskId, mainOptions,
                            sideTaskId, sideOptions, sidePosition, remoteTransition));
                            sideTaskId, sideOptions, sidePosition, splitRatio, remoteTransition));
        }

        @Override
+4 −2
Original line number Diff line number Diff line
@@ -333,7 +333,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,

    /** Starts 2 tasks in one transition. */
    void startTasks(int mainTaskId, @Nullable Bundle mainOptions, int sideTaskId,
            @Nullable Bundle sideOptions, @SplitPosition int sidePosition,
            @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio,
            @Nullable RemoteTransition remoteTransition) {
        final WindowContainerTransaction wct = new WindowContainerTransaction();
        mainOptions = mainOptions != null ? mainOptions : new Bundle();
@@ -345,6 +345,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        mMainStage.activate(getMainStageBounds(), wct, false /* reparent */);
        mSideStage.setBounds(getSideStageBounds(), wct);

        mSplitLayout.setDivideRatio(splitRatio);
        // Make sure the launch options will put tasks in the corresponding split roots
        addActivityOptions(mainOptions, mMainStage);
        addActivityOptions(sideOptions, mSideStage);
@@ -360,7 +361,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
    /** Starts 2 tasks in one legacy transition. */
    void startTasksWithLegacyTransition(int mainTaskId, @Nullable Bundle mainOptions,
            int sideTaskId, @Nullable Bundle sideOptions, @SplitPosition int sidePosition,
            RemoteAnimationAdapter adapter) {
            float splitRatio, RemoteAnimationAdapter adapter) {
        final WindowContainerTransaction wct = new WindowContainerTransaction();
        // Need to add another wrapper here in shell so that we can inject the divider bar
        // and also manage the process elevation via setRunningRemote
@@ -415,6 +416,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        sideOptions = sideOptions != null ? sideOptions : new Bundle();
        setSideStagePosition(sidePosition, wct);

        mSplitLayout.setDivideRatio(splitRatio);
        // 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(getMainStageBounds(), wct, false /* reparent */);
+6 −0
Original line number Diff line number Diff line
@@ -105,6 +105,12 @@ public class SplitLayoutTests extends ShellTestCase {
        verify(mSplitLayoutHandler).onLayoutSizeChanged(any(SplitLayout.class));
    }

    @Test
    public void testSetDivideRatio() {
        mSplitLayout.setDivideRatio(0.5f);
        verify(mSplitLayoutHandler).onLayoutSizeChanged(any(SplitLayout.class));
    }

    @Test
    public void testOnDoubleTappedDivider() {
        mSplitLayout.onDoubleTappedDivider();