Fixing flakyness in widget tests

For some predicted app widgets, the layout happens before the recyclerView
can layout completely (because of preview layout invalidation), causing the
scroll cache to get in a wrong state.
Checking for scroll cache validity everytime instead of only during
data changes

Bug: 255797215
Test: Verified by hardcoing the chrome widget as predicted widget
Change-Id: Id2c68560baa45de89e08c53bdb9ee6820eab68c4
This commit is contained in:
Sunny Goyal
2022-10-28 12:25:04 -07:00
parent 3912808183
commit 1d76159de4

View File

@@ -44,8 +44,6 @@ public class ScrollableLayoutManager extends GridLayoutManager {
* whereas widgets will have strictly increasing values
* sample values: 0, 10, 50, 60, 110
*/
//
private int[] mTotalHeightCache = new int[1];
private int mLastValidHeightIndex = 0;
@@ -62,16 +60,23 @@ public class ScrollableLayoutManager extends GridLayoutManager {
@Override
public void layoutDecorated(@NonNull View child, int left, int top, int right, int bottom) {
super.layoutDecorated(child, left, top, right, bottom);
mCachedSizes.put(
mRv.getChildViewHolder(child).getItemViewType(), child.getMeasuredHeight());
updateCachedSize(child);
}
@Override
public void layoutDecoratedWithMargins(@NonNull View child, int left, int top, int right,
int bottom) {
super.layoutDecoratedWithMargins(child, left, top, right, bottom);
mCachedSizes.put(
mRv.getChildViewHolder(child).getItemViewType(), child.getMeasuredHeight());
updateCachedSize(child);
}
private void updateCachedSize(@NonNull View child) {
int viewType = mRv.getChildViewHolder(child).getItemViewType();
int size = child.getMeasuredHeight();
if (mCachedSizes.get(viewType, -1) != size) {
invalidateScrollCache();
}
mCachedSizes.put(viewType, size);
}
@Override