package androidx.recyclerview.widget; import android.annotation.SuppressLint; import androidx.annotation.Nullable; import androidx.core.os.TraceCompat; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.concurrent.TimeUnit; public final class GapWorker implements Runnable { public static final ThreadLocal sGapWorker = new ThreadLocal<>(); public static Comparator sTaskComparator = new AnonymousClass1(); public long mFrameIntervalNs; public long mPostTimeNs; public ArrayList mRecyclerViews = new ArrayList<>(); private ArrayList mTasks = new ArrayList<>(); /* renamed from: androidx.recyclerview.widget.GapWorker$1 reason: invalid class name */ public static class AnonymousClass1 implements Comparator { public int compare(Task task, Task task2) { RecyclerView recyclerView = task.view; if ((recyclerView == null) != (task2.view == null)) { return recyclerView == null ? 1 : -1; } boolean z2 = task.immediate; if (z2 != task2.immediate) { return z2 ? -1 : 1; } int i = task2.viewVelocity - task.viewVelocity; if (i != 0) { return i; } int i2 = task.distanceToItem - task2.distanceToItem; if (i2 != 0) { return i2; } return 0; } } @SuppressLint({"VisibleForTests"}) public static class LayoutPrefetchRegistryImpl implements RecyclerView.LayoutManager.LayoutPrefetchRegistry { public int mCount; public int[] mPrefetchArray; public int mPrefetchDx; public int mPrefetchDy; @Override // androidx.recyclerview.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry public void addPosition(int i, int i2) { if (i < 0) { throw new IllegalArgumentException("Layout positions must be non-negative"); } else if (i2 >= 0) { int i3 = this.mCount * 2; int[] iArr = this.mPrefetchArray; if (iArr == null) { int[] iArr2 = new int[4]; this.mPrefetchArray = iArr2; Arrays.fill(iArr2, -1); } else if (i3 >= iArr.length) { int[] iArr3 = new int[(i3 * 2)]; this.mPrefetchArray = iArr3; System.arraycopy(iArr, 0, iArr3, 0, iArr.length); } int[] iArr4 = this.mPrefetchArray; iArr4[i3] = i; iArr4[i3 + 1] = i2; this.mCount++; } else { throw new IllegalArgumentException("Pixel distance must be non-negative"); } } public void clearPrefetchPositions() { int[] iArr = this.mPrefetchArray; if (iArr != null) { Arrays.fill(iArr, -1); } this.mCount = 0; } public void collectPrefetchPositionsFromView(RecyclerView recyclerView, boolean z2) { this.mCount = 0; int[] iArr = this.mPrefetchArray; if (iArr != null) { Arrays.fill(iArr, -1); } RecyclerView.LayoutManager layoutManager = recyclerView.mLayout; if (recyclerView.mAdapter != null && layoutManager != null && layoutManager.isItemPrefetchEnabled()) { if (z2) { if (!recyclerView.mAdapterHelper.hasPendingUpdates()) { layoutManager.collectInitialPrefetchPositions(recyclerView.mAdapter.getItemCount(), this); } } else if (!recyclerView.hasPendingAdapterUpdates()) { layoutManager.collectAdjacentPrefetchPositions(this.mPrefetchDx, this.mPrefetchDy, recyclerView.mState, this); } int i = this.mCount; if (i > layoutManager.mPrefetchMaxCountObserved) { layoutManager.mPrefetchMaxCountObserved = i; layoutManager.mPrefetchMaxObservedInInitialPrefetch = z2; recyclerView.mRecycler.updateViewCacheSize(); } } } public boolean lastPrefetchIncludedPosition(int i) { if (this.mPrefetchArray != null) { int i2 = this.mCount * 2; for (int i3 = 0; i3 < i2; i3 += 2) { if (this.mPrefetchArray[i3] == i) { return true; } } } return false; } public void setPrefetchVector(int i, int i2) { this.mPrefetchDx = i; this.mPrefetchDy = i2; } } public static class Task { public int distanceToItem; public boolean immediate; public int position; public RecyclerView view; public int viewVelocity; public void clear() { this.immediate = false; this.viewVelocity = 0; this.distanceToItem = 0; this.view = null; this.position = 0; } } private void buildTaskList() { Task task; int size = this.mRecyclerViews.size(); int i = 0; for (int i2 = 0; i2 < size; i2++) { RecyclerView recyclerView = this.mRecyclerViews.get(i2); if (recyclerView.getWindowVisibility() == 0) { recyclerView.mPrefetchRegistry.collectPrefetchPositionsFromView(recyclerView, false); i += recyclerView.mPrefetchRegistry.mCount; } } this.mTasks.ensureCapacity(i); int i3 = 0; for (int i4 = 0; i4 < size; i4++) { RecyclerView recyclerView2 = this.mRecyclerViews.get(i4); if (recyclerView2.getWindowVisibility() == 0) { LayoutPrefetchRegistryImpl layoutPrefetchRegistryImpl = recyclerView2.mPrefetchRegistry; int abs = Math.abs(layoutPrefetchRegistryImpl.mPrefetchDy) + Math.abs(layoutPrefetchRegistryImpl.mPrefetchDx); for (int i5 = 0; i5 < layoutPrefetchRegistryImpl.mCount * 2; i5 += 2) { if (i3 >= this.mTasks.size()) { task = new Task(); this.mTasks.add(task); } else { task = this.mTasks.get(i3); } int[] iArr = layoutPrefetchRegistryImpl.mPrefetchArray; int i6 = iArr[i5 + 1]; task.immediate = i6 <= abs; task.viewVelocity = abs; task.distanceToItem = i6; task.view = recyclerView2; task.position = iArr[i5]; i3++; } } } Collections.sort(this.mTasks, sTaskComparator); } private void flushTaskWithDeadline(Task task, long j) { RecyclerView.ViewHolder prefetchPositionWithDeadline = prefetchPositionWithDeadline(task.view, task.position, task.immediate ? Long.MAX_VALUE : j); if (prefetchPositionWithDeadline != null && prefetchPositionWithDeadline.mNestedRecyclerView != null && prefetchPositionWithDeadline.isBound() && !prefetchPositionWithDeadline.isInvalid()) { prefetchInnerRecyclerViewWithDeadline(prefetchPositionWithDeadline.mNestedRecyclerView.get(), j); } } private void flushTasksWithDeadline(long j) { for (int i = 0; i < this.mTasks.size(); i++) { Task task = this.mTasks.get(i); if (task.view != null) { flushTaskWithDeadline(task, j); task.clear(); } else { return; } } } public static boolean isPrefetchPositionAttached(RecyclerView recyclerView, int i) { int unfilteredChildCount = recyclerView.mChildHelper.getUnfilteredChildCount(); for (int i2 = 0; i2 < unfilteredChildCount; i2++) { RecyclerView.ViewHolder childViewHolderInt = RecyclerView.getChildViewHolderInt(recyclerView.mChildHelper.getUnfilteredChildAt(i2)); if (childViewHolderInt.mPosition == i && !childViewHolderInt.isInvalid()) { return true; } } return false; } private void prefetchInnerRecyclerViewWithDeadline(@Nullable RecyclerView recyclerView, long j) { if (recyclerView != null) { if (recyclerView.mDataSetHasChangedAfterLayout && recyclerView.mChildHelper.getUnfilteredChildCount() != 0) { recyclerView.removeAndRecycleViews(); } LayoutPrefetchRegistryImpl layoutPrefetchRegistryImpl = recyclerView.mPrefetchRegistry; layoutPrefetchRegistryImpl.collectPrefetchPositionsFromView(recyclerView, true); if (layoutPrefetchRegistryImpl.mCount != 0) { try { TraceCompat.beginSection("RV Nested Prefetch"); recyclerView.mState.prepareForNestedPrefetch(recyclerView.mAdapter); for (int i = 0; i < layoutPrefetchRegistryImpl.mCount * 2; i += 2) { prefetchPositionWithDeadline(recyclerView, layoutPrefetchRegistryImpl.mPrefetchArray[i], j); } } finally { TraceCompat.endSection(); } } } } private RecyclerView.ViewHolder prefetchPositionWithDeadline(RecyclerView recyclerView, int i, long j) { if (isPrefetchPositionAttached(recyclerView, i)) { return null; } RecyclerView.Recycler recycler = recyclerView.mRecycler; boolean z2 = false; try { recyclerView.onEnterLayoutOrScroll(); RecyclerView.ViewHolder tryGetViewHolderForPositionByDeadline = recycler.tryGetViewHolderForPositionByDeadline(i, false, j); if (tryGetViewHolderForPositionByDeadline != null) { if (!tryGetViewHolderForPositionByDeadline.isBound() || tryGetViewHolderForPositionByDeadline.isInvalid()) { recycler.addViewHolderToRecycledViewPool(tryGetViewHolderForPositionByDeadline, false); } else { recycler.recycleView(tryGetViewHolderForPositionByDeadline.itemView); } } return tryGetViewHolderForPositionByDeadline; } finally { recyclerView.onExitLayoutOrScroll(z2); } } public void add(RecyclerView recyclerView) { this.mRecyclerViews.add(recyclerView); } public void postFromTraversal(RecyclerView recyclerView, int i, int i2) { if (recyclerView.isAttachedToWindow() && this.mPostTimeNs == 0) { this.mPostTimeNs = recyclerView.getNanoTime(); recyclerView.post(this); } recyclerView.mPrefetchRegistry.setPrefetchVector(i, i2); } public void prefetch(long j) { buildTaskList(); flushTasksWithDeadline(j); } public void remove(RecyclerView recyclerView) { this.mRecyclerViews.remove(recyclerView); } @Override // java.lang.Runnable public void run() { long j = 0; try { TraceCompat.beginSection("RV Prefetch"); if (!this.mRecyclerViews.isEmpty()) { int size = this.mRecyclerViews.size(); long j2 = 0; for (int i = 0; i < size; i++) { RecyclerView recyclerView = this.mRecyclerViews.get(i); if (recyclerView.getWindowVisibility() == 0) { j2 = Math.max(recyclerView.getDrawingTime(), j2); } } if (j2 != 0) { prefetch(TimeUnit.MILLISECONDS.toNanos(j2) + this.mFrameIntervalNs); this.mPostTimeNs = 0; TraceCompat.endSection(); } } } finally { this.mPostTimeNs = j; TraceCompat.endSection(); } } }