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

Commit b4080f63 authored by Wale Ogunwale's avatar Wale Ogunwale Committed by Android (Google) Code Review
Browse files

Merge "Fixed issue with not sending stage position change" into sc-dev

parents d6a8f14a 31e48a2d
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -106,6 +106,8 @@ public interface SplitScreen extends DragAndDropPolicy.Starter {

    /** Removes the split-screen stages. */
    void exitSplitScreen();
    /** @param exitSplitScreenOnHide if to exit split-screen if both stages are not visible. */
    void exitSplitScreenOnHide(boolean exitSplitScreenOnHide);
    /** Gets the stage bounds. */
    void getStageBounds(Rect outTopOrLeftBounds, Rect outBottomOrRightBounds);

+11 −0
Original line number Diff line number Diff line
@@ -126,6 +126,10 @@ public class SplitScreenController implements DragAndDropPolicy.Starter {
        mStageCoordinator.exitSplitScreen();
    }

    public void exitSplitScreenOnHide(boolean exitSplitScreenOnHide) {
        mStageCoordinator.exitSplitScreenOnHide(exitSplitScreenOnHide);
    }

    public void getStageBounds(Rect outTopOrLeftBounds, Rect outBottomOrRightBounds) {
        mStageCoordinator.getStageBounds(outTopOrLeftBounds, outBottomOrRightBounds);
    }
@@ -291,6 +295,13 @@ public class SplitScreenController implements DragAndDropPolicy.Starter {
            });
        }

        @Override
        public void exitSplitScreenOnHide(boolean exitSplitScreenOnHide) {
            mMainExecutor.execute(() -> {
                SplitScreenController.this.exitSplitScreenOnHide(exitSplitScreenOnHide);
            });
        }

        @Override
        public void getStageBounds(Rect outTopOrLeftBounds, Rect outBottomOrRightBounds) {
            try {
+19 −2
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@ class StageCoordinator implements SplitLayout.LayoutChangeListener,
    private DisplayAreaInfo mDisplayAreaInfo;
    private final Context mContext;
    private final List<SplitScreen.SplitScreenListener> mListeners = new ArrayList<>();
    private boolean mExitSplitScreenOnHide = true;

    StageCoordinator(Context context, int displayId, SyncTransactionQueue syncQueue,
            RootTaskDisplayAreaOrganizer rootTDAOrganizer, ShellTaskOrganizer taskOrganizer) {
@@ -113,7 +114,7 @@ class StageCoordinator implements SplitLayout.LayoutChangeListener,
    boolean moveToSideStage(ActivityManager.RunningTaskInfo task,
            @SplitScreen.StagePosition int sideStagePosition) {
        final WindowContainerTransaction wct = new WindowContainerTransaction();
        mSideStagePosition = sideStagePosition;
        setSideStagePosition(sideStagePosition);
        mMainStage.activate(getMainStageBounds(), wct);
        mSideStage.addTask(task, getSideStageBounds(), wct);
        mTaskOrganizer.applyTransaction(wct);
@@ -144,10 +145,14 @@ class StageCoordinator implements SplitLayout.LayoutChangeListener,
    }

    void setSideStagePosition(@SplitScreen.StagePosition int sideStagePosition) {
        if (mSideStagePosition == sideStagePosition) return;

        mSideStagePosition = sideStagePosition;
        if (mSideStageListener.mVisible) {
            onStageVisibilityChanged(mSideStageListener);
        }

        sendOnStagePositionChanged();
    }

    void setSideStageVisibility(boolean visible) {
@@ -162,6 +167,10 @@ class StageCoordinator implements SplitLayout.LayoutChangeListener,
        exitSplitScreen(null /* childrenToTop */);
    }

    void exitSplitScreenOnHide(boolean exitSplitScreenOnHide) {
        mExitSplitScreenOnHide = exitSplitScreenOnHide;
    }

    private void exitSplitScreen(StageTaskListener childrenToTop) {
        final WindowContainerTransaction wct = new WindowContainerTransaction();
        mSideStage.removeAllTasks(wct, childrenToTop == mSideStage);
@@ -202,6 +211,14 @@ class StageCoordinator implements SplitLayout.LayoutChangeListener,
        mListeners.remove(listener);
    }

    private void sendOnStagePositionChanged() {
        for (int i = mListeners.size() - 1; i >= 0; --i) {
            final SplitScreen.SplitScreenListener l = mListeners.get(i);
            l.onStagePositionChanged(STAGE_TYPE_MAIN, getMainStagePosition());
            l.onStagePositionChanged(STAGE_TYPE_SIDE, getSideStagePosition());
        }
    }

    private void onStageChildTaskStatusChanged(
            StageListenerImpl stageListener, int taskId, boolean present) {

@@ -251,7 +268,7 @@ class StageCoordinator implements SplitLayout.LayoutChangeListener,
            }
        }

        if (!mainStageVisible && !sideStageVisible) {
        if (mExitSplitScreenOnHide && !mainStageVisible && !sideStageVisible) {
            // Exit split-screen if both stage are not visible.
            // TODO: This is only a temporary request from UX and is likely to be removed soon...
            exitSplitScreen();
+5 −3
Original line number Diff line number Diff line
@@ -245,9 +245,11 @@ interface ISystemUiProxy {
    void setSideStageVisibility(in boolean visible) = 36;
    /** Removes the split-screen stages. */
    void exitSplitScreen() = 37;
    void startTask(in int taskId, in int stage, in int position, in Bundle options) = 38;
    /** @param exitSplitScreenOnHide if to exit split-screen if both stages are not visible. */
    void exitSplitScreenOnHide(boolean exitSplitScreenOnHide) = 38;
    void startTask(in int taskId, in int stage, in int position, in Bundle options) = 39;
    void startShortcut(in String packageName, in String shortcutId, in int stage, in int position,
            in Bundle options, in UserHandle user) = 39;
            in Bundle options, in UserHandle user) = 40;
    void startIntent(
            in PendingIntent intent, in int stage, in int position, in Bundle options) = 40;
            in PendingIntent intent, in int stage, in int position, in Bundle options) = 41;
}
+13 −0
Original line number Diff line number Diff line
@@ -619,6 +619,19 @@ public class OverviewProxyService extends CurrentUserTracker implements
            }
        }

        @Override
        public void exitSplitScreenOnHide(boolean exitSplitScreenOnHide) {
            if (!verifyCaller("exitSplitScreenOnHide")) {
                return;
            }
            final long token = Binder.clearCallingIdentity();
            try {
                mSplitScreenOptional.ifPresent(s -> s.exitSplitScreenOnHide(exitSplitScreenOnHide));
            } finally {
                Binder.restoreCallingIdentity(token);
            }
        }

        @Override
        public void startTask(int taskId, int stage, int position, Bundle options) {
            if (!verifyCaller("startTask")) {