210 lines
6.5 KiB
Java
210 lines
6.5 KiB
Java
package androidx.recyclerview.widget;
|
|
|
|
import androidx.collection.ArrayMap;
|
|
import androidx.collection.LongSparseArray;
|
|
import androidx.core.util.Pools$Pool;
|
|
import androidx.core.util.Pools$SimplePool;
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
/* loaded from: classes.dex */
|
|
class ViewInfoStore {
|
|
final ArrayMap<RecyclerView.ViewHolder, InfoRecord> a = new ArrayMap<>();
|
|
final LongSparseArray<RecyclerView.ViewHolder> b = new LongSparseArray<>();
|
|
|
|
interface ProcessCallback {
|
|
void a(RecyclerView.ViewHolder viewHolder);
|
|
|
|
void a(RecyclerView.ViewHolder viewHolder, RecyclerView.ItemAnimator.ItemHolderInfo itemHolderInfo, RecyclerView.ItemAnimator.ItemHolderInfo itemHolderInfo2);
|
|
|
|
void b(RecyclerView.ViewHolder viewHolder, RecyclerView.ItemAnimator.ItemHolderInfo itemHolderInfo, RecyclerView.ItemAnimator.ItemHolderInfo itemHolderInfo2);
|
|
|
|
void c(RecyclerView.ViewHolder viewHolder, RecyclerView.ItemAnimator.ItemHolderInfo itemHolderInfo, RecyclerView.ItemAnimator.ItemHolderInfo itemHolderInfo2);
|
|
}
|
|
|
|
ViewInfoStore() {
|
|
}
|
|
|
|
void a() {
|
|
this.a.clear();
|
|
this.b.a();
|
|
}
|
|
|
|
boolean b(RecyclerView.ViewHolder viewHolder) {
|
|
InfoRecord infoRecord = this.a.get(viewHolder);
|
|
return (infoRecord == null || (infoRecord.a & 1) == 0) ? false : true;
|
|
}
|
|
|
|
void c(RecyclerView.ViewHolder viewHolder, RecyclerView.ItemAnimator.ItemHolderInfo itemHolderInfo) {
|
|
InfoRecord infoRecord = this.a.get(viewHolder);
|
|
if (infoRecord == null) {
|
|
infoRecord = InfoRecord.b();
|
|
this.a.put(viewHolder, infoRecord);
|
|
}
|
|
infoRecord.b = itemHolderInfo;
|
|
infoRecord.a |= 4;
|
|
}
|
|
|
|
public void d(RecyclerView.ViewHolder viewHolder) {
|
|
g(viewHolder);
|
|
}
|
|
|
|
RecyclerView.ItemAnimator.ItemHolderInfo e(RecyclerView.ViewHolder viewHolder) {
|
|
return a(viewHolder, 8);
|
|
}
|
|
|
|
RecyclerView.ItemAnimator.ItemHolderInfo f(RecyclerView.ViewHolder viewHolder) {
|
|
return a(viewHolder, 4);
|
|
}
|
|
|
|
void g(RecyclerView.ViewHolder viewHolder) {
|
|
InfoRecord infoRecord = this.a.get(viewHolder);
|
|
if (infoRecord == null) {
|
|
return;
|
|
}
|
|
infoRecord.a &= -2;
|
|
}
|
|
|
|
void h(RecyclerView.ViewHolder viewHolder) {
|
|
int b = this.b.b() - 1;
|
|
while (true) {
|
|
if (b < 0) {
|
|
break;
|
|
}
|
|
if (viewHolder == this.b.c(b)) {
|
|
this.b.b(b);
|
|
break;
|
|
}
|
|
b--;
|
|
}
|
|
InfoRecord remove = this.a.remove(viewHolder);
|
|
if (remove != null) {
|
|
InfoRecord.a(remove);
|
|
}
|
|
}
|
|
|
|
private RecyclerView.ItemAnimator.ItemHolderInfo a(RecyclerView.ViewHolder viewHolder, int i) {
|
|
InfoRecord d;
|
|
RecyclerView.ItemAnimator.ItemHolderInfo itemHolderInfo;
|
|
int a = this.a.a(viewHolder);
|
|
if (a >= 0 && (d = this.a.d(a)) != null) {
|
|
int i2 = d.a;
|
|
if ((i2 & i) != 0) {
|
|
d.a = (~i) & i2;
|
|
if (i == 4) {
|
|
itemHolderInfo = d.b;
|
|
} else if (i == 8) {
|
|
itemHolderInfo = d.c;
|
|
} else {
|
|
throw new IllegalArgumentException("Must provide flag PRE or POST");
|
|
}
|
|
if ((d.a & 12) == 0) {
|
|
this.a.c(a);
|
|
InfoRecord.a(d);
|
|
}
|
|
return itemHolderInfo;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
void b(RecyclerView.ViewHolder viewHolder, RecyclerView.ItemAnimator.ItemHolderInfo itemHolderInfo) {
|
|
InfoRecord infoRecord = this.a.get(viewHolder);
|
|
if (infoRecord == null) {
|
|
infoRecord = InfoRecord.b();
|
|
this.a.put(viewHolder, infoRecord);
|
|
}
|
|
infoRecord.c = itemHolderInfo;
|
|
infoRecord.a |= 8;
|
|
}
|
|
|
|
static class InfoRecord {
|
|
static Pools$Pool<InfoRecord> d = new Pools$SimplePool(20);
|
|
int a;
|
|
RecyclerView.ItemAnimator.ItemHolderInfo b;
|
|
RecyclerView.ItemAnimator.ItemHolderInfo c;
|
|
|
|
private InfoRecord() {
|
|
}
|
|
|
|
static void a(InfoRecord infoRecord) {
|
|
infoRecord.a = 0;
|
|
infoRecord.b = null;
|
|
infoRecord.c = null;
|
|
d.a(infoRecord);
|
|
}
|
|
|
|
static InfoRecord b() {
|
|
InfoRecord a = d.a();
|
|
return a == null ? new InfoRecord() : a;
|
|
}
|
|
|
|
static void a() {
|
|
while (d.a() != null) {
|
|
}
|
|
}
|
|
}
|
|
|
|
boolean c(RecyclerView.ViewHolder viewHolder) {
|
|
InfoRecord infoRecord = this.a.get(viewHolder);
|
|
return (infoRecord == null || (infoRecord.a & 4) == 0) ? false : true;
|
|
}
|
|
|
|
void b() {
|
|
InfoRecord.a();
|
|
}
|
|
|
|
void a(long j, RecyclerView.ViewHolder viewHolder) {
|
|
this.b.c(j, viewHolder);
|
|
}
|
|
|
|
void a(RecyclerView.ViewHolder viewHolder, RecyclerView.ItemAnimator.ItemHolderInfo itemHolderInfo) {
|
|
InfoRecord infoRecord = this.a.get(viewHolder);
|
|
if (infoRecord == null) {
|
|
infoRecord = InfoRecord.b();
|
|
this.a.put(viewHolder, infoRecord);
|
|
}
|
|
infoRecord.a |= 2;
|
|
infoRecord.b = itemHolderInfo;
|
|
}
|
|
|
|
RecyclerView.ViewHolder a(long j) {
|
|
return this.b.b(j);
|
|
}
|
|
|
|
void a(RecyclerView.ViewHolder viewHolder) {
|
|
InfoRecord infoRecord = this.a.get(viewHolder);
|
|
if (infoRecord == null) {
|
|
infoRecord = InfoRecord.b();
|
|
this.a.put(viewHolder, infoRecord);
|
|
}
|
|
infoRecord.a |= 1;
|
|
}
|
|
|
|
void a(ProcessCallback processCallback) {
|
|
for (int size = this.a.size() - 1; size >= 0; size--) {
|
|
RecyclerView.ViewHolder b = this.a.b(size);
|
|
InfoRecord c = this.a.c(size);
|
|
int i = c.a;
|
|
if ((i & 3) == 3) {
|
|
processCallback.a(b);
|
|
} else if ((i & 1) != 0) {
|
|
RecyclerView.ItemAnimator.ItemHolderInfo itemHolderInfo = c.b;
|
|
if (itemHolderInfo == null) {
|
|
processCallback.a(b);
|
|
} else {
|
|
processCallback.b(b, itemHolderInfo, c.c);
|
|
}
|
|
} else if ((i & 14) == 14) {
|
|
processCallback.a(b, c.b, c.c);
|
|
} else if ((i & 12) == 12) {
|
|
processCallback.c(b, c.b, c.c);
|
|
} else if ((i & 4) != 0) {
|
|
processCallback.b(b, c.b, null);
|
|
} else if ((i & 8) != 0) {
|
|
processCallback.a(b, c.b, c.c);
|
|
}
|
|
InfoRecord.a(c);
|
|
}
|
|
}
|
|
}
|