package androidx.recyclerview.widget; import android.view.View; import android.view.ViewGroup; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; /* JADX INFO: Access modifiers changed from: package-private */ /* loaded from: classes2.dex */ public class ChildHelper { private static final boolean DEBUG = false; private static final int REMOVE_STATUS_IN_REMOVE = 1; private static final int REMOVE_STATUS_IN_REMOVE_IF_HIDDEN = 2; private static final int REMOVE_STATUS_NONE = 0; private static final String TAG = "ChildrenHelper"; final Callback mCallback; private View mViewInRemoveView; private int mRemoveStatus = 0; final Bucket mBucket = new Bucket(); final List mHiddenViews = new ArrayList(); /* JADX INFO: Access modifiers changed from: package-private */ /* loaded from: classes2.dex */ public interface Callback { void addView(View view, int i); void attachViewToParent(View view, int i, ViewGroup.LayoutParams layoutParams); void detachViewFromParent(int i); View getChildAt(int i); int getChildCount(); RecyclerView.ViewHolder getChildViewHolder(View view); int indexOfChild(View view); void onEnteredHiddenState(View view); void onLeftHiddenState(View view); void removeAllViews(); void removeViewAt(int i); } /* JADX INFO: Access modifiers changed from: package-private */ public ChildHelper(Callback callback) { this.mCallback = callback; } private void hideViewInternal(View view) { this.mHiddenViews.add(view); this.mCallback.onEnteredHiddenState(view); } private boolean unhideViewInternal(View view) { if (!this.mHiddenViews.remove(view)) { return false; } this.mCallback.onLeftHiddenState(view); return true; } /* JADX INFO: Access modifiers changed from: package-private */ public void addView(View view, boolean z) { addView(view, -1, z); } /* JADX INFO: Access modifiers changed from: package-private */ public void addView(View view, int i, boolean z) { int offset; if (i < 0) { offset = this.mCallback.getChildCount(); } else { offset = getOffset(i); } this.mBucket.insert(offset, z); if (z) { hideViewInternal(view); } this.mCallback.addView(view, offset); } private int getOffset(int i) { if (i < 0) { return -1; } int childCount = this.mCallback.getChildCount(); int i2 = i; while (i2 < childCount) { int countOnesBefore = i - (i2 - this.mBucket.countOnesBefore(i2)); if (countOnesBefore == 0) { while (this.mBucket.get(i2)) { i2++; } return i2; } i2 += countOnesBefore; } return -1; } /* JADX INFO: Access modifiers changed from: package-private */ public void removeView(View view) { int i = this.mRemoveStatus; if (i == 1) { throw new IllegalStateException("Cannot call removeView(At) within removeView(At)"); } if (i == 2) { throw new IllegalStateException("Cannot call removeView(At) within removeViewIfHidden"); } try { this.mRemoveStatus = 1; this.mViewInRemoveView = view; int indexOfChild = this.mCallback.indexOfChild(view); if (indexOfChild < 0) { return; } if (this.mBucket.remove(indexOfChild)) { unhideViewInternal(view); } this.mCallback.removeViewAt(indexOfChild); } finally { this.mRemoveStatus = 0; this.mViewInRemoveView = null; } } /* JADX INFO: Access modifiers changed from: package-private */ public void removeViewAt(int i) { int i2 = this.mRemoveStatus; if (i2 == 1) { throw new IllegalStateException("Cannot call removeView(At) within removeView(At)"); } if (i2 == 2) { throw new IllegalStateException("Cannot call removeView(At) within removeViewIfHidden"); } try { int offset = getOffset(i); View childAt = this.mCallback.getChildAt(offset); if (childAt == null) { return; } this.mRemoveStatus = 1; this.mViewInRemoveView = childAt; if (this.mBucket.remove(offset)) { unhideViewInternal(childAt); } this.mCallback.removeViewAt(offset); } finally { this.mRemoveStatus = 0; this.mViewInRemoveView = null; } } /* JADX INFO: Access modifiers changed from: package-private */ public View getChildAt(int i) { return this.mCallback.getChildAt(getOffset(i)); } /* JADX INFO: Access modifiers changed from: package-private */ public void removeAllViewsUnfiltered() { this.mBucket.reset(); for (int size = this.mHiddenViews.size() - 1; size >= 0; size--) { this.mCallback.onLeftHiddenState(this.mHiddenViews.get(size)); this.mHiddenViews.remove(size); } this.mCallback.removeAllViews(); } /* JADX INFO: Access modifiers changed from: package-private */ public View findHiddenNonRemovedView(int i) { int size = this.mHiddenViews.size(); for (int i2 = 0; i2 < size; i2++) { View view = this.mHiddenViews.get(i2); RecyclerView.ViewHolder childViewHolder = this.mCallback.getChildViewHolder(view); if (childViewHolder.getLayoutPosition() == i && !childViewHolder.isInvalid() && !childViewHolder.isRemoved()) { return view; } } return null; } /* JADX INFO: Access modifiers changed from: package-private */ public void attachViewToParent(View view, int i, ViewGroup.LayoutParams layoutParams, boolean z) { int offset; if (i < 0) { offset = this.mCallback.getChildCount(); } else { offset = getOffset(i); } this.mBucket.insert(offset, z); if (z) { hideViewInternal(view); } this.mCallback.attachViewToParent(view, offset, layoutParams); } /* JADX INFO: Access modifiers changed from: package-private */ public int getChildCount() { return this.mCallback.getChildCount() - this.mHiddenViews.size(); } /* JADX INFO: Access modifiers changed from: package-private */ public int getUnfilteredChildCount() { return this.mCallback.getChildCount(); } /* JADX INFO: Access modifiers changed from: package-private */ public View getUnfilteredChildAt(int i) { return this.mCallback.getChildAt(i); } /* JADX INFO: Access modifiers changed from: package-private */ public void detachViewFromParent(int i) { int offset = getOffset(i); this.mBucket.remove(offset); this.mCallback.detachViewFromParent(offset); } /* JADX INFO: Access modifiers changed from: package-private */ public int indexOfChild(View view) { int indexOfChild = this.mCallback.indexOfChild(view); if (indexOfChild == -1 || this.mBucket.get(indexOfChild)) { return -1; } return indexOfChild - this.mBucket.countOnesBefore(indexOfChild); } /* JADX INFO: Access modifiers changed from: package-private */ public boolean isHidden(View view) { return this.mHiddenViews.contains(view); } /* JADX INFO: Access modifiers changed from: package-private */ public void hide(View view) { int indexOfChild = this.mCallback.indexOfChild(view); if (indexOfChild < 0) { throw new IllegalArgumentException("view is not a child, cannot hide " + view); } this.mBucket.set(indexOfChild); hideViewInternal(view); } /* JADX INFO: Access modifiers changed from: package-private */ public void unhide(View view) { int indexOfChild = this.mCallback.indexOfChild(view); if (indexOfChild < 0) { throw new IllegalArgumentException("view is not a child, cannot hide " + view); } if (!this.mBucket.get(indexOfChild)) { throw new RuntimeException("trying to unhide a view that was not hidden" + view); } this.mBucket.clear(indexOfChild); unhideViewInternal(view); } public String toString() { return this.mBucket.toString() + ", hidden list:" + this.mHiddenViews.size(); } /* JADX INFO: Access modifiers changed from: package-private */ public boolean removeViewIfHidden(View view) { int i = this.mRemoveStatus; if (i == 1) { if (this.mViewInRemoveView == view) { return false; } throw new IllegalStateException("Cannot call removeViewIfHidden within removeView(At) for a different view"); } if (i == 2) { throw new IllegalStateException("Cannot call removeViewIfHidden within removeViewIfHidden"); } try { this.mRemoveStatus = 2; int indexOfChild = this.mCallback.indexOfChild(view); if (indexOfChild == -1) { unhideViewInternal(view); return true; } if (!this.mBucket.get(indexOfChild)) { return false; } this.mBucket.remove(indexOfChild); unhideViewInternal(view); this.mCallback.removeViewAt(indexOfChild); return true; } finally { this.mRemoveStatus = 0; } } /* JADX INFO: Access modifiers changed from: package-private */ /* loaded from: classes2.dex */ public static class Bucket { static final int BITS_PER_WORD = 64; static final long LAST_BIT = Long.MIN_VALUE; long mData = 0; Bucket mNext; Bucket() { } void set(int i) { if (i < 64) { this.mData |= 1 << i; } else { ensureNext(); this.mNext.set(i - 64); } } private void ensureNext() { if (this.mNext == null) { this.mNext = new Bucket(); } } void clear(int i) { if (i < 64) { this.mData &= ~(1 << i); return; } Bucket bucket = this.mNext; if (bucket != null) { bucket.clear(i - 64); } } boolean get(int i) { if (i < 64) { return ((1 << i) & this.mData) != 0; } ensureNext(); return this.mNext.get(i - 64); } void reset() { this.mData = 0L; Bucket bucket = this.mNext; if (bucket != null) { bucket.reset(); } } void insert(int i, boolean z) { if (i >= 64) { ensureNext(); this.mNext.insert(i - 64, z); return; } long j = this.mData; boolean z2 = (Long.MIN_VALUE & j) != 0; long j2 = (1 << i) - 1; this.mData = ((j & (~j2)) << 1) | (j & j2); if (z) { set(i); } else { clear(i); } if (z2 || this.mNext != null) { ensureNext(); this.mNext.insert(0, z2); } } boolean remove(int i) { if (i >= 64) { ensureNext(); return this.mNext.remove(i - 64); } long j = 1 << i; long j2 = this.mData; boolean z = (j2 & j) != 0; long j3 = j2 & (~j); this.mData = j3; long j4 = j - 1; this.mData = (j3 & j4) | Long.rotateRight((~j4) & j3, 1); Bucket bucket = this.mNext; if (bucket != null) { if (bucket.get(0)) { set(63); } this.mNext.remove(0); } return z; } int countOnesBefore(int i) { Bucket bucket = this.mNext; if (bucket == null) { if (i >= 64) { return Long.bitCount(this.mData); } return Long.bitCount(((1 << i) - 1) & this.mData); } if (i < 64) { return Long.bitCount(((1 << i) - 1) & this.mData); } return bucket.countOnesBefore(i - 64) + Long.bitCount(this.mData); } public String toString() { if (this.mNext == null) { return Long.toBinaryString(this.mData); } return this.mNext.toString() + "xx" + Long.toBinaryString(this.mData); } } }