Do a forceLayout if pending insets is changed after relayout window

We might have a pending MSG_RESIZED_REPORT, but if it's executed after
relayoutWindow, mPendingInsets will already be the new value and it'll
not forceLayout. So we need to forceLayout here to make sure the measure
cache is cleared.

bug: 29391054

Change-Id: I73793b1427b89e75700369ec3b37053a6a732f0d
This commit is contained in:
Chong Zhang
2016-06-16 17:28:25 -07:00
parent 02435d2419
commit 71f2c31469

View File

@@ -1814,6 +1814,19 @@ public final class ViewRootImpl implements ViewParent,
+ mAttachInfo.mVisibleInsets);
}
// If any of the insets changed, do a forceLayout on the view so that the
// measure cache is cleared. We might have a pending MSG_RESIZED_REPORT
// that is supposed to take care of it, but since pending insets are
// already modified here, it won't detect the frame change after this.
final boolean framesChanged = overscanInsetsChanged
|| contentInsetsChanged
|| stableInsetsChanged
|| visibleInsetsChanged
|| outsetsChanged;
if (mAdded && mView != null && framesChanged) {
forceLayout(mView);
}
if (!hadSurface) {
if (mSurface.isValid()) {
// If we are creating a new surface, then we need to