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

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

Merge "Fix surface got offsetted twice while entering split" into sc-v2-dev...

Merge "Fix surface got offsetted twice while entering split" into sc-v2-dev am: 8366d034 am: 13764ef3

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

Change-Id: Ic81d7579e3d9e47de52cdb02b49b9e905df0366b
parents a79f32b9 13764ef3
Loading
Loading
Loading
Loading
+7 −24
Original line number Diff line number Diff line
@@ -250,7 +250,8 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        setSideStagePosition(sideStagePosition, wct);
        mMainStage.activate(getMainStageBounds(), wct);
        mSideStage.addTask(task, getSideStageBounds(), wct);
        mTaskOrganizer.applyTransaction(wct);
        mSyncQueue.queue(wct);
        mSyncQueue.runInSync(t -> updateSurfaceBounds(null /* layout */, t));
        return true;
    }

@@ -446,15 +447,15 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        setSideStagePosition(sideStagePosition, true /* updateBounds */, wct);
    }

    private void setSideStagePosition(@SplitPosition int sideStagePosition,
            boolean updateBounds, @Nullable WindowContainerTransaction wct) {
    private void setSideStagePosition(@SplitPosition int sideStagePosition, boolean updateBounds,
            @Nullable WindowContainerTransaction wct) {
        if (mSideStagePosition == sideStagePosition) return;
        mSideStagePosition = sideStagePosition;
        sendOnStagePositionChanged();

        if (mSideStageListener.mVisible && updateBounds) {
            if (wct == null) {
                // onBoundsChanged builds/applies a wct with the contents of updateWindowBounds.
                // onLayoutChanged builds/applies a wct with the contents of updateWindowBounds.
                onLayoutChanged(mSplitLayout);
            } else {
                updateWindowBounds(mSplitLayout, wct);
@@ -675,29 +676,11 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        }

        mSyncQueue.runInSync(t -> {
            final SurfaceControl sideStageLeash = mSideStage.mRootLeash;
            final SurfaceControl mainStageLeash = mMainStage.mRootLeash;

            if (sideStageVisible) {
                final Rect sideStageBounds = getSideStageBounds();
                t.setPosition(sideStageLeash,
                        sideStageBounds.left, sideStageBounds.top)
                        .setWindowCrop(sideStageLeash,
                                sideStageBounds.width(), sideStageBounds.height());
            }

            if (mainStageVisible) {
                final Rect mainStageBounds = getMainStageBounds();
                t.setPosition(mainStageLeash, mainStageBounds.left, mainStageBounds.top)
                        .setWindowCrop(mainStageLeash,
                                mainStageBounds.width(), mainStageBounds.height());
            }

            // Same above, we only set root tasks and divider leash visibility when both stage
            // change to visible or invisible to avoid flicker.
            if (sameVisibility) {
                t.setVisibility(sideStageLeash, bothStageVisible)
                        .setVisibility(mainStageLeash, bothStageVisible);
                t.setVisibility(mSideStage.mRootLeash, bothStageVisible)
                        .setVisibility(mMainStage.mRootLeash, bothStageVisible);
                applyDividerVisibility(t);
            }
        });