566 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			566 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.recyclerview.widget;
 | |
| 
 | |
| import android.animation.Animator;
 | |
| import android.animation.AnimatorListenerAdapter;
 | |
| import android.animation.TimeInterpolator;
 | |
| import android.animation.ValueAnimator;
 | |
| import android.view.View;
 | |
| import android.view.ViewPropertyAnimator;
 | |
| import androidx.core.view.ViewCompat;
 | |
| import androidx.recyclerview.widget.RecyclerView;
 | |
| import java.util.ArrayList;
 | |
| import java.util.Iterator;
 | |
| import java.util.List;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class DefaultItemAnimator extends SimpleItemAnimator {
 | |
|     private static final boolean DEBUG = false;
 | |
|     private static TimeInterpolator sDefaultInterpolator;
 | |
|     private ArrayList<RecyclerView.ViewHolder> mPendingRemovals = new ArrayList<>();
 | |
|     private ArrayList<RecyclerView.ViewHolder> mPendingAdditions = new ArrayList<>();
 | |
|     private ArrayList<MoveInfo> mPendingMoves = new ArrayList<>();
 | |
|     private ArrayList<ChangeInfo> mPendingChanges = new ArrayList<>();
 | |
|     ArrayList<ArrayList<RecyclerView.ViewHolder>> mAdditionsList = new ArrayList<>();
 | |
|     ArrayList<ArrayList<MoveInfo>> mMovesList = new ArrayList<>();
 | |
|     ArrayList<ArrayList<ChangeInfo>> mChangesList = new ArrayList<>();
 | |
|     ArrayList<RecyclerView.ViewHolder> mAddAnimations = new ArrayList<>();
 | |
|     ArrayList<RecyclerView.ViewHolder> mMoveAnimations = new ArrayList<>();
 | |
|     ArrayList<RecyclerView.ViewHolder> mRemoveAnimations = new ArrayList<>();
 | |
|     ArrayList<RecyclerView.ViewHolder> mChangeAnimations = new ArrayList<>();
 | |
| 
 | |
|     private static class MoveInfo {
 | |
|         public int fromX;
 | |
|         public int fromY;
 | |
|         public RecyclerView.ViewHolder holder;
 | |
|         public int toX;
 | |
|         public int toY;
 | |
| 
 | |
|         MoveInfo(RecyclerView.ViewHolder viewHolder, int i, int i2, int i3, int i4) {
 | |
|             this.holder = viewHolder;
 | |
|             this.fromX = i;
 | |
|             this.fromY = i2;
 | |
|             this.toX = i3;
 | |
|             this.toY = i4;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static class ChangeInfo {
 | |
|         public int fromX;
 | |
|         public int fromY;
 | |
|         public RecyclerView.ViewHolder newHolder;
 | |
|         public RecyclerView.ViewHolder oldHolder;
 | |
|         public int toX;
 | |
|         public int toY;
 | |
| 
 | |
|         private ChangeInfo(RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder viewHolder2) {
 | |
|             this.oldHolder = viewHolder;
 | |
|             this.newHolder = viewHolder2;
 | |
|         }
 | |
| 
 | |
|         ChangeInfo(RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder viewHolder2, int i, int i2, int i3, int i4) {
 | |
|             this(viewHolder, viewHolder2);
 | |
|             this.fromX = i;
 | |
|             this.fromY = i2;
 | |
|             this.toX = i3;
 | |
|             this.toY = i4;
 | |
|         }
 | |
| 
 | |
|         public String toString() {
 | |
|             return "ChangeInfo{oldHolder=" + this.oldHolder + ", newHolder=" + this.newHolder + ", fromX=" + this.fromX + ", fromY=" + this.fromY + ", toX=" + this.toX + ", toY=" + this.toY + '}';
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.recyclerview.widget.RecyclerView.ItemAnimator
 | |
|     public void runPendingAnimations() {
 | |
|         boolean z = !this.mPendingRemovals.isEmpty();
 | |
|         boolean z2 = !this.mPendingMoves.isEmpty();
 | |
|         boolean z3 = !this.mPendingChanges.isEmpty();
 | |
|         boolean z4 = !this.mPendingAdditions.isEmpty();
 | |
|         if (z || z2 || z4 || z3) {
 | |
|             Iterator<RecyclerView.ViewHolder> it = this.mPendingRemovals.iterator();
 | |
|             while (it.hasNext()) {
 | |
|                 animateRemoveImpl(it.next());
 | |
|             }
 | |
|             this.mPendingRemovals.clear();
 | |
|             if (z2) {
 | |
|                 final ArrayList<MoveInfo> arrayList = new ArrayList<>();
 | |
|                 arrayList.addAll(this.mPendingMoves);
 | |
|                 this.mMovesList.add(arrayList);
 | |
|                 this.mPendingMoves.clear();
 | |
|                 Runnable runnable = new Runnable() { // from class: androidx.recyclerview.widget.DefaultItemAnimator.1
 | |
|                     @Override // java.lang.Runnable
 | |
|                     public void run() {
 | |
|                         Iterator it2 = arrayList.iterator();
 | |
|                         while (it2.hasNext()) {
 | |
|                             MoveInfo moveInfo = (MoveInfo) it2.next();
 | |
|                             DefaultItemAnimator.this.animateMoveImpl(moveInfo.holder, moveInfo.fromX, moveInfo.fromY, moveInfo.toX, moveInfo.toY);
 | |
|                         }
 | |
|                         arrayList.clear();
 | |
|                         DefaultItemAnimator.this.mMovesList.remove(arrayList);
 | |
|                     }
 | |
|                 };
 | |
|                 if (z) {
 | |
|                     ViewCompat.postOnAnimationDelayed(arrayList.get(0).holder.itemView, runnable, getRemoveDuration());
 | |
|                 } else {
 | |
|                     runnable.run();
 | |
|                 }
 | |
|             }
 | |
|             if (z3) {
 | |
|                 final ArrayList<ChangeInfo> arrayList2 = new ArrayList<>();
 | |
|                 arrayList2.addAll(this.mPendingChanges);
 | |
|                 this.mChangesList.add(arrayList2);
 | |
|                 this.mPendingChanges.clear();
 | |
|                 Runnable runnable2 = new Runnable() { // from class: androidx.recyclerview.widget.DefaultItemAnimator.2
 | |
|                     @Override // java.lang.Runnable
 | |
|                     public void run() {
 | |
|                         Iterator it2 = arrayList2.iterator();
 | |
|                         while (it2.hasNext()) {
 | |
|                             DefaultItemAnimator.this.animateChangeImpl((ChangeInfo) it2.next());
 | |
|                         }
 | |
|                         arrayList2.clear();
 | |
|                         DefaultItemAnimator.this.mChangesList.remove(arrayList2);
 | |
|                     }
 | |
|                 };
 | |
|                 if (z) {
 | |
|                     ViewCompat.postOnAnimationDelayed(arrayList2.get(0).oldHolder.itemView, runnable2, getRemoveDuration());
 | |
|                 } else {
 | |
|                     runnable2.run();
 | |
|                 }
 | |
|             }
 | |
|             if (z4) {
 | |
|                 final ArrayList<RecyclerView.ViewHolder> arrayList3 = new ArrayList<>();
 | |
|                 arrayList3.addAll(this.mPendingAdditions);
 | |
|                 this.mAdditionsList.add(arrayList3);
 | |
|                 this.mPendingAdditions.clear();
 | |
|                 Runnable runnable3 = new Runnable() { // from class: androidx.recyclerview.widget.DefaultItemAnimator.3
 | |
|                     @Override // java.lang.Runnable
 | |
|                     public void run() {
 | |
|                         Iterator it2 = arrayList3.iterator();
 | |
|                         while (it2.hasNext()) {
 | |
|                             DefaultItemAnimator.this.animateAddImpl((RecyclerView.ViewHolder) it2.next());
 | |
|                         }
 | |
|                         arrayList3.clear();
 | |
|                         DefaultItemAnimator.this.mAdditionsList.remove(arrayList3);
 | |
|                     }
 | |
|                 };
 | |
|                 if (z || z2 || z3) {
 | |
|                     ViewCompat.postOnAnimationDelayed(arrayList3.get(0).itemView, runnable3, (z ? getRemoveDuration() : 0L) + Math.max(z2 ? getMoveDuration() : 0L, z3 ? getChangeDuration() : 0L));
 | |
|                 } else {
 | |
|                     runnable3.run();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.recyclerview.widget.SimpleItemAnimator
 | |
|     public boolean animateRemove(RecyclerView.ViewHolder viewHolder) {
 | |
|         resetAnimation(viewHolder);
 | |
|         this.mPendingRemovals.add(viewHolder);
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     private void animateRemoveImpl(final RecyclerView.ViewHolder viewHolder) {
 | |
|         final View view = viewHolder.itemView;
 | |
|         final ViewPropertyAnimator animate = view.animate();
 | |
|         this.mRemoveAnimations.add(viewHolder);
 | |
|         animate.setDuration(getRemoveDuration()).alpha(0.0f).setListener(new AnimatorListenerAdapter() { // from class: androidx.recyclerview.widget.DefaultItemAnimator.4
 | |
|             @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
 | |
|             public void onAnimationStart(Animator animator) {
 | |
|                 DefaultItemAnimator.this.dispatchRemoveStarting(viewHolder);
 | |
|             }
 | |
| 
 | |
|             @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
 | |
|             public void onAnimationEnd(Animator animator) {
 | |
|                 animate.setListener(null);
 | |
|                 view.setAlpha(1.0f);
 | |
|                 DefaultItemAnimator.this.dispatchRemoveFinished(viewHolder);
 | |
|                 DefaultItemAnimator.this.mRemoveAnimations.remove(viewHolder);
 | |
|                 DefaultItemAnimator.this.dispatchFinishedWhenDone();
 | |
|             }
 | |
|         }).start();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.recyclerview.widget.SimpleItemAnimator
 | |
|     public boolean animateAdd(RecyclerView.ViewHolder viewHolder) {
 | |
|         resetAnimation(viewHolder);
 | |
|         viewHolder.itemView.setAlpha(0.0f);
 | |
|         this.mPendingAdditions.add(viewHolder);
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     void animateAddImpl(final RecyclerView.ViewHolder viewHolder) {
 | |
|         final View view = viewHolder.itemView;
 | |
|         final ViewPropertyAnimator animate = view.animate();
 | |
|         this.mAddAnimations.add(viewHolder);
 | |
|         animate.alpha(1.0f).setDuration(getAddDuration()).setListener(new AnimatorListenerAdapter() { // from class: androidx.recyclerview.widget.DefaultItemAnimator.5
 | |
|             @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
 | |
|             public void onAnimationStart(Animator animator) {
 | |
|                 DefaultItemAnimator.this.dispatchAddStarting(viewHolder);
 | |
|             }
 | |
| 
 | |
|             @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
 | |
|             public void onAnimationCancel(Animator animator) {
 | |
|                 view.setAlpha(1.0f);
 | |
|             }
 | |
| 
 | |
|             @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
 | |
|             public void onAnimationEnd(Animator animator) {
 | |
|                 animate.setListener(null);
 | |
|                 DefaultItemAnimator.this.dispatchAddFinished(viewHolder);
 | |
|                 DefaultItemAnimator.this.mAddAnimations.remove(viewHolder);
 | |
|                 DefaultItemAnimator.this.dispatchFinishedWhenDone();
 | |
|             }
 | |
|         }).start();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.recyclerview.widget.SimpleItemAnimator
 | |
|     public boolean animateMove(RecyclerView.ViewHolder viewHolder, int i, int i2, int i3, int i4) {
 | |
|         View view = viewHolder.itemView;
 | |
|         int translationX = i + ((int) viewHolder.itemView.getTranslationX());
 | |
|         int translationY = i2 + ((int) viewHolder.itemView.getTranslationY());
 | |
|         resetAnimation(viewHolder);
 | |
|         int i5 = i3 - translationX;
 | |
|         int i6 = i4 - translationY;
 | |
|         if (i5 == 0 && i6 == 0) {
 | |
|             dispatchMoveFinished(viewHolder);
 | |
|             return false;
 | |
|         }
 | |
|         if (i5 != 0) {
 | |
|             view.setTranslationX(-i5);
 | |
|         }
 | |
|         if (i6 != 0) {
 | |
|             view.setTranslationY(-i6);
 | |
|         }
 | |
|         this.mPendingMoves.add(new MoveInfo(viewHolder, translationX, translationY, i3, i4));
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     void animateMoveImpl(final RecyclerView.ViewHolder viewHolder, int i, int i2, int i3, int i4) {
 | |
|         final View view = viewHolder.itemView;
 | |
|         final int i5 = i3 - i;
 | |
|         final int i6 = i4 - i2;
 | |
|         if (i5 != 0) {
 | |
|             view.animate().translationX(0.0f);
 | |
|         }
 | |
|         if (i6 != 0) {
 | |
|             view.animate().translationY(0.0f);
 | |
|         }
 | |
|         final ViewPropertyAnimator animate = view.animate();
 | |
|         this.mMoveAnimations.add(viewHolder);
 | |
|         animate.setDuration(getMoveDuration()).setListener(new AnimatorListenerAdapter() { // from class: androidx.recyclerview.widget.DefaultItemAnimator.6
 | |
|             @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
 | |
|             public void onAnimationStart(Animator animator) {
 | |
|                 DefaultItemAnimator.this.dispatchMoveStarting(viewHolder);
 | |
|             }
 | |
| 
 | |
|             @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
 | |
|             public void onAnimationCancel(Animator animator) {
 | |
|                 if (i5 != 0) {
 | |
|                     view.setTranslationX(0.0f);
 | |
|                 }
 | |
|                 if (i6 != 0) {
 | |
|                     view.setTranslationY(0.0f);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
 | |
|             public void onAnimationEnd(Animator animator) {
 | |
|                 animate.setListener(null);
 | |
|                 DefaultItemAnimator.this.dispatchMoveFinished(viewHolder);
 | |
|                 DefaultItemAnimator.this.mMoveAnimations.remove(viewHolder);
 | |
|                 DefaultItemAnimator.this.dispatchFinishedWhenDone();
 | |
|             }
 | |
|         }).start();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.recyclerview.widget.SimpleItemAnimator
 | |
|     public boolean animateChange(RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder viewHolder2, int i, int i2, int i3, int i4) {
 | |
|         if (viewHolder == viewHolder2) {
 | |
|             return animateMove(viewHolder, i, i2, i3, i4);
 | |
|         }
 | |
|         float translationX = viewHolder.itemView.getTranslationX();
 | |
|         float translationY = viewHolder.itemView.getTranslationY();
 | |
|         float alpha = viewHolder.itemView.getAlpha();
 | |
|         resetAnimation(viewHolder);
 | |
|         int i5 = (int) ((i3 - i) - translationX);
 | |
|         int i6 = (int) ((i4 - i2) - translationY);
 | |
|         viewHolder.itemView.setTranslationX(translationX);
 | |
|         viewHolder.itemView.setTranslationY(translationY);
 | |
|         viewHolder.itemView.setAlpha(alpha);
 | |
|         if (viewHolder2 != null) {
 | |
|             resetAnimation(viewHolder2);
 | |
|             viewHolder2.itemView.setTranslationX(-i5);
 | |
|             viewHolder2.itemView.setTranslationY(-i6);
 | |
|             viewHolder2.itemView.setAlpha(0.0f);
 | |
|         }
 | |
|         this.mPendingChanges.add(new ChangeInfo(viewHolder, viewHolder2, i, i2, i3, i4));
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     void animateChangeImpl(final ChangeInfo changeInfo) {
 | |
|         RecyclerView.ViewHolder viewHolder = changeInfo.oldHolder;
 | |
|         final View view = viewHolder == null ? null : viewHolder.itemView;
 | |
|         RecyclerView.ViewHolder viewHolder2 = changeInfo.newHolder;
 | |
|         final View view2 = viewHolder2 != null ? viewHolder2.itemView : null;
 | |
|         if (view != null) {
 | |
|             final ViewPropertyAnimator duration = view.animate().setDuration(getChangeDuration());
 | |
|             this.mChangeAnimations.add(changeInfo.oldHolder);
 | |
|             duration.translationX(changeInfo.toX - changeInfo.fromX);
 | |
|             duration.translationY(changeInfo.toY - changeInfo.fromY);
 | |
|             duration.alpha(0.0f).setListener(new AnimatorListenerAdapter() { // from class: androidx.recyclerview.widget.DefaultItemAnimator.7
 | |
|                 @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
 | |
|                 public void onAnimationStart(Animator animator) {
 | |
|                     DefaultItemAnimator.this.dispatchChangeStarting(changeInfo.oldHolder, true);
 | |
|                 }
 | |
| 
 | |
|                 @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
 | |
|                 public void onAnimationEnd(Animator animator) {
 | |
|                     duration.setListener(null);
 | |
|                     view.setAlpha(1.0f);
 | |
|                     view.setTranslationX(0.0f);
 | |
|                     view.setTranslationY(0.0f);
 | |
|                     DefaultItemAnimator.this.dispatchChangeFinished(changeInfo.oldHolder, true);
 | |
|                     DefaultItemAnimator.this.mChangeAnimations.remove(changeInfo.oldHolder);
 | |
|                     DefaultItemAnimator.this.dispatchFinishedWhenDone();
 | |
|                 }
 | |
|             }).start();
 | |
|         }
 | |
|         if (view2 != null) {
 | |
|             final ViewPropertyAnimator animate = view2.animate();
 | |
|             this.mChangeAnimations.add(changeInfo.newHolder);
 | |
|             animate.translationX(0.0f).translationY(0.0f).setDuration(getChangeDuration()).alpha(1.0f).setListener(new AnimatorListenerAdapter() { // from class: androidx.recyclerview.widget.DefaultItemAnimator.8
 | |
|                 @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
 | |
|                 public void onAnimationStart(Animator animator) {
 | |
|                     DefaultItemAnimator.this.dispatchChangeStarting(changeInfo.newHolder, false);
 | |
|                 }
 | |
| 
 | |
|                 @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
 | |
|                 public void onAnimationEnd(Animator animator) {
 | |
|                     animate.setListener(null);
 | |
|                     view2.setAlpha(1.0f);
 | |
|                     view2.setTranslationX(0.0f);
 | |
|                     view2.setTranslationY(0.0f);
 | |
|                     DefaultItemAnimator.this.dispatchChangeFinished(changeInfo.newHolder, false);
 | |
|                     DefaultItemAnimator.this.mChangeAnimations.remove(changeInfo.newHolder);
 | |
|                     DefaultItemAnimator.this.dispatchFinishedWhenDone();
 | |
|                 }
 | |
|             }).start();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void endChangeAnimation(List<ChangeInfo> list, RecyclerView.ViewHolder viewHolder) {
 | |
|         for (int size = list.size() - 1; size >= 0; size--) {
 | |
|             ChangeInfo changeInfo = list.get(size);
 | |
|             if (endChangeAnimationIfNecessary(changeInfo, viewHolder) && changeInfo.oldHolder == null && changeInfo.newHolder == null) {
 | |
|                 list.remove(changeInfo);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void endChangeAnimationIfNecessary(ChangeInfo changeInfo) {
 | |
|         if (changeInfo.oldHolder != null) {
 | |
|             endChangeAnimationIfNecessary(changeInfo, changeInfo.oldHolder);
 | |
|         }
 | |
|         if (changeInfo.newHolder != null) {
 | |
|             endChangeAnimationIfNecessary(changeInfo, changeInfo.newHolder);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private boolean endChangeAnimationIfNecessary(ChangeInfo changeInfo, RecyclerView.ViewHolder viewHolder) {
 | |
|         boolean z = false;
 | |
|         if (changeInfo.newHolder == viewHolder) {
 | |
|             changeInfo.newHolder = null;
 | |
|         } else {
 | |
|             if (changeInfo.oldHolder != viewHolder) {
 | |
|                 return false;
 | |
|             }
 | |
|             changeInfo.oldHolder = null;
 | |
|             z = true;
 | |
|         }
 | |
|         viewHolder.itemView.setAlpha(1.0f);
 | |
|         viewHolder.itemView.setTranslationX(0.0f);
 | |
|         viewHolder.itemView.setTranslationY(0.0f);
 | |
|         dispatchChangeFinished(viewHolder, z);
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.recyclerview.widget.RecyclerView.ItemAnimator
 | |
|     public void endAnimation(RecyclerView.ViewHolder viewHolder) {
 | |
|         View view = viewHolder.itemView;
 | |
|         view.animate().cancel();
 | |
|         int size = this.mPendingMoves.size();
 | |
|         while (true) {
 | |
|             size--;
 | |
|             if (size < 0) {
 | |
|                 break;
 | |
|             }
 | |
|             if (this.mPendingMoves.get(size).holder == viewHolder) {
 | |
|                 view.setTranslationY(0.0f);
 | |
|                 view.setTranslationX(0.0f);
 | |
|                 dispatchMoveFinished(viewHolder);
 | |
|                 this.mPendingMoves.remove(size);
 | |
|             }
 | |
|         }
 | |
|         endChangeAnimation(this.mPendingChanges, viewHolder);
 | |
|         if (this.mPendingRemovals.remove(viewHolder)) {
 | |
|             view.setAlpha(1.0f);
 | |
|             dispatchRemoveFinished(viewHolder);
 | |
|         }
 | |
|         if (this.mPendingAdditions.remove(viewHolder)) {
 | |
|             view.setAlpha(1.0f);
 | |
|             dispatchAddFinished(viewHolder);
 | |
|         }
 | |
|         for (int size2 = this.mChangesList.size() - 1; size2 >= 0; size2--) {
 | |
|             ArrayList<ChangeInfo> arrayList = this.mChangesList.get(size2);
 | |
|             endChangeAnimation(arrayList, viewHolder);
 | |
|             if (arrayList.isEmpty()) {
 | |
|                 this.mChangesList.remove(size2);
 | |
|             }
 | |
|         }
 | |
|         for (int size3 = this.mMovesList.size() - 1; size3 >= 0; size3--) {
 | |
|             ArrayList<MoveInfo> arrayList2 = this.mMovesList.get(size3);
 | |
|             int size4 = arrayList2.size() - 1;
 | |
|             while (true) {
 | |
|                 if (size4 < 0) {
 | |
|                     break;
 | |
|                 }
 | |
|                 if (arrayList2.get(size4).holder == viewHolder) {
 | |
|                     view.setTranslationY(0.0f);
 | |
|                     view.setTranslationX(0.0f);
 | |
|                     dispatchMoveFinished(viewHolder);
 | |
|                     arrayList2.remove(size4);
 | |
|                     if (arrayList2.isEmpty()) {
 | |
|                         this.mMovesList.remove(size3);
 | |
|                     }
 | |
|                 } else {
 | |
|                     size4--;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         for (int size5 = this.mAdditionsList.size() - 1; size5 >= 0; size5--) {
 | |
|             ArrayList<RecyclerView.ViewHolder> arrayList3 = this.mAdditionsList.get(size5);
 | |
|             if (arrayList3.remove(viewHolder)) {
 | |
|                 view.setAlpha(1.0f);
 | |
|                 dispatchAddFinished(viewHolder);
 | |
|                 if (arrayList3.isEmpty()) {
 | |
|                     this.mAdditionsList.remove(size5);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         this.mRemoveAnimations.remove(viewHolder);
 | |
|         this.mAddAnimations.remove(viewHolder);
 | |
|         this.mChangeAnimations.remove(viewHolder);
 | |
|         this.mMoveAnimations.remove(viewHolder);
 | |
|         dispatchFinishedWhenDone();
 | |
|     }
 | |
| 
 | |
|     private void resetAnimation(RecyclerView.ViewHolder viewHolder) {
 | |
|         if (sDefaultInterpolator == null) {
 | |
|             sDefaultInterpolator = new ValueAnimator().getInterpolator();
 | |
|         }
 | |
|         viewHolder.itemView.animate().setInterpolator(sDefaultInterpolator);
 | |
|         endAnimation(viewHolder);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.recyclerview.widget.RecyclerView.ItemAnimator
 | |
|     public boolean isRunning() {
 | |
|         return (this.mPendingAdditions.isEmpty() && this.mPendingChanges.isEmpty() && this.mPendingMoves.isEmpty() && this.mPendingRemovals.isEmpty() && this.mMoveAnimations.isEmpty() && this.mRemoveAnimations.isEmpty() && this.mAddAnimations.isEmpty() && this.mChangeAnimations.isEmpty() && this.mMovesList.isEmpty() && this.mAdditionsList.isEmpty() && this.mChangesList.isEmpty()) ? false : true;
 | |
|     }
 | |
| 
 | |
|     void dispatchFinishedWhenDone() {
 | |
|         if (isRunning()) {
 | |
|             return;
 | |
|         }
 | |
|         dispatchAnimationsFinished();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.recyclerview.widget.RecyclerView.ItemAnimator
 | |
|     public void endAnimations() {
 | |
|         int size = this.mPendingMoves.size();
 | |
|         while (true) {
 | |
|             size--;
 | |
|             if (size < 0) {
 | |
|                 break;
 | |
|             }
 | |
|             MoveInfo moveInfo = this.mPendingMoves.get(size);
 | |
|             View view = moveInfo.holder.itemView;
 | |
|             view.setTranslationY(0.0f);
 | |
|             view.setTranslationX(0.0f);
 | |
|             dispatchMoveFinished(moveInfo.holder);
 | |
|             this.mPendingMoves.remove(size);
 | |
|         }
 | |
|         for (int size2 = this.mPendingRemovals.size() - 1; size2 >= 0; size2--) {
 | |
|             dispatchRemoveFinished(this.mPendingRemovals.get(size2));
 | |
|             this.mPendingRemovals.remove(size2);
 | |
|         }
 | |
|         int size3 = this.mPendingAdditions.size();
 | |
|         while (true) {
 | |
|             size3--;
 | |
|             if (size3 < 0) {
 | |
|                 break;
 | |
|             }
 | |
|             RecyclerView.ViewHolder viewHolder = this.mPendingAdditions.get(size3);
 | |
|             viewHolder.itemView.setAlpha(1.0f);
 | |
|             dispatchAddFinished(viewHolder);
 | |
|             this.mPendingAdditions.remove(size3);
 | |
|         }
 | |
|         for (int size4 = this.mPendingChanges.size() - 1; size4 >= 0; size4--) {
 | |
|             endChangeAnimationIfNecessary(this.mPendingChanges.get(size4));
 | |
|         }
 | |
|         this.mPendingChanges.clear();
 | |
|         if (isRunning()) {
 | |
|             for (int size5 = this.mMovesList.size() - 1; size5 >= 0; size5--) {
 | |
|                 ArrayList<MoveInfo> arrayList = this.mMovesList.get(size5);
 | |
|                 for (int size6 = arrayList.size() - 1; size6 >= 0; size6--) {
 | |
|                     MoveInfo moveInfo2 = arrayList.get(size6);
 | |
|                     View view2 = moveInfo2.holder.itemView;
 | |
|                     view2.setTranslationY(0.0f);
 | |
|                     view2.setTranslationX(0.0f);
 | |
|                     dispatchMoveFinished(moveInfo2.holder);
 | |
|                     arrayList.remove(size6);
 | |
|                     if (arrayList.isEmpty()) {
 | |
|                         this.mMovesList.remove(arrayList);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             for (int size7 = this.mAdditionsList.size() - 1; size7 >= 0; size7--) {
 | |
|                 ArrayList<RecyclerView.ViewHolder> arrayList2 = this.mAdditionsList.get(size7);
 | |
|                 for (int size8 = arrayList2.size() - 1; size8 >= 0; size8--) {
 | |
|                     RecyclerView.ViewHolder viewHolder2 = arrayList2.get(size8);
 | |
|                     viewHolder2.itemView.setAlpha(1.0f);
 | |
|                     dispatchAddFinished(viewHolder2);
 | |
|                     arrayList2.remove(size8);
 | |
|                     if (arrayList2.isEmpty()) {
 | |
|                         this.mAdditionsList.remove(arrayList2);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             for (int size9 = this.mChangesList.size() - 1; size9 >= 0; size9--) {
 | |
|                 ArrayList<ChangeInfo> arrayList3 = this.mChangesList.get(size9);
 | |
|                 for (int size10 = arrayList3.size() - 1; size10 >= 0; size10--) {
 | |
|                     endChangeAnimationIfNecessary(arrayList3.get(size10));
 | |
|                     if (arrayList3.isEmpty()) {
 | |
|                         this.mChangesList.remove(arrayList3);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             cancelAll(this.mRemoveAnimations);
 | |
|             cancelAll(this.mMoveAnimations);
 | |
|             cancelAll(this.mAddAnimations);
 | |
|             cancelAll(this.mChangeAnimations);
 | |
|             dispatchAnimationsFinished();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void cancelAll(List<RecyclerView.ViewHolder> list) {
 | |
|         for (int size = list.size() - 1; size >= 0; size--) {
 | |
|             list.get(size).itemView.animate().cancel();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.recyclerview.widget.RecyclerView.ItemAnimator
 | |
|     public boolean canReuseUpdatedViewHolder(RecyclerView.ViewHolder viewHolder, List<Object> list) {
 | |
|         return !list.isEmpty() || super.canReuseUpdatedViewHolder(viewHolder, list);
 | |
|     }
 | |
| }
 |