117 lines
4.1 KiB
Java
117 lines
4.1 KiB
Java
package com.discord.utilities.mg_recycler;
|
|
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
import com.discord.utilities.mg_recycler.DragAndDropAdapter.Payload;
|
|
import com.discord.utilities.mg_recycler.DragAndDropHelper;
|
|
import d0.d0.f;
|
|
import d0.t.c0;
|
|
import d0.t.n;
|
|
import d0.t.o;
|
|
import d0.z.d.m;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import kotlin.ranges.IntRange;
|
|
/* compiled from: DragAndDropAdapter.kt */
|
|
public abstract class DragAndDropAdapter<T extends Payload> extends MGRecyclerAdapterSimple<T> implements DragAndDropHelper.Adapter {
|
|
private List<T> dataCopy = new ArrayList();
|
|
private Map<String, Integer> origPositions = new HashMap();
|
|
|
|
/* compiled from: DragAndDropAdapter.kt */
|
|
public interface Payload extends MGRecyclerDataPayload {
|
|
int getPosition();
|
|
}
|
|
|
|
/* JADX INFO: super call moved to the top of the method (can break code semantics) */
|
|
public DragAndDropAdapter(RecyclerView recyclerView) {
|
|
super(recyclerView, false);
|
|
m.checkNotNullParameter(recyclerView, "recyclerView");
|
|
}
|
|
|
|
private final void computeOriginalPositions(List<? extends T> list) {
|
|
this.origPositions.clear();
|
|
IntRange indices = n.getIndices(list);
|
|
ArrayList<Payload> arrayList = new ArrayList(o.collectionSizeOrDefault(indices, 10));
|
|
Iterator<Integer> it = indices.iterator();
|
|
while (it.hasNext()) {
|
|
arrayList.add((Payload) list.get(((c0) it).nextInt()));
|
|
}
|
|
for (Payload payload : arrayList) {
|
|
this.origPositions.put(payload.getKey(), Integer.valueOf(payload.getPosition()));
|
|
}
|
|
}
|
|
|
|
/* JADX DEBUG: Multi-variable search result rejected for r2v0, resolved type: java.util.List<? extends T extends com.discord.utilities.mg_recycler.DragAndDropAdapter$Payload> */
|
|
/* JADX WARN: Multi-variable type inference failed */
|
|
private final void setAndCopyData(List<? extends T> list) {
|
|
super.setData(list);
|
|
this.dataCopy = new ArrayList(list);
|
|
}
|
|
|
|
public Map<String, Integer> computeChangedPositions() {
|
|
HashMap hashMap = new HashMap();
|
|
int size = this.dataCopy.size();
|
|
for (int i = 0; i < size; i++) {
|
|
String key = this.dataCopy.get(i).getKey();
|
|
Integer num = this.origPositions.get(key);
|
|
if (num == null || i != num.intValue()) {
|
|
hashMap.put(key, Integer.valueOf(i));
|
|
}
|
|
}
|
|
return hashMap;
|
|
}
|
|
|
|
public final List<T> getDataCopy() {
|
|
return this.dataCopy;
|
|
}
|
|
|
|
public final Map<String, Integer> getOrigPositions() {
|
|
return this.origPositions;
|
|
}
|
|
|
|
public final boolean isMoveWithinBounds(int i, int i2) {
|
|
if (this.dataCopy.isEmpty()) {
|
|
return false;
|
|
}
|
|
IntRange until = f.until(0, this.dataCopy.size());
|
|
return until.contains(i) && until.contains(i2);
|
|
}
|
|
|
|
@Override // com.discord.utilities.mg_recycler.DragAndDropHelper.Adapter
|
|
public void onDrop() {
|
|
if (!this.dataCopy.isEmpty()) {
|
|
Map<String, Integer> computeChangedPositions = computeChangedPositions();
|
|
if (!computeChangedPositions.isEmpty()) {
|
|
onNewPositions(computeChangedPositions);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override // com.discord.utilities.mg_recycler.DragAndDropHelper.Adapter
|
|
public void onItemMove(int i, int i2) {
|
|
this.dataCopy.remove(i);
|
|
this.dataCopy.add(i2, this.dataCopy.get(i));
|
|
setAndCopyData(this.dataCopy);
|
|
}
|
|
|
|
public abstract void onNewPositions(Map<String, Integer> map);
|
|
|
|
@Override // com.discord.utilities.mg_recycler.MGRecyclerAdapterSimple
|
|
public void setData(List<? extends T> list) {
|
|
m.checkNotNullParameter(list, "data");
|
|
computeOriginalPositions(list);
|
|
setAndCopyData(list);
|
|
}
|
|
|
|
public final void setDataCopy(List<T> list) {
|
|
m.checkNotNullParameter(list, "<set-?>");
|
|
this.dataCopy = list;
|
|
}
|
|
|
|
public final void setOrigPositions(Map<String, Integer> map) {
|
|
m.checkNotNullParameter(map, "<set-?>");
|
|
this.origPositions = map;
|
|
}
|
|
}
|