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

Commit 8366d034 authored by Jerry Chang's avatar Jerry Chang Committed by Android (Google) Code Review
Browse files

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

parents 35bcf443 a0c224db
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);
            }
        });