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

Commit 019e08fd authored by Vishnu Nair's avatar Vishnu Nair
Browse files

ViewRootImpl: Call surface destroy callback after layout pass

If a requestLayout happens on a child view after the measure
pass, before the layout pass then the child view will not layout.
This can happen if a view calls requestLayout during measure
or during SurfaceView surface destroyed callback.

This fix addresses the second scenario by moving the callback
to after the layout pass.

Bug: 159183008
Test: Repro steps in bug
Test: go/wm-smoke
Change-Id: Ie2794a3751c99cabf6e07445c91159e35eeb1729
parent 29d2bf12
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -2724,7 +2724,6 @@ public final class ViewRootImpl implements ViewParent,
                            mAttachInfo.mThreadedRenderer.isEnabled()) {
                        mAttachInfo.mThreadedRenderer.destroy();
                    }
                    notifySurfaceDestroyed();
                } else if ((surfaceReplaced
                        || surfaceSizeChanged || windowRelayoutWasForced || colorModeChanged)
                        && mSurfaceHolder == null
@@ -2955,6 +2954,10 @@ public final class ViewRootImpl implements ViewParent,
            }
        }

        if (surfaceDestroyed) {
            notifySurfaceDestroyed();
        }

        if (triggerGlobalLayoutListener) {
            mAttachInfo.mRecomputeGlobalAttributes = false;
            mAttachInfo.mTreeObserver.dispatchOnGlobalLayout();