ADD week 5
This commit is contained in:
		| @@ -0,0 +1,247 @@ | ||||
| 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; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user