Rabbit-R1/android (non root)/java/sources/androidx/recyclerview/widget/AsyncListDiffer.java

182 lines
7.2 KiB
Java
Raw Normal View History

2024-05-21 21:08:36 +00:00
package androidx.recyclerview.widget;
import android.os.Handler;
import android.os.Looper;
import androidx.recyclerview.widget.AsyncDifferConfig;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.RecyclerView;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Executor;
/* loaded from: classes2.dex */
public class AsyncListDiffer<T> {
private static final Executor sMainThreadExecutor = new MainThreadExecutor();
final AsyncDifferConfig<T> mConfig;
private List<T> mList;
private final List<ListListener<T>> mListeners;
Executor mMainThreadExecutor;
int mMaxScheduledGeneration;
private List<T> mReadOnlyList;
private final ListUpdateCallback mUpdateCallback;
/* loaded from: classes2.dex */
public interface ListListener<T> {
void onCurrentListChanged(List<T> list, List<T> list2);
}
public List<T> getCurrentList() {
return this.mReadOnlyList;
}
/* loaded from: classes2.dex */
private static class MainThreadExecutor implements Executor {
final Handler mHandler = new Handler(Looper.getMainLooper());
MainThreadExecutor() {
}
@Override // java.util.concurrent.Executor
public void execute(Runnable runnable) {
this.mHandler.post(runnable);
}
}
public AsyncListDiffer(RecyclerView.Adapter adapter, DiffUtil.ItemCallback<T> itemCallback) {
this(new AdapterListUpdateCallback(adapter), new AsyncDifferConfig.Builder(itemCallback).build());
}
public AsyncListDiffer(ListUpdateCallback listUpdateCallback, AsyncDifferConfig<T> asyncDifferConfig) {
this.mListeners = new CopyOnWriteArrayList();
this.mReadOnlyList = Collections.emptyList();
this.mUpdateCallback = listUpdateCallback;
this.mConfig = asyncDifferConfig;
if (asyncDifferConfig.getMainThreadExecutor() != null) {
this.mMainThreadExecutor = asyncDifferConfig.getMainThreadExecutor();
} else {
this.mMainThreadExecutor = sMainThreadExecutor;
}
}
public void submitList(List<T> list) {
submitList(list, null);
}
public void submitList(final List<T> list, final Runnable runnable) {
final int i = this.mMaxScheduledGeneration + 1;
this.mMaxScheduledGeneration = i;
final List<T> list2 = this.mList;
if (list == list2) {
if (runnable != null) {
runnable.run();
return;
}
return;
}
List<T> list3 = this.mReadOnlyList;
if (list == null) {
int size = list2.size();
this.mList = null;
this.mReadOnlyList = Collections.emptyList();
this.mUpdateCallback.onRemoved(0, size);
onCurrentListChanged(list3, runnable);
return;
}
if (list2 == null) {
this.mList = list;
this.mReadOnlyList = Collections.unmodifiableList(list);
this.mUpdateCallback.onInserted(0, list.size());
onCurrentListChanged(list3, runnable);
return;
}
this.mConfig.getBackgroundThreadExecutor().execute(new Runnable() { // from class: androidx.recyclerview.widget.AsyncListDiffer.1
@Override // java.lang.Runnable
public void run() {
final DiffUtil.DiffResult calculateDiff = DiffUtil.calculateDiff(new DiffUtil.Callback() { // from class: androidx.recyclerview.widget.AsyncListDiffer.1.1
@Override // androidx.recyclerview.widget.DiffUtil.Callback
public int getOldListSize() {
return list2.size();
}
@Override // androidx.recyclerview.widget.DiffUtil.Callback
public int getNewListSize() {
return list.size();
}
/* JADX WARN: Multi-variable type inference failed */
@Override // androidx.recyclerview.widget.DiffUtil.Callback
public boolean areItemsTheSame(int i2, int i3) {
Object obj = list2.get(i2);
Object obj2 = list.get(i3);
if (obj == null || obj2 == null) {
return obj == null && obj2 == null;
}
return AsyncListDiffer.this.mConfig.getDiffCallback().areItemsTheSame(obj, obj2);
}
/* JADX WARN: Multi-variable type inference failed */
@Override // androidx.recyclerview.widget.DiffUtil.Callback
public boolean areContentsTheSame(int i2, int i3) {
Object obj = list2.get(i2);
Object obj2 = list.get(i3);
if (obj != null && obj2 != null) {
return AsyncListDiffer.this.mConfig.getDiffCallback().areContentsTheSame(obj, obj2);
}
if (obj == null && obj2 == null) {
return true;
}
throw new AssertionError();
}
/* JADX WARN: Multi-variable type inference failed */
@Override // androidx.recyclerview.widget.DiffUtil.Callback
public Object getChangePayload(int i2, int i3) {
Object obj = list2.get(i2);
Object obj2 = list.get(i3);
if (obj != null && obj2 != null) {
return AsyncListDiffer.this.mConfig.getDiffCallback().getChangePayload(obj, obj2);
}
throw new AssertionError();
}
});
AsyncListDiffer.this.mMainThreadExecutor.execute(new Runnable() { // from class: androidx.recyclerview.widget.AsyncListDiffer.1.2
@Override // java.lang.Runnable
public void run() {
if (AsyncListDiffer.this.mMaxScheduledGeneration == i) {
AsyncListDiffer.this.latchList(list, calculateDiff, runnable);
}
}
});
}
});
}
void latchList(List<T> list, DiffUtil.DiffResult diffResult, Runnable runnable) {
List<T> list2 = this.mReadOnlyList;
this.mList = list;
this.mReadOnlyList = Collections.unmodifiableList(list);
diffResult.dispatchUpdatesTo(this.mUpdateCallback);
onCurrentListChanged(list2, runnable);
}
private void onCurrentListChanged(List<T> list, Runnable runnable) {
Iterator<ListListener<T>> it = this.mListeners.iterator();
while (it.hasNext()) {
it.next().onCurrentListChanged(list, this.mReadOnlyList);
}
if (runnable != null) {
runnable.run();
}
}
public void addListListener(ListListener<T> listListener) {
this.mListeners.add(listListener);
}
public void removeListListener(ListListener<T> listListener) {
this.mListeners.remove(listListener);
}
}