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

Commit 435113c1 authored by Rob Carr's avatar Rob Carr Committed by android-build-merger
Browse files

Merge "Ensure Surface is recreated if children are detached." into pi-dev am: 7311bbd7

am: b12f236e

Change-Id: I9540936a79eaa616dbc7d7d2cf259846d7b8cd28
parents 2d7cfda5 b12f236e
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -4297,6 +4297,15 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
        final boolean wasVisible = isVisibleLw();

        result |= (!wasVisible || !isDrawnLw()) ? RELAYOUT_RES_FIRST_TIME : 0;

        if (mWinAnimator.mChildrenDetached) {
            // If there are detached children hanging around we need to force
            // the client receiving a new Surface.
            mWinAnimator.preserveSurfaceLocked();
            result |= RELAYOUT_RES_SURFACE_CHANGED
                    | RELAYOUT_RES_FIRST_TIME;
        }

        if (mAnimatingExit) {
            Slog.d(TAG, "relayoutVisibleWindow: " + this + " mAnimatingExit=true, mRemoveOnExit="
                    + mRemoveOnExit + ", mDestroying=" + mDestroying);
+6 −0
Original line number Diff line number Diff line
@@ -221,6 +221,10 @@ class WindowStateAnimator {

    private final SurfaceControl.Transaction mReparentTransaction = new SurfaceControl.Transaction();

    // Used to track whether we have called detach children on the way to invisibility, in which
    // case we need to give the client a new Surface if it lays back out to a visible state.
    boolean mChildrenDetached = false;

    WindowStateAnimator(final WindowState win) {
        final WindowManagerService service = win.mService;

@@ -430,6 +434,7 @@ class WindowStateAnimator {
        if (mSurfaceController != null) {
            return mSurfaceController;
        }
        mChildrenDetached = false;

        if ((mWin.mAttrs.privateFlags & PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY) != 0) {
            windowType = SurfaceControl.WINDOW_TYPE_DONT_SCREENSHOT;
@@ -1478,6 +1483,7 @@ class WindowStateAnimator {
        if (mSurfaceController != null) {
            mSurfaceController.detachChildren();
        }
        mChildrenDetached = true;
    }

    int getLayer() {