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

Commit 5db2a3bb authored by Robert Carr's avatar Robert Carr Committed by android-build-merger
Browse files

Only restore saved surfaces in the last visible rotation.

am: 237028ae

Change-Id: I9963cfb9b515b1ceabdb39a64027bb227e191643
parents edce9999 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;