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

Commit 38d79dc4 authored by Tony Huang's avatar Tony Huang
Browse files

Fix decor stuck after rotate

If users resize on origin bounds case, we will skip that resized
bounds update, but we should still make decor get resized callback
to ensure all current status reset.

Fix: 281965436
Test: manual
Test: pass existing tests
Change-Id: I67cac12009bcc5d01b2c2bdee0f48b47e9a7ff22
parent d516a7ca
Loading
Loading
Loading
Loading
+15 −10
Original line number Diff line number Diff line
@@ -2061,18 +2061,16 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        // Reset this flag every time onLayoutSizeChanged.
        mShowDecorImmediately = false;

        if (!ENABLE_SHELL_TRANSITIONS) {
            // Only need screenshot for legacy case because shell transition should screenshot
            // itself during transition.
            final SurfaceControl.Transaction startT = mTransactionPool.acquire();
            mMainStage.screenshotIfNeeded(startT);
            mSideStage.screenshotIfNeeded(startT);
            mTransactionPool.release(startT);
        }

        final WindowContainerTransaction wct = new WindowContainerTransaction();
        boolean sizeChanged = updateWindowBounds(layout, wct);
        if (!sizeChanged) return;
        if (!sizeChanged) {
            // We still need to resize on decor for ensure all current status clear.
            final SurfaceControl.Transaction t = mTransactionPool.acquire();
            mMainStage.onResized(t);
            mSideStage.onResized(t);
            mTransactionPool.release(t);
            return;
        }

        sendOnBoundsChanged();
        if (ENABLE_SHELL_TRANSITIONS) {
@@ -2080,6 +2078,13 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
            mSplitTransitions.startResizeTransition(wct, this, (finishWct, t) ->
                    mSplitLayout.setDividerInteractive(true, false, "onSplitResizeFinish"));
        } else {
            // Only need screenshot for legacy case because shell transition should screenshot
            // itself during transition.
            final SurfaceControl.Transaction startT = mTransactionPool.acquire();
            mMainStage.screenshotIfNeeded(startT);
            mSideStage.screenshotIfNeeded(startT);
            mTransactionPool.release(startT);

            mSyncQueue.queue(wct);
            mSyncQueue.runInSync(t -> {
                updateSurfaceBounds(layout, t, false /* applyResizingOffset */);