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

Commit 4898bf96 authored by Rob Carr's avatar Rob Carr Committed by Android (Google) Code Review
Browse files

Merge "Only restore saved surfaces in the last visible rotation." into nyc-mr1-dev

parents 831dd754 237028ae
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -3081,6 +3081,9 @@ public class WindowManagerService extends IWindowManager.Stub
        if (oldVisibility == View.GONE) {
            winAnimator.mEnterAnimationPending = true;
        }

        win.mLastVisibleLayoutRotation = mRotation;

        winAnimator.mEnteringAnimation = true;
        if ((result & WindowManagerGlobal.RELAYOUT_RES_FIRST_TIME) != 0) {
            win.prepareWindowToDisplayDuringRelayout(outConfig);
+19 −0
Original line number Diff line number Diff line
@@ -394,6 +394,13 @@ final class WindowState implements WindowManagerPolicy.WindowState {
     */
    boolean mOrientationChanging;

    /**
     * The orientation during the last visible call to relayout. If our
     * current orientation is different, the window can't be ready
     * to be shown.
     */
    int mLastVisibleLayoutRotation = -1;

    /**
     * How long we last kept the screen frozen.
     */
@@ -2095,6 +2102,7 @@ final class WindowState implements WindowManagerPolicy.WindowState {
                Slog.v(TAG, "Destroying saved surface: " + this);
            }
            mWinAnimator.destroySurfaceLocked();
            mSurfaceSaved = false;
        }
        mWasVisibleBeforeClientHidden = false;
    }
@@ -2103,7 +2111,18 @@ final class WindowState implements WindowManagerPolicy.WindowState {
        if (!mSurfaceSaved) {
            return;
        }

        // Sometimes we save surfaces due to layout invisible
        // directly after rotation occurs. However this means
        // the surface was never laid out in the new orientation.
        // We can only restore to the last rotation we were
        // laid out as visible in.
        if (mLastVisibleLayoutRotation != mService.mRotation) {
            destroySavedSurface();
            return;
        }
        mSurfaceSaved = false;

        if (mWinAnimator.mSurfaceController != null) {
            setHasSurface(true);
            mWinAnimator.mDrawState = WindowStateAnimator.READY_TO_SHOW;