diff options
| author | Vishnu Nair <vishnun@google.com> | 2020-07-08 12:44:47 -0700 |
|---|---|---|
| committer | Vishnu Nair <vishnun@google.com> | 2020-07-08 12:44:47 -0700 |
| commit | 019e08fdbb8c92625d8818551b1ba124c028cebc (patch) | |
| tree | 970a4a8b321a0a9b9a88f0cbf2dfff7753de1660 /core/java/android | |
| parent | 29d2bf129a8e7647bf1c9bb65bea0536c7d9866b (diff) | |
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
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 896a2de8b135..2fa8c4573c47 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -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(); |
