248 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			248 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.recyclerview.widget;
 | |
| 
 | |
| import androidx.recyclerview.widget.AdapterHelper;
 | |
| import java.util.List;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| class OpReorderer {
 | |
|     final Callback mCallback;
 | |
| 
 | |
|     interface Callback {
 | |
|         AdapterHelper.UpdateOp obtainUpdateOp(int i, int i2, int i3, Object obj);
 | |
| 
 | |
|         void recycleUpdateOp(AdapterHelper.UpdateOp updateOp);
 | |
|     }
 | |
| 
 | |
|     OpReorderer(Callback callback) {
 | |
|         this.mCallback = callback;
 | |
|     }
 | |
| 
 | |
|     void reorderOps(List<AdapterHelper.UpdateOp> list) {
 | |
|         while (true) {
 | |
|             int lastMoveOutOfOrder = getLastMoveOutOfOrder(list);
 | |
|             if (lastMoveOutOfOrder == -1) {
 | |
|                 return;
 | |
|             } else {
 | |
|                 swapMoveOp(list, lastMoveOutOfOrder, lastMoveOutOfOrder + 1);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void swapMoveOp(List<AdapterHelper.UpdateOp> list, int i, int i2) {
 | |
|         AdapterHelper.UpdateOp updateOp = list.get(i);
 | |
|         AdapterHelper.UpdateOp updateOp2 = list.get(i2);
 | |
|         int i3 = updateOp2.cmd;
 | |
|         if (i3 == 1) {
 | |
|             swapMoveAdd(list, i, updateOp, i2, updateOp2);
 | |
|         } else if (i3 == 2) {
 | |
|             swapMoveRemove(list, i, updateOp, i2, updateOp2);
 | |
|         } else {
 | |
|             if (i3 != 4) {
 | |
|                 return;
 | |
|             }
 | |
|             swapMoveUpdate(list, i, updateOp, i2, updateOp2);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void swapMoveRemove(List<AdapterHelper.UpdateOp> list, int i, AdapterHelper.UpdateOp updateOp, int i2, AdapterHelper.UpdateOp updateOp2) {
 | |
|         boolean z;
 | |
|         boolean z2 = false;
 | |
|         if (updateOp.positionStart < updateOp.itemCount) {
 | |
|             if (updateOp2.positionStart == updateOp.positionStart && updateOp2.itemCount == updateOp.itemCount - updateOp.positionStart) {
 | |
|                 z = false;
 | |
|                 z2 = true;
 | |
|             } else {
 | |
|                 z = false;
 | |
|             }
 | |
|         } else if (updateOp2.positionStart == updateOp.itemCount + 1 && updateOp2.itemCount == updateOp.positionStart - updateOp.itemCount) {
 | |
|             z = true;
 | |
|             z2 = true;
 | |
|         } else {
 | |
|             z = true;
 | |
|         }
 | |
|         if (updateOp.itemCount < updateOp2.positionStart) {
 | |
|             updateOp2.positionStart--;
 | |
|         } else if (updateOp.itemCount < updateOp2.positionStart + updateOp2.itemCount) {
 | |
|             updateOp2.itemCount--;
 | |
|             updateOp.cmd = 2;
 | |
|             updateOp.itemCount = 1;
 | |
|             if (updateOp2.itemCount == 0) {
 | |
|                 list.remove(i2);
 | |
|                 this.mCallback.recycleUpdateOp(updateOp2);
 | |
|                 return;
 | |
|             }
 | |
|             return;
 | |
|         }
 | |
|         AdapterHelper.UpdateOp updateOp3 = null;
 | |
|         if (updateOp.positionStart <= updateOp2.positionStart) {
 | |
|             updateOp2.positionStart++;
 | |
|         } else if (updateOp.positionStart < updateOp2.positionStart + updateOp2.itemCount) {
 | |
|             updateOp3 = this.mCallback.obtainUpdateOp(2, updateOp.positionStart + 1, (updateOp2.positionStart + updateOp2.itemCount) - updateOp.positionStart, null);
 | |
|             updateOp2.itemCount = updateOp.positionStart - updateOp2.positionStart;
 | |
|         }
 | |
|         if (z2) {
 | |
|             list.set(i, updateOp2);
 | |
|             list.remove(i2);
 | |
|             this.mCallback.recycleUpdateOp(updateOp);
 | |
|             return;
 | |
|         }
 | |
|         if (z) {
 | |
|             if (updateOp3 != null) {
 | |
|                 if (updateOp.positionStart > updateOp3.positionStart) {
 | |
|                     updateOp.positionStart -= updateOp3.itemCount;
 | |
|                 }
 | |
|                 if (updateOp.itemCount > updateOp3.positionStart) {
 | |
|                     updateOp.itemCount -= updateOp3.itemCount;
 | |
|                 }
 | |
|             }
 | |
|             if (updateOp.positionStart > updateOp2.positionStart) {
 | |
|                 updateOp.positionStart -= updateOp2.itemCount;
 | |
|             }
 | |
|             if (updateOp.itemCount > updateOp2.positionStart) {
 | |
|                 updateOp.itemCount -= updateOp2.itemCount;
 | |
|             }
 | |
|         } else {
 | |
|             if (updateOp3 != null) {
 | |
|                 if (updateOp.positionStart >= updateOp3.positionStart) {
 | |
|                     updateOp.positionStart -= updateOp3.itemCount;
 | |
|                 }
 | |
|                 if (updateOp.itemCount >= updateOp3.positionStart) {
 | |
|                     updateOp.itemCount -= updateOp3.itemCount;
 | |
|                 }
 | |
|             }
 | |
|             if (updateOp.positionStart >= updateOp2.positionStart) {
 | |
|                 updateOp.positionStart -= updateOp2.itemCount;
 | |
|             }
 | |
|             if (updateOp.itemCount >= updateOp2.positionStart) {
 | |
|                 updateOp.itemCount -= updateOp2.itemCount;
 | |
|             }
 | |
|         }
 | |
|         list.set(i, updateOp2);
 | |
|         if (updateOp.positionStart != updateOp.itemCount) {
 | |
|             list.set(i2, updateOp);
 | |
|         } else {
 | |
|             list.remove(i2);
 | |
|         }
 | |
|         if (updateOp3 != null) {
 | |
|             list.add(i, updateOp3);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void swapMoveAdd(List<AdapterHelper.UpdateOp> list, int i, AdapterHelper.UpdateOp updateOp, int i2, AdapterHelper.UpdateOp updateOp2) {
 | |
|         int i3 = updateOp.itemCount < updateOp2.positionStart ? -1 : 0;
 | |
|         if (updateOp.positionStart < updateOp2.positionStart) {
 | |
|             i3++;
 | |
|         }
 | |
|         if (updateOp2.positionStart <= updateOp.positionStart) {
 | |
|             updateOp.positionStart += updateOp2.itemCount;
 | |
|         }
 | |
|         if (updateOp2.positionStart <= updateOp.itemCount) {
 | |
|             updateOp.itemCount += updateOp2.itemCount;
 | |
|         }
 | |
|         updateOp2.positionStart += i3;
 | |
|         list.set(i, updateOp2);
 | |
|         list.set(i2, updateOp);
 | |
|     }
 | |
| 
 | |
|     /* JADX WARN: Removed duplicated region for block: B:10:0x005d  */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:12:0x006b  */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:14:0x0070  */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:17:? A[RETURN, SYNTHETIC] */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:18:0x0061  */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:19:0x0035  */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:7:0x002f  */
 | |
|     /*
 | |
|         Code decompiled incorrectly, please refer to instructions dump.
 | |
|         To view partially-correct add '--show-bad-code' argument
 | |
|     */
 | |
|     void swapMoveUpdate(java.util.List<androidx.recyclerview.widget.AdapterHelper.UpdateOp> r8, int r9, androidx.recyclerview.widget.AdapterHelper.UpdateOp r10, int r11, androidx.recyclerview.widget.AdapterHelper.UpdateOp r12) {
 | |
|         /*
 | |
|             r7 = this;
 | |
|             int r0 = r10.itemCount
 | |
|             int r1 = r12.positionStart
 | |
|             r2 = 4
 | |
|             r3 = 1
 | |
|             r4 = 0
 | |
|             if (r0 >= r1) goto Lf
 | |
|             int r0 = r12.positionStart
 | |
|             int r0 = r0 - r3
 | |
|             r12.positionStart = r0
 | |
|             goto L28
 | |
|         Lf:
 | |
|             int r0 = r10.itemCount
 | |
|             int r1 = r12.positionStart
 | |
|             int r5 = r12.itemCount
 | |
|             int r1 = r1 + r5
 | |
|             if (r0 >= r1) goto L28
 | |
|             int r0 = r12.itemCount
 | |
|             int r0 = r0 - r3
 | |
|             r12.itemCount = r0
 | |
|             androidx.recyclerview.widget.OpReorderer$Callback r0 = r7.mCallback
 | |
|             int r1 = r10.positionStart
 | |
|             java.lang.Object r5 = r12.payload
 | |
|             androidx.recyclerview.widget.AdapterHelper$UpdateOp r0 = r0.obtainUpdateOp(r2, r1, r3, r5)
 | |
|             goto L29
 | |
|         L28:
 | |
|             r0 = r4
 | |
|         L29:
 | |
|             int r1 = r10.positionStart
 | |
|             int r5 = r12.positionStart
 | |
|             if (r1 > r5) goto L35
 | |
|             int r1 = r12.positionStart
 | |
|             int r1 = r1 + r3
 | |
|             r12.positionStart = r1
 | |
|             goto L56
 | |
|         L35:
 | |
|             int r1 = r10.positionStart
 | |
|             int r5 = r12.positionStart
 | |
|             int r6 = r12.itemCount
 | |
|             int r5 = r5 + r6
 | |
|             if (r1 >= r5) goto L56
 | |
|             int r1 = r12.positionStart
 | |
|             int r4 = r12.itemCount
 | |
|             int r1 = r1 + r4
 | |
|             int r4 = r10.positionStart
 | |
|             int r1 = r1 - r4
 | |
|             androidx.recyclerview.widget.OpReorderer$Callback r4 = r7.mCallback
 | |
|             int r5 = r10.positionStart
 | |
|             int r5 = r5 + r3
 | |
|             java.lang.Object r3 = r12.payload
 | |
|             androidx.recyclerview.widget.AdapterHelper$UpdateOp r4 = r4.obtainUpdateOp(r2, r5, r1, r3)
 | |
|             int r2 = r12.itemCount
 | |
|             int r2 = r2 - r1
 | |
|             r12.itemCount = r2
 | |
|         L56:
 | |
|             r8.set(r11, r10)
 | |
|             int r10 = r12.itemCount
 | |
|             if (r10 <= 0) goto L61
 | |
|             r8.set(r9, r12)
 | |
|             goto L69
 | |
|         L61:
 | |
|             r8.remove(r9)
 | |
|             androidx.recyclerview.widget.OpReorderer$Callback r10 = r7.mCallback
 | |
|             r10.recycleUpdateOp(r12)
 | |
|         L69:
 | |
|             if (r0 == 0) goto L6e
 | |
|             r8.add(r9, r0)
 | |
|         L6e:
 | |
|             if (r4 == 0) goto L73
 | |
|             r8.add(r9, r4)
 | |
|         L73:
 | |
|             return
 | |
|         */
 | |
|         throw new UnsupportedOperationException("Method not decompiled: androidx.recyclerview.widget.OpReorderer.swapMoveUpdate(java.util.List, int, androidx.recyclerview.widget.AdapterHelper$UpdateOp, int, androidx.recyclerview.widget.AdapterHelper$UpdateOp):void");
 | |
|     }
 | |
| 
 | |
|     private int getLastMoveOutOfOrder(List<AdapterHelper.UpdateOp> list) {
 | |
|         boolean z = false;
 | |
|         for (int size = list.size() - 1; size >= 0; size--) {
 | |
|             if (list.get(size).cmd != 8) {
 | |
|                 z = true;
 | |
|             } else if (z) {
 | |
|                 return size;
 | |
|             }
 | |
|         }
 | |
|         return -1;
 | |
|     }
 | |
| }
 |