CrackMe.apk
Download file
package androidx.recyclerview.widget;
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
import android.util.SparseIntArray;
import android.view.View;
import android.view.ViewGroup;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.Arrays;
public class GridLayoutManager extends LinearLayoutManager {
private static final boolean DEBUG = false;
public static final int DEFAULT_SPAN_COUNT = -1;
private static final String TAG = "GridLayoutManager";
int[] mCachedBorders;
final Rect mDecorInsets = new Rect();
boolean mPendingSpanCountChange = false;
final SparseIntArray mPreLayoutSpanIndexCache = new SparseIntArray();
final SparseIntArray mPreLayoutSpanSizeCache = new SparseIntArray();
View[] mSet;
int mSpanCount = -1;
SpanSizeLookup mSpanSizeLookup = new DefaultSpanSizeLookup();
private boolean mUsingSpansToEstimateScrollBarDimensions;
public GridLayoutManager(Context context, AttributeSet attributeSet, int i, int i2) {
super(context, attributeSet, i, i2);
setSpanCount(getProperties(context, attributeSet, i, i2).spanCount);
}
public GridLayoutManager(Context context, int i) {
super(context);
setSpanCount(i);
}
public GridLayoutManager(Context context, int i, int i2, boolean z) {
super(context, i2, z);
setSpanCount(i);
}
public void setStackFromEnd(boolean z) {
if (!z) {
super.setStackFromEnd(false);
return;
}
throw new UnsupportedOperationException("GridLayoutManager does not support stack from end. Consider using reverse layout");
}
public int getRowCountForAccessibility(RecyclerView.Recycler recycler, RecyclerView.State state) {
if (this.mOrientation == 0) {
return this.mSpanCount;
}
if (state.getItemCount() < 1) {
return 0;
}
return getSpanGroupIndex(recycler, state, state.getItemCount() - 1) + 1;
}
public int getColumnCountForAccessibility(RecyclerView.Recycler recycler, RecyclerView.State state) {
if (this.mOrientation == 1) {
return this.mSpanCount;
}
if (state.getItemCount() < 1) {
return 0;
}
return getSpanGroupIndex(recycler, state, state.getItemCount() - 1) + 1;
}
public void onInitializeAccessibilityNodeInfoForItem(RecyclerView.Recycler recycler, RecyclerView.State state, View view, AccessibilityNodeInfoCompat accessibilityNodeInfoCompat) {
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
if (!(layoutParams instanceof LayoutParams)) {
super.onInitializeAccessibilityNodeInfoForItem(view, accessibilityNodeInfoCompat);
return;
}
LayoutParams layoutParams2 = (LayoutParams) layoutParams;
int spanGroupIndex = getSpanGroupIndex(recycler, state, layoutParams2.getViewLayoutPosition());
if (this.mOrientation == 0) {
accessibilityNodeInfoCompat.setCollectionItemInfo(AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain(layoutParams2.getSpanIndex(), layoutParams2.getSpanSize(), spanGroupIndex, 1, false, false));
return;
}
accessibilityNodeInfoCompat.setCollectionItemInfo(AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain(spanGroupIndex, 1, layoutParams2.getSpanIndex(), layoutParams2.getSpanSize(), false, false));
}
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
if (state.isPreLayout()) {
cachePreLayoutSpanMapping();
}
super.onLayoutChildren(recycler, state);
clearPreLayoutSpanMappingCache();
}
public void onLayoutCompleted(RecyclerView.State state) {
super.onLayoutCompleted(state);
this.mPendingSpanCountChange = false;
}
private void clearPreLayoutSpanMappingCache() {
this.mPreLayoutSpanSizeCache.clear();
this.mPreLayoutSpanIndexCache.clear();
}
private void cachePreLayoutSpanMapping() {
int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
LayoutParams layoutParams = (LayoutParams) getChildAt(i).getLayoutParams();
int viewLayoutPosition = layoutParams.getViewLayoutPosition();
this.mPreLayoutSpanSizeCache.put(viewLayoutPosition, layoutParams.getSpanSize());
this.mPreLayoutSpanIndexCache.put(viewLayoutPosition, layoutParams.getSpanIndex());
}
}
public void onItemsAdded(RecyclerView recyclerView, int i, int i2) {
this.mSpanSizeLookup.invalidateSpanIndexCache();
this.mSpanSizeLookup.invalidateSpanGroupIndexCache();
}
public void onItemsChanged(RecyclerView recyclerView) {
this.mSpanSizeLookup.invalidateSpanIndexCache();
this.mSpanSizeLookup.invalidateSpanGroupIndexCache();
}
public void onItemsRemoved(RecyclerView recyclerView, int i, int i2) {
this.mSpanSizeLookup.invalidateSpanIndexCache();
this.mSpanSizeLookup.invalidateSpanGroupIndexCache();
}
public void onItemsUpdated(RecyclerView recyclerView, int i, int i2, Object obj) {
this.mSpanSizeLookup.invalidateSpanIndexCache();
this.mSpanSizeLookup.invalidateSpanGroupIndexCache();
}
public void onItemsMoved(RecyclerView recyclerView, int i, int i2, int i3) {
this.mSpanSizeLookup.invalidateSpanIndexCache();
this.mSpanSizeLookup.invalidateSpanGroupIndexCache();
}
public RecyclerView.LayoutParams generateDefaultLayoutParams() {
if (this.mOrientation == 0) {
return new LayoutParams(-2, -1);
}
return new LayoutParams(-1, -2);
}
public RecyclerView.LayoutParams generateLayoutParams(Context context, AttributeSet attributeSet) {
return new LayoutParams(context, attributeSet);
}
public RecyclerView.LayoutParams generateLayoutParams(ViewGroup.LayoutParams layoutParams) {
if (layoutParams instanceof ViewGroup.MarginLayoutParams) {
return new LayoutParams((ViewGroup.MarginLayoutParams) layoutParams);
}
return new LayoutParams(layoutParams);
}
public boolean checkLayoutParams(RecyclerView.LayoutParams layoutParams) {
return layoutParams instanceof LayoutParams;
}
public void setSpanSizeLookup(SpanSizeLookup spanSizeLookup) {
this.mSpanSizeLookup = spanSizeLookup;
}
public SpanSizeLookup getSpanSizeLookup() {
return this.mSpanSizeLookup;
}
private void updateMeasurements() {
int i;
int i2;
if (getOrientation() == 1) {
i2 = getWidth() - getPaddingRight();
i = getPaddingLeft();
} else {
i2 = getHeight() - getPaddingBottom();
i = getPaddingTop();
}
calculateItemBorders(i2 - i);
}
public void setMeasuredDimension(Rect rect, int i, int i2) {
int i3;
int i4;
if (this.mCachedBorders == null) {
super.setMeasuredDimension(rect, i, i2);
}
int paddingLeft = getPaddingLeft() + getPaddingRight();
int paddingTop = getPaddingTop() + getPaddingBottom();
if (this.mOrientation == 1) {
i4 = chooseSize(i2, rect.height() + paddingTop, getMinimumHeight());
int[] iArr = this.mCachedBorders;
i3 = chooseSize(i, iArr[iArr.length - 1] + paddingLeft, getMinimumWidth());
} else {
i3 = chooseSize(i, rect.width() + paddingLeft, getMinimumWidth());
int[] iArr2 = this.mCachedBorders;
i4 = chooseSize(i2, iArr2[iArr2.length - 1] + paddingTop, getMinimumHeight());
}
setMeasuredDimension(i3, i4);
}
private void calculateItemBorders(int i) {
this.mCachedBorders = calculateItemBorders(this.mCachedBorders, this.mSpanCount, i);
}
static int[] calculateItemBorders(int[] iArr, int i, int i2) {
int i3;
if (!(iArr != null && iArr.length == i + 1 && iArr[iArr.length - 1] == i2)) {
iArr = new int[(i + 1)];
}
int i4 = 0;
iArr[0] = 0;
int i5 = i2 / i;
int i6 = i2 % i;
int i7 = 0;
for (int i8 = 1; i8 <= i; i8++) {
i4 += i6;
if (i4 <= 0 || i - i4 >= i6) {
i3 = i5;
} else {
i3 = i5 + 1;
i4 -= i;
}
i7 += i3;
iArr[i8] = i7;
}
return iArr;
}
/* access modifiers changed from: package-private */
public int getSpaceForSpanRange(int i, int i2) {
if (this.mOrientation != 1 || !isLayoutRTL()) {
int[] iArr = this.mCachedBorders;
return iArr[i2 + i] - iArr[i];
}
int[] iArr2 = this.mCachedBorders;
int i3 = this.mSpanCount;
return iArr2[i3 - i] - iArr2[(i3 - i) - i2];
}
/* access modifiers changed from: package-private */
public void onAnchorReady(RecyclerView.Recycler recycler, RecyclerView.State state, LinearLayoutManager.AnchorInfo anchorInfo, int i) {
super.onAnchorReady(recycler, state, anchorInfo, i);
updateMeasurements();
if (state.getItemCount() > 0 && !state.isPreLayout()) {
ensureAnchorIsInCorrectSpan(recycler, state, anchorInfo, i);
}
ensureViewSet();
}
private void ensureViewSet() {
View[] viewArr = this.mSet;
if (viewArr == null || viewArr.length != this.mSpanCount) {
this.mSet = new View[this.mSpanCount];
}
}
public int scrollHorizontallyBy(int i, RecyclerView.Recycler recycler, RecyclerView.State state) {
updateMeasurements();
ensureViewSet();
return super.scrollHorizontallyBy(i, recycler, state);
}
public int scrollVerticallyBy(int i, RecyclerView.Recycler recycler, RecyclerView.State state) {
updateMeasurements();
ensureViewSet();
return super.scrollVerticallyBy(i, recycler, state);
}
private void ensureAnchorIsInCorrectSpan(RecyclerView.Recycler recycler, RecyclerView.State state, LinearLayoutManager.AnchorInfo anchorInfo, int i) {
boolean z = i == 1;
int spanIndex = getSpanIndex(recycler, state, anchorInfo.mPosition);
if (z) {
while (spanIndex > 0 && anchorInfo.mPosition > 0) {
anchorInfo.mPosition--;
spanIndex = getSpanIndex(recycler, state, anchorInfo.mPosition);
}
return;
}
int itemCount = state.getItemCount() - 1;
int i2 = anchorInfo.mPosition;
while (i2 < itemCount) {
int i3 = i2 + 1;
int spanIndex2 = getSpanIndex(recycler, state, i3);
if (spanIndex2 <= spanIndex) {
break;
}
i2 = i3;
spanIndex = spanIndex2;
}
anchorInfo.mPosition = i2;
}
/* access modifiers changed from: package-private */
public View findReferenceChild(RecyclerView.Recycler recycler, RecyclerView.State state, boolean z, boolean z2) {
int i;
int childCount = getChildCount();
int i2 = -1;
int i3 = 1;
if (z2) {
i = getChildCount() - 1;
i3 = -1;
} else {
i2 = childCount;
i = 0;
}
int itemCount = state.getItemCount();
ensureLayoutState();
int startAfterPadding = this.mOrientationHelper.getStartAfterPadding();
int endAfterPadding = this.mOrientationHelper.getEndAfterPadding();
View view = null;
View view2 = null;
while (i != i2) {
View childAt = getChildAt(i);
int position = getPosition(childAt);
if (position >= 0 && position < itemCount && getSpanIndex(recycler, state, position) == 0) {
if (((RecyclerView.LayoutParams) childAt.getLayoutParams()).isItemRemoved()) {
if (view2 == null) {
view2 = childAt;
}
} else if (this.mOrientationHelper.getDecoratedStart(childAt) < endAfterPadding && this.mOrientationHelper.getDecoratedEnd(childAt) >= startAfterPadding) {
return childAt;
} else {
if (view == null) {
view = childAt;
}
}
}
i += i3;
}
return view != null ? view : view2;
}
private int getSpanGroupIndex(RecyclerView.Recycler recycler, RecyclerView.State state, int i) {
if (!state.isPreLayout()) {
return this.mSpanSizeLookup.getCachedSpanGroupIndex(i, this.mSpanCount);
}
int convertPreLayoutPositionToPostLayout = recycler.convertPreLayoutPositionToPostLayout(i);
if (convertPreLayoutPositionToPostLayout != -1) {
return this.mSpanSizeLookup.getCachedSpanGroupIndex(convertPreLayoutPositionToPostLayout, this.mSpanCount);
}
Log.w(TAG, "Cannot find span size for pre layout position. " + i);
return 0;
}
private int getSpanIndex(RecyclerView.Recycler recycler, RecyclerView.State state, int i) {
if (!state.isPreLayout()) {
return this.mSpanSizeLookup.getCachedSpanIndex(i, this.mSpanCount);
}
int i2 = this.mPreLayoutSpanIndexCache.get(i, -1);
if (i2 != -1) {
return i2;
}
int convertPreLayoutPositionToPostLayout = recycler.convertPreLayoutPositionToPostLayout(i);
if (convertPreLayoutPositionToPostLayout != -1) {
return this.mSpanSizeLookup.getCachedSpanIndex(convertPreLayoutPositionToPostLayout, this.mSpanCount);
}
Log.w(TAG, "Cannot find span size for pre layout position. It is not cached, not in the adapter. Pos:" + i);
return 0;
}
private int getSpanSize(RecyclerView.Recycler recycler, RecyclerView.State state, int i) {
if (!state.isPreLayout()) {
return this.mSpanSizeLookup.getSpanSize(i);
}
int i2 = this.mPreLayoutSpanSizeCache.get(i, -1);
if (i2 != -1) {
return i2;
}
int convertPreLayoutPositionToPostLayout = recycler.convertPreLayoutPositionToPostLayout(i);
if (convertPreLayoutPositionToPostLayout != -1) {
return this.mSpanSizeLookup.getSpanSize(convertPreLayoutPositionToPostLayout);
}
Log.w(TAG, "Cannot find span size for pre layout position. It is not cached, not in the adapter. Pos:" + i);
return 1;
}
/* access modifiers changed from: package-private */
public void collectPrefetchPositionsForLayoutState(RecyclerView.State state, LinearLayoutManager.LayoutState layoutState, RecyclerView.LayoutManager.LayoutPrefetchRegistry layoutPrefetchRegistry) {
int i = this.mSpanCount;
for (int i2 = 0; i2 < this.mSpanCount && layoutState.hasMore(state) && i > 0; i2++) {
int i3 = layoutState.mCurrentPosition;
layoutPrefetchRegistry.addPosition(i3, Math.max(0, layoutState.mScrollingOffset));
i -= this.mSpanSizeLookup.getSpanSize(i3);
layoutState.mCurrentPosition += layoutState.mItemDirection;
}
}
/* access modifiers changed from: package-private */
public void layoutChunk(RecyclerView.Recycler recycler, RecyclerView.State state, LinearLayoutManager.LayoutState layoutState, LinearLayoutManager.LayoutChunkResult layoutChunkResult) {
int i;
int i2;
int i3;
int i4;
int i5;
int i6;
int i7;
int i8;
int i9;
int i10;
View next;
RecyclerView.Recycler recycler2 = recycler;
RecyclerView.State state2 = state;
LinearLayoutManager.LayoutState layoutState2 = layoutState;
LinearLayoutManager.LayoutChunkResult layoutChunkResult2 = layoutChunkResult;
int modeInOther = this.mOrientationHelper.getModeInOther();
boolean z = false;
boolean z2 = modeInOther != 1073741824;
int i11 = getChildCount() > 0 ? this.mCachedBorders[this.mSpanCount] : 0;
if (z2) {
updateMeasurements();
}
boolean z3 = layoutState2.mItemDirection == 1;
int i12 = this.mSpanCount;
if (!z3) {
i12 = getSpanIndex(recycler2, state2, layoutState2.mCurrentPosition) + getSpanSize(recycler2, state2, layoutState2.mCurrentPosition);
}
int i13 = 0;
while (i13 < this.mSpanCount && layoutState2.hasMore(state2) && i12 > 0) {
int i14 = layoutState2.mCurrentPosition;
int spanSize = getSpanSize(recycler2, state2, i14);
if (spanSize <= this.mSpanCount) {
i12 -= spanSize;
if (i12 < 0 || (next = layoutState2.next(recycler2)) == null) {
break;
}
this.mSet[i13] = next;
i13++;
} else {
throw new IllegalArgumentException("Item at position " + i14 + " requires " + spanSize + " spans but GridLayoutManager has only " + this.mSpanCount + " spans.");
}
}
if (i13 == 0) {
layoutChunkResult2.mFinished = true;
return;
}
float f = 0.0f;
assignSpans(recycler2, state2, i13, z3);
int i15 = 0;
int i16 = 0;
while (i15 < i13) {
View view = this.mSet[i15];
if (layoutState2.mScrapList == null) {
if (z3) {
addView(view);
} else {
addView(view, z);
}
} else if (z3) {
addDisappearingView(view);
} else {
addDisappearingView(view, z ? 1 : 0);
}
calculateItemDecorationsForChild(view, this.mDecorInsets);
measureChild(view, modeInOther, z);
int decoratedMeasurement = this.mOrientationHelper.getDecoratedMeasurement(view);
if (decoratedMeasurement > i16) {
i16 = decoratedMeasurement;
}
float decoratedMeasurementInOther = (((float) this.mOrientationHelper.getDecoratedMeasurementInOther(view)) * 1.0f) / ((float) ((LayoutParams) view.getLayoutParams()).mSpanSize);
if (decoratedMeasurementInOther > f) {
f = decoratedMeasurementInOther;
}
i15++;
z = false;
}
if (z2) {
guessMeasurement(f, i11);
i16 = 0;
for (int i17 = 0; i17 < i13; i17++) {
View view2 = this.mSet[i17];
measureChild(view2, 1073741824, true);
int decoratedMeasurement2 = this.mOrientationHelper.getDecoratedMeasurement(view2);
if (decoratedMeasurement2 > i16) {
i16 = decoratedMeasurement2;
}
}
}
for (int i18 = 0; i18 < i13; i18++) {
View view3 = this.mSet[i18];
if (this.mOrientationHelper.getDecoratedMeasurement(view3) != i16) {
LayoutParams layoutParams = (LayoutParams) view3.getLayoutParams();
Rect rect = layoutParams.mDecorInsets;
int i19 = rect.top + rect.bottom + layoutParams.topMargin + layoutParams.bottomMargin;
int i20 = rect.left + rect.right + layoutParams.leftMargin + layoutParams.rightMargin;
int spaceForSpanRange = getSpaceForSpanRange(layoutParams.mSpanIndex, layoutParams.mSpanSize);
if (this.mOrientation == 1) {
i10 = getChildMeasureSpec(spaceForSpanRange, 1073741824, i20, layoutParams.width, false);
i9 = View.MeasureSpec.makeMeasureSpec(i16 - i19, 1073741824);
} else {
int makeMeasureSpec = View.MeasureSpec.makeMeasureSpec(i16 - i20, 1073741824);
i9 = getChildMeasureSpec(spaceForSpanRange, 1073741824, i19, layoutParams.height, false);
i10 = makeMeasureSpec;
}
measureChildWithDecorationsAndMargin(view3, i10, i9, true);
}
}
int i21 = 0;
layoutChunkResult2.mConsumed = i16;
if (this.mOrientation == 1) {
if (layoutState2.mLayoutDirection == -1) {
i4 = layoutState2.mOffset;
i = i4 - i16;
} else {
int i22 = layoutState2.mOffset;
i = i22;
i4 = i16 + i22;
}
i3 = 0;
i2 = 0;
} else if (layoutState2.mLayoutDirection == -1) {
int i23 = layoutState2.mOffset;
i2 = i23 - i16;
i = 0;
i3 = i23;
i4 = 0;
} else {
int i24 = layoutState2.mOffset;
i3 = i16 + i24;
i2 = i24;
i4 = 0;
i = 0;
}
while (i21 < i13) {
View view4 = this.mSet[i21];
LayoutParams layoutParams2 = (LayoutParams) view4.getLayoutParams();
if (this.mOrientation == 1) {
if (isLayoutRTL()) {
int paddingLeft = getPaddingLeft() + this.mCachedBorders[this.mSpanCount - layoutParams2.mSpanIndex];
i8 = i4;
i7 = paddingLeft;
i6 = paddingLeft - this.mOrientationHelper.getDecoratedMeasurementInOther(view4);
} else {
int paddingLeft2 = getPaddingLeft() + this.mCachedBorders[layoutParams2.mSpanIndex];
i8 = i4;
i6 = paddingLeft2;
i7 = this.mOrientationHelper.getDecoratedMeasurementInOther(view4) + paddingLeft2;
}
i5 = i;
} else {
int paddingTop = getPaddingTop() + this.mCachedBorders[layoutParams2.mSpanIndex];
i5 = paddingTop;
i7 = i3;
i6 = i2;
i8 = this.mOrientationHelper.getDecoratedMeasurementInOther(view4) + paddingTop;
}
layoutDecoratedWithMargins(view4, i6, i5, i7, i8);
if (layoutParams2.isItemRemoved() || layoutParams2.isItemChanged()) {
layoutChunkResult2.mIgnoreConsumed = true;
}
layoutChunkResult2.mFocusable |= view4.hasFocusable();
i21++;
i4 = i8;
i3 = i7;
i2 = i6;
i = i5;
}
Arrays.fill(this.mSet, (Object) null);
}
private void measureChild(View view, int i, boolean z) {
int i2;
int i3;
LayoutParams layoutParams = (LayoutParams) view.getLayoutParams();
Rect rect = layoutParams.mDecorInsets;
int i4 = rect.top + rect.bottom + layoutParams.topMargin + layoutParams.bottomMargin;
int i5 = rect.left + rect.right + layoutParams.leftMargin + layoutParams.rightMargin;
int spaceForSpanRange = getSpaceForSpanRange(layoutParams.mSpanIndex, layoutParams.mSpanSize);
if (this.mOrientation == 1) {
i2 = getChildMeasureSpec(spaceForSpanRange, i, i5, layoutParams.width, false);
i3 = getChildMeasureSpec(this.mOrientationHelper.getTotalSpace(), getHeightMode(), i4, layoutParams.height, true);
} else {
int childMeasureSpec = getChildMeasureSpec(spaceForSpanRange, i, i4, layoutParams.height, false);
int childMeasureSpec2 = getChildMeasureSpec(this.mOrientationHelper.getTotalSpace(), getWidthMode(), i5, layoutParams.width, true);
i3 = childMeasureSpec;
i2 = childMeasureSpec2;
}
measureChildWithDecorationsAndMargin(view, i2, i3, z);
}
private void guessMeasurement(float f, int i) {
calculateItemBorders(Math.max(Math.round(f * ((float) this.mSpanCount)), i));
}
private void measureChildWithDecorationsAndMargin(View view, int i, int i2, boolean z) {
boolean z2;
RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) view.getLayoutParams();
if (z) {
z2 = shouldReMeasureChild(view, i, i2, layoutParams);
} else {
z2 = shouldMeasureChild(view, i, i2, layoutParams);
}
if (z2) {
view.measure(i, i2);
}
}
private void assignSpans(RecyclerView.Recycler recycler, RecyclerView.State state, int i, boolean z) {
int i2;
int i3;
int i4 = 0;
int i5 = -1;
if (z) {
i5 = i;
i3 = 0;
i2 = 1;
} else {
i3 = i - 1;
i2 = -1;
}
while (i3 != i5) {
View view = this.mSet[i3];
LayoutParams layoutParams = (LayoutParams) view.getLayoutParams();
layoutParams.mSpanSize = getSpanSize(recycler, state, getPosition(view));
layoutParams.mSpanIndex = i4;
i4 += layoutParams.mSpanSize;
i3 += i2;
}
}
public int getSpanCount() {
return this.mSpanCount;
}
public void setSpanCount(int i) {
if (i != this.mSpanCount) {
this.mPendingSpanCountChange = true;
if (i >= 1) {
this.mSpanCount = i;
this.mSpanSizeLookup.invalidateSpanIndexCache();
requestLayout();
return;
}
throw new IllegalArgumentException("Span count should be at least 1. Provided " + i);
}
}
public static abstract class SpanSizeLookup {
private boolean mCacheSpanGroupIndices = false;
private boolean mCacheSpanIndices = false;
final SparseIntArray mSpanGroupIndexCache = new SparseIntArray();
final SparseIntArray mSpanIndexCache = new SparseIntArray();
public abstract int getSpanSize(int i);
public void setSpanIndexCacheEnabled(boolean z) {
if (!z) {
this.mSpanGroupIndexCache.clear();
}
this.mCacheSpanIndices = z;
}
public void setSpanGroupIndexCacheEnabled(boolean z) {
if (!z) {
this.mSpanGroupIndexCache.clear();
}
this.mCacheSpanGroupIndices = z;
}
public void invalidateSpanIndexCache() {
this.mSpanIndexCache.clear();
}
public void invalidateSpanGroupIndexCache() {
this.mSpanGroupIndexCache.clear();
}
public boolean isSpanIndexCacheEnabled() {
return this.mCacheSpanIndices;
}
public boolean isSpanGroupIndexCacheEnabled() {
return this.mCacheSpanGroupIndices;
}
/* access modifiers changed from: package-private */
public int getCachedSpanIndex(int i, int i2) {
if (!this.mCacheSpanIndices) {
return getSpanIndex(i, i2);
}
int i3 = this.mSpanIndexCache.get(i, -1);
if (i3 != -1) {
return i3;
}
int spanIndex = getSpanIndex(i, i2);
this.mSpanIndexCache.put(i, spanIndex);
return spanIndex;
}
/* access modifiers changed from: package-private */
public int getCachedSpanGroupIndex(int i, int i2) {
if (!this.mCacheSpanGroupIndices) {
return getSpanGroupIndex(i, i2);
}
int i3 = this.mSpanGroupIndexCache.get(i, -1);
if (i3 != -1) {
return i3;
}
int spanGroupIndex = getSpanGroupIndex(i, i2);
this.mSpanGroupIndexCache.put(i, spanGroupIndex);
return spanGroupIndex;
}
/* JADX WARNING: Removed duplicated region for block: B:10:0x0024 */
/* Code decompiled incorrectly, please refer to instructions dump. */
public int getSpanIndex(int r6, int r7) {
/*
r5 = this;
int r0 = r5.getSpanSize(r6)
r1 = 0
if (r0 != r7) goto L_0x0008
return r1
L_0x0008:
boolean r2 = r5.mCacheSpanIndices
if (r2 == 0) goto L_0x0020
android.util.SparseIntArray r2 = r5.mSpanIndexCache
int r2 = findFirstKeyLessThan(r2, r6)
if (r2 < 0) goto L_0x0020
android.util.SparseIntArray r3 = r5.mSpanIndexCache
int r3 = r3.get(r2)
int r4 = r5.getSpanSize(r2)
int r3 = r3 + r4
goto L_0x0030
L_0x0020:
r2 = 0
r3 = 0
L_0x0022:
if (r2 >= r6) goto L_0x0033
int r4 = r5.getSpanSize(r2)
int r3 = r3 + r4
if (r3 != r7) goto L_0x002d
r3 = 0
goto L_0x0030
L_0x002d:
if (r3 <= r7) goto L_0x0030
r3 = r4
L_0x0030:
int r2 = r2 + 1
goto L_0x0022
L_0x0033:
int r0 = r0 + r3
if (r0 > r7) goto L_0x0037
return r3
L_0x0037:
return r1
*/
throw new UnsupportedOperationException("Method not decompiled: androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup.getSpanIndex(int, int):int");
}
static int findFirstKeyLessThan(SparseIntArray sparseIntArray, int i) {
int size = sparseIntArray.size() - 1;
int i2 = 0;
while (i2 <= size) {
int i3 = (i2 + size) >>> 1;
if (sparseIntArray.keyAt(i3) < i) {
i2 = i3 + 1;
} else {
size = i3 - 1;
}
}
int i4 = i2 - 1;
if (i4 < 0 || i4 >= sparseIntArray.size()) {
return -1;
}
return sparseIntArray.keyAt(i4);
}
/* JADX WARNING: Removed duplicated region for block: B:11:0x002d */
/* JADX WARNING: Removed duplicated region for block: B:19:0x0043 */
/* JADX WARNING: Removed duplicated region for block: B:25:? A[RETURN, SYNTHETIC] */
/* Code decompiled incorrectly, please refer to instructions dump. */
public int getSpanGroupIndex(int r7, int r8) {
/*
r6 = this;
boolean r0 = r6.mCacheSpanGroupIndices
r1 = 0
if (r0 == 0) goto L_0x0024
android.util.SparseIntArray r0 = r6.mSpanGroupIndexCache
int r0 = findFirstKeyLessThan(r0, r7)
r2 = -1
if (r0 == r2) goto L_0x0024
android.util.SparseIntArray r2 = r6.mSpanGroupIndexCache
int r2 = r2.get(r0)
int r3 = r0 + 1
int r4 = r6.getCachedSpanIndex(r0, r8)
int r0 = r6.getSpanSize(r0)
int r4 = r4 + r0
if (r4 != r8) goto L_0x0027
int r2 = r2 + 1
goto L_0x0026
L_0x0024:
r2 = 0
r3 = 0
L_0x0026:
r4 = 0
L_0x0027:
int r0 = r6.getSpanSize(r7)
L_0x002b:
if (r3 >= r7) goto L_0x0040
int r5 = r6.getSpanSize(r3)
int r4 = r4 + r5
if (r4 != r8) goto L_0x0038
int r2 = r2 + 1
r4 = 0
goto L_0x003d
L_0x0038:
if (r4 <= r8) goto L_0x003d
int r2 = r2 + 1
r4 = r5
L_0x003d:
int r3 = r3 + 1
goto L_0x002b
L_0x0040:
int r4 = r4 + r0
if (r4 <= r8) goto L_0x0045
int r2 = r2 + 1
L_0x0045:
return r2
*/
throw new UnsupportedOperationException("Method not decompiled: androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup.getSpanGroupIndex(int, int):int");
}
}
/* JADX WARNING: Code restructure failed: missing block: B:53:0x00d8, code lost:
if (r13 == (r2 > r15)) goto L_0x00b4;
*/
/* JADX WARNING: Code restructure failed: missing block: B:64:0x00f8, code lost:
if (r13 == r8) goto L_0x00bc;
*/
/* JADX WARNING: Removed duplicated region for block: B:70:0x0109 */
/* Code decompiled incorrectly, please refer to instructions dump. */
public android.view.View onFocusSearchFailed(android.view.View r23, int r24, androidx.recyclerview.widget.RecyclerView.Recycler r25, androidx.recyclerview.widget.RecyclerView.State r26) {
/*
r22 = this;
r0 = r22
r1 = r25
r2 = r26
android.view.View r3 = r22.findContainingItemView(r23)
r4 = 0
if (r3 != 0) goto L_0x000e
return r4
L_0x000e:
android.view.ViewGroup$LayoutParams r5 = r3.getLayoutParams()
androidx.recyclerview.widget.GridLayoutManager$LayoutParams r5 = (androidx.recyclerview.widget.GridLayoutManager.LayoutParams) r5
int r6 = r5.mSpanIndex
int r7 = r5.mSpanIndex
int r5 = r5.mSpanSize
int r7 = r7 + r5
android.view.View r5 = super.onFocusSearchFailed(r23, r24, r25, r26)
if (r5 != 0) goto L_0x0022
return r4
L_0x0022:
r5 = r24
int r5 = r0.convertFocusDirectionToLayoutDirection(r5)
r9 = 1
if (r5 != r9) goto L_0x002d
r5 = 1
goto L_0x002e
L_0x002d:
r5 = 0
L_0x002e:
boolean r10 = r0.mShouldReverseLayout
if (r5 == r10) goto L_0x0034
r5 = 1
goto L_0x0035
L_0x0034:
r5 = 0
L_0x0035:
r10 = -1
if (r5 == 0) goto L_0x0040
int r5 = r22.getChildCount()
int r5 = r5 - r9
r11 = -1
r12 = -1
goto L_0x0047
L_0x0040:
int r5 = r22.getChildCount()
r11 = r5
r5 = 0
r12 = 1
L_0x0047:
int r13 = r0.mOrientation
if (r13 != r9) goto L_0x0053
boolean r13 = r22.isLayoutRTL()
if (r13 == 0) goto L_0x0053
r13 = 1
goto L_0x0054
L_0x0053:
r13 = 0
L_0x0054:
int r14 = r0.getSpanGroupIndex(r1, r2, r5)
r10 = r5
r8 = 0
r15 = -1
r16 = -1
r17 = 0
r5 = r4
L_0x0060:
if (r10 == r11) goto L_0x014a
int r9 = r0.getSpanGroupIndex(r1, r2, r10)
android.view.View r1 = r0.getChildAt(r10)
if (r1 != r3) goto L_0x006e
goto L_0x014a
L_0x006e:
boolean r18 = r1.hasFocusable()
if (r18 == 0) goto L_0x0088
if (r9 == r14) goto L_0x0088
if (r4 == 0) goto L_0x007a
goto L_0x014a
L_0x007a:
r18 = r3
r20 = r5
r23 = r8
r19 = r11
r11 = r16
r5 = r17
goto L_0x0136
L_0x0088:
android.view.ViewGroup$LayoutParams r9 = r1.getLayoutParams()
androidx.recyclerview.widget.GridLayoutManager$LayoutParams r9 = (androidx.recyclerview.widget.GridLayoutManager.LayoutParams) r9
int r2 = r9.mSpanIndex
r18 = r3
int r3 = r9.mSpanIndex
r19 = r11
int r11 = r9.mSpanSize
int r3 = r3 + r11
boolean r11 = r1.hasFocusable()
if (r11 == 0) goto L_0x00a4
if (r2 != r6) goto L_0x00a4
if (r3 != r7) goto L_0x00a4
return r1
L_0x00a4:
boolean r11 = r1.hasFocusable()
if (r11 == 0) goto L_0x00ac
if (r4 == 0) goto L_0x00b4
L_0x00ac:
boolean r11 = r1.hasFocusable()
if (r11 != 0) goto L_0x00be
if (r5 != 0) goto L_0x00be
L_0x00b4:
r20 = r5
r23 = r8
r11 = r16
r5 = r17
L_0x00bc:
r8 = 1
goto L_0x0107
L_0x00be:
int r11 = java.lang.Math.max(r2, r6)
int r20 = java.lang.Math.min(r3, r7)
int r11 = r20 - r11
boolean r20 = r1.hasFocusable()
if (r20 == 0) goto L_0x00db
if (r11 <= r8) goto L_0x00d1
goto L_0x00b4
L_0x00d1:
if (r11 != r8) goto L_0x00fe
if (r2 <= r15) goto L_0x00d7
r11 = 1
goto L_0x00d8
L_0x00d7:
r11 = 0
L_0x00d8:
if (r13 != r11) goto L_0x00fe
goto L_0x00b4
L_0x00db:
if (r4 != 0) goto L_0x00fe
r20 = r5
r23 = r8
r5 = 0
r8 = 1
boolean r21 = r0.isViewPartiallyVisible(r1, r5, r8)
if (r21 == 0) goto L_0x0102
r5 = r17
if (r11 <= r5) goto L_0x00f0
r11 = r16
goto L_0x0107
L_0x00f0:
if (r11 != r5) goto L_0x00fb
r11 = r16
if (r2 <= r11) goto L_0x00f7
goto L_0x00f8
L_0x00f7:
r8 = 0
L_0x00f8:
if (r13 != r8) goto L_0x0106
goto L_0x00bc
L_0x00fb:
r11 = r16
goto L_0x0106
L_0x00fe:
r20 = r5
r23 = r8
L_0x0102:
r11 = r16
r5 = r17
L_0x0106:
r8 = 0
L_0x0107:
if (r8 == 0) goto L_0x0136
boolean r8 = r1.hasFocusable()
if (r8 == 0) goto L_0x0124
int r4 = r9.mSpanIndex
int r3 = java.lang.Math.min(r3, r7)
int r2 = java.lang.Math.max(r2, r6)
int r8 = r3 - r2
r15 = r4
r17 = r5
r16 = r11
r5 = r20
r4 = r1
goto L_0x013e
L_0x0124:
int r5 = r9.mSpanIndex
int r3 = java.lang.Math.min(r3, r7)
int r2 = java.lang.Math.max(r2, r6)
int r17 = r3 - r2
r8 = r23
r16 = r5
r5 = r1
goto L_0x013e
L_0x0136:
r8 = r23
r17 = r5
r16 = r11
r5 = r20
L_0x013e:
int r10 = r10 + r12
r1 = r25
r2 = r26
r3 = r18
r11 = r19
r9 = 1
goto L_0x0060
L_0x014a:
r20 = r5
if (r4 == 0) goto L_0x014f
goto L_0x0151
L_0x014f:
r4 = r20
L_0x0151:
return r4
*/
throw new UnsupportedOperationException("Method not decompiled: androidx.recyclerview.widget.GridLayoutManager.onFocusSearchFailed(android.view.View, int, androidx.recyclerview.widget.RecyclerView$Recycler, androidx.recyclerview.widget.RecyclerView$State):android.view.View");
}
public boolean supportsPredictiveItemAnimations() {
return this.mPendingSavedState == null && !this.mPendingSpanCountChange;
}
public int computeHorizontalScrollRange(RecyclerView.State state) {
if (this.mUsingSpansToEstimateScrollBarDimensions) {
return computeScrollRangeWithSpanInfo(state);
}
return super.computeHorizontalScrollRange(state);
}
public int computeVerticalScrollRange(RecyclerView.State state) {
if (this.mUsingSpansToEstimateScrollBarDimensions) {
return computeScrollRangeWithSpanInfo(state);
}
return super.computeVerticalScrollRange(state);
}
public int computeHorizontalScrollOffset(RecyclerView.State state) {
if (this.mUsingSpansToEstimateScrollBarDimensions) {
return computeScrollOffsetWithSpanInfo(state);
}
return super.computeHorizontalScrollOffset(state);
}
public int computeVerticalScrollOffset(RecyclerView.State state) {
if (this.mUsingSpansToEstimateScrollBarDimensions) {
return computeScrollOffsetWithSpanInfo(state);
}
return super.computeVerticalScrollOffset(state);
}
public void setUsingSpansToEstimateScrollbarDimensions(boolean z) {
this.mUsingSpansToEstimateScrollBarDimensions = z;
}
public boolean isUsingSpansToEstimateScrollbarDimensions() {
return this.mUsingSpansToEstimateScrollBarDimensions;
}
private int computeScrollRangeWithSpanInfo(RecyclerView.State state) {
if (!(getChildCount() == 0 || state.getItemCount() == 0)) {
ensureLayoutState();
View findFirstVisibleChildClosestToStart = findFirstVisibleChildClosestToStart(!isSmoothScrollbarEnabled(), true);
View findFirstVisibleChildClosestToEnd = findFirstVisibleChildClosestToEnd(!isSmoothScrollbarEnabled(), true);
if (!(findFirstVisibleChildClosestToStart == null || findFirstVisibleChildClosestToEnd == null)) {
if (!isSmoothScrollbarEnabled()) {
return this.mSpanSizeLookup.getCachedSpanGroupIndex(state.getItemCount() - 1, this.mSpanCount) + 1;
}
int decoratedEnd = this.mOrientationHelper.getDecoratedEnd(findFirstVisibleChildClosestToEnd) - this.mOrientationHelper.getDecoratedStart(findFirstVisibleChildClosestToStart);
int cachedSpanGroupIndex = this.mSpanSizeLookup.getCachedSpanGroupIndex(getPosition(findFirstVisibleChildClosestToStart), this.mSpanCount);
return (int) ((((float) decoratedEnd) / ((float) ((this.mSpanSizeLookup.getCachedSpanGroupIndex(getPosition(findFirstVisibleChildClosestToEnd), this.mSpanCount) - cachedSpanGroupIndex) + 1))) * ((float) (this.mSpanSizeLookup.getCachedSpanGroupIndex(state.getItemCount() - 1, this.mSpanCount) + 1)));
}
}
return 0;
}
private int computeScrollOffsetWithSpanInfo(RecyclerView.State state) {
int i;
if (!(getChildCount() == 0 || state.getItemCount() == 0)) {
ensureLayoutState();
boolean isSmoothScrollbarEnabled = isSmoothScrollbarEnabled();
View findFirstVisibleChildClosestToStart = findFirstVisibleChildClosestToStart(!isSmoothScrollbarEnabled, true);
View findFirstVisibleChildClosestToEnd = findFirstVisibleChildClosestToEnd(!isSmoothScrollbarEnabled, true);
if (!(findFirstVisibleChildClosestToStart == null || findFirstVisibleChildClosestToEnd == null)) {
int cachedSpanGroupIndex = this.mSpanSizeLookup.getCachedSpanGroupIndex(getPosition(findFirstVisibleChildClosestToStart), this.mSpanCount);
int cachedSpanGroupIndex2 = this.mSpanSizeLookup.getCachedSpanGroupIndex(getPosition(findFirstVisibleChildClosestToEnd), this.mSpanCount);
int min = Math.min(cachedSpanGroupIndex, cachedSpanGroupIndex2);
int max = Math.max(cachedSpanGroupIndex, cachedSpanGroupIndex2);
int cachedSpanGroupIndex3 = this.mSpanSizeLookup.getCachedSpanGroupIndex(state.getItemCount() - 1, this.mSpanCount) + 1;
if (this.mShouldReverseLayout) {
i = Math.max(0, (cachedSpanGroupIndex3 - max) - 1);
} else {
i = Math.max(0, min);
}
if (!isSmoothScrollbarEnabled) {
return i;
}
return Math.round((((float) i) * (((float) Math.abs(this.mOrientationHelper.getDecoratedEnd(findFirstVisibleChildClosestToEnd) - this.mOrientationHelper.getDecoratedStart(findFirstVisibleChildClosestToStart))) / ((float) ((this.mSpanSizeLookup.getCachedSpanGroupIndex(getPosition(findFirstVisibleChildClosestToEnd), this.mSpanCount) - this.mSpanSizeLookup.getCachedSpanGroupIndex(getPosition(findFirstVisibleChildClosestToStart), this.mSpanCount)) + 1)))) + ((float) (this.mOrientationHelper.getStartAfterPadding() - this.mOrientationHelper.getDecoratedStart(findFirstVisibleChildClosestToStart))));
}
}
return 0;
}
public static final class DefaultSpanSizeLookup extends SpanSizeLookup {
public int getSpanSize(int i) {
return 1;
}
public int getSpanIndex(int i, int i2) {
return i % i2;
}
}
public static class LayoutParams extends RecyclerView.LayoutParams {
public static final int INVALID_SPAN_ID = -1;
int mSpanIndex = -1;
int mSpanSize = 0;
public LayoutParams(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
}
public LayoutParams(int i, int i2) {
super(i, i2);
}
public LayoutParams(ViewGroup.MarginLayoutParams marginLayoutParams) {
super(marginLayoutParams);
}
public LayoutParams(ViewGroup.LayoutParams layoutParams) {
super(layoutParams);
}
public LayoutParams(RecyclerView.LayoutParams layoutParams) {
super(layoutParams);
}
public int getSpanIndex() {
return this.mSpanIndex;
}
public int getSpanSize() {
return this.mSpanSize;
}
}
}
Download file