240 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			240 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.fragment.app;
 | |
| 
 | |
| import android.animation.Animator;
 | |
| import android.animation.AnimatorInflater;
 | |
| import android.animation.AnimatorListenerAdapter;
 | |
| import android.content.Context;
 | |
| import android.content.res.Resources;
 | |
| import android.view.View;
 | |
| import android.view.ViewGroup;
 | |
| import android.view.animation.Animation;
 | |
| import android.view.animation.AnimationSet;
 | |
| import android.view.animation.AnimationUtils;
 | |
| import android.view.animation.Transformation;
 | |
| import androidx.core.os.CancellationSignal;
 | |
| import androidx.core.view.OneShotPreDrawListener;
 | |
| import androidx.fragment.R;
 | |
| import androidx.fragment.app.FragmentTransition;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| class FragmentAnim {
 | |
|     private FragmentAnim() {
 | |
|     }
 | |
| 
 | |
|     static AnimationOrAnimator loadAnimation(Context context, Fragment fragment, boolean z, boolean z2) {
 | |
|         int nextTransition = fragment.getNextTransition();
 | |
|         int nextAnim = getNextAnim(fragment, z, z2);
 | |
|         fragment.setAnimations(0, 0, 0, 0);
 | |
|         if (fragment.mContainer != null && fragment.mContainer.getTag(R.id.visible_removing_fragment_view_tag) != null) {
 | |
|             fragment.mContainer.setTag(R.id.visible_removing_fragment_view_tag, null);
 | |
|         }
 | |
|         if (fragment.mContainer != null && fragment.mContainer.getLayoutTransition() != null) {
 | |
|             return null;
 | |
|         }
 | |
|         Animation onCreateAnimation = fragment.onCreateAnimation(nextTransition, z, nextAnim);
 | |
|         if (onCreateAnimation != null) {
 | |
|             return new AnimationOrAnimator(onCreateAnimation);
 | |
|         }
 | |
|         Animator onCreateAnimator = fragment.onCreateAnimator(nextTransition, z, nextAnim);
 | |
|         if (onCreateAnimator != null) {
 | |
|             return new AnimationOrAnimator(onCreateAnimator);
 | |
|         }
 | |
|         if (nextAnim == 0 && nextTransition != 0) {
 | |
|             nextAnim = transitToAnimResourceId(nextTransition, z);
 | |
|         }
 | |
|         if (nextAnim != 0) {
 | |
|             boolean equals = "anim".equals(context.getResources().getResourceTypeName(nextAnim));
 | |
|             if (equals) {
 | |
|                 try {
 | |
|                     Animation loadAnimation = AnimationUtils.loadAnimation(context, nextAnim);
 | |
|                     if (loadAnimation != null) {
 | |
|                         return new AnimationOrAnimator(loadAnimation);
 | |
|                     }
 | |
|                 } catch (Resources.NotFoundException e) {
 | |
|                     throw e;
 | |
|                 } catch (RuntimeException unused) {
 | |
|                 }
 | |
|             }
 | |
|             try {
 | |
|                 Animator loadAnimator = AnimatorInflater.loadAnimator(context, nextAnim);
 | |
|                 if (loadAnimator != null) {
 | |
|                     return new AnimationOrAnimator(loadAnimator);
 | |
|                 }
 | |
|             } catch (RuntimeException e2) {
 | |
|                 if (equals) {
 | |
|                     throw e2;
 | |
|                 }
 | |
|                 Animation loadAnimation2 = AnimationUtils.loadAnimation(context, nextAnim);
 | |
|                 if (loadAnimation2 != null) {
 | |
|                     return new AnimationOrAnimator(loadAnimation2);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     private static int getNextAnim(Fragment fragment, boolean z, boolean z2) {
 | |
|         if (z2) {
 | |
|             if (z) {
 | |
|                 return fragment.getPopEnterAnim();
 | |
|             }
 | |
|             return fragment.getPopExitAnim();
 | |
|         }
 | |
|         if (z) {
 | |
|             return fragment.getEnterAnim();
 | |
|         }
 | |
|         return fragment.getExitAnim();
 | |
|     }
 | |
| 
 | |
|     static void animateRemoveFragment(final Fragment fragment, AnimationOrAnimator animationOrAnimator, final FragmentTransition.Callback callback) {
 | |
|         final View view = fragment.mView;
 | |
|         final ViewGroup viewGroup = fragment.mContainer;
 | |
|         viewGroup.startViewTransition(view);
 | |
|         final CancellationSignal cancellationSignal = new CancellationSignal();
 | |
|         cancellationSignal.setOnCancelListener(new CancellationSignal.OnCancelListener() { // from class: androidx.fragment.app.FragmentAnim.1
 | |
|             @Override // androidx.core.os.CancellationSignal.OnCancelListener
 | |
|             public void onCancel() {
 | |
|                 if (Fragment.this.getAnimatingAway() != null) {
 | |
|                     View animatingAway = Fragment.this.getAnimatingAway();
 | |
|                     Fragment.this.setAnimatingAway(null);
 | |
|                     animatingAway.clearAnimation();
 | |
|                 }
 | |
|                 Fragment.this.setAnimator(null);
 | |
|             }
 | |
|         });
 | |
|         callback.onStart(fragment, cancellationSignal);
 | |
|         if (animationOrAnimator.animation != null) {
 | |
|             EndViewTransitionAnimation endViewTransitionAnimation = new EndViewTransitionAnimation(animationOrAnimator.animation, viewGroup, view);
 | |
|             fragment.setAnimatingAway(fragment.mView);
 | |
|             endViewTransitionAnimation.setAnimationListener(new Animation.AnimationListener() { // from class: androidx.fragment.app.FragmentAnim.2
 | |
|                 @Override // android.view.animation.Animation.AnimationListener
 | |
|                 public void onAnimationRepeat(Animation animation) {
 | |
|                 }
 | |
| 
 | |
|                 @Override // android.view.animation.Animation.AnimationListener
 | |
|                 public void onAnimationStart(Animation animation) {
 | |
|                 }
 | |
| 
 | |
|                 @Override // android.view.animation.Animation.AnimationListener
 | |
|                 public void onAnimationEnd(Animation animation) {
 | |
|                     viewGroup.post(new Runnable() { // from class: androidx.fragment.app.FragmentAnim.2.1
 | |
|                         @Override // java.lang.Runnable
 | |
|                         public void run() {
 | |
|                             if (fragment.getAnimatingAway() != null) {
 | |
|                                 fragment.setAnimatingAway(null);
 | |
|                                 callback.onComplete(fragment, cancellationSignal);
 | |
|                             }
 | |
|                         }
 | |
|                     });
 | |
|                 }
 | |
|             });
 | |
|             fragment.mView.startAnimation(endViewTransitionAnimation);
 | |
|             return;
 | |
|         }
 | |
|         Animator animator = animationOrAnimator.animator;
 | |
|         fragment.setAnimator(animationOrAnimator.animator);
 | |
|         animator.addListener(new AnimatorListenerAdapter() { // from class: androidx.fragment.app.FragmentAnim.3
 | |
|             @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
 | |
|             public void onAnimationEnd(Animator animator2) {
 | |
|                 viewGroup.endViewTransition(view);
 | |
|                 Animator animator3 = fragment.getAnimator();
 | |
|                 fragment.setAnimator(null);
 | |
|                 if (animator3 == null || viewGroup.indexOfChild(view) >= 0) {
 | |
|                     return;
 | |
|                 }
 | |
|                 callback.onComplete(fragment, cancellationSignal);
 | |
|             }
 | |
|         });
 | |
|         animator.setTarget(fragment.mView);
 | |
|         animator.start();
 | |
|     }
 | |
| 
 | |
|     private static int transitToAnimResourceId(int i, boolean z) {
 | |
|         if (i == 4097) {
 | |
|             return z ? R.animator.fragment_open_enter : R.animator.fragment_open_exit;
 | |
|         }
 | |
|         if (i == 4099) {
 | |
|             return z ? R.animator.fragment_fade_enter : R.animator.fragment_fade_exit;
 | |
|         }
 | |
|         if (i != 8194) {
 | |
|             return -1;
 | |
|         }
 | |
|         return z ? R.animator.fragment_close_enter : R.animator.fragment_close_exit;
 | |
|     }
 | |
| 
 | |
|     static class AnimationOrAnimator {
 | |
|         public final Animation animation;
 | |
|         public final Animator animator;
 | |
| 
 | |
|         AnimationOrAnimator(Animation animation) {
 | |
|             this.animation = animation;
 | |
|             this.animator = null;
 | |
|             if (animation == null) {
 | |
|                 throw new IllegalStateException("Animation cannot be null");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         AnimationOrAnimator(Animator animator) {
 | |
|             this.animation = null;
 | |
|             this.animator = animator;
 | |
|             if (animator == null) {
 | |
|                 throw new IllegalStateException("Animator cannot be null");
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     static class EndViewTransitionAnimation extends AnimationSet implements Runnable {
 | |
|         private boolean mAnimating;
 | |
|         private final View mChild;
 | |
|         private boolean mEnded;
 | |
|         private final ViewGroup mParent;
 | |
|         private boolean mTransitionEnded;
 | |
| 
 | |
|         EndViewTransitionAnimation(Animation animation, ViewGroup viewGroup, View view) {
 | |
|             super(false);
 | |
|             this.mAnimating = true;
 | |
|             this.mParent = viewGroup;
 | |
|             this.mChild = view;
 | |
|             addAnimation(animation);
 | |
|             viewGroup.post(this);
 | |
|         }
 | |
| 
 | |
|         @Override // android.view.animation.AnimationSet, android.view.animation.Animation
 | |
|         public boolean getTransformation(long j, Transformation transformation) {
 | |
|             this.mAnimating = true;
 | |
|             if (this.mEnded) {
 | |
|                 return !this.mTransitionEnded;
 | |
|             }
 | |
|             if (!super.getTransformation(j, transformation)) {
 | |
|                 this.mEnded = true;
 | |
|                 OneShotPreDrawListener.add(this.mParent, this);
 | |
|             }
 | |
|             return true;
 | |
|         }
 | |
| 
 | |
|         @Override // android.view.animation.Animation
 | |
|         public boolean getTransformation(long j, Transformation transformation, float f) {
 | |
|             this.mAnimating = true;
 | |
|             if (this.mEnded) {
 | |
|                 return !this.mTransitionEnded;
 | |
|             }
 | |
|             if (!super.getTransformation(j, transformation, f)) {
 | |
|                 this.mEnded = true;
 | |
|                 OneShotPreDrawListener.add(this.mParent, this);
 | |
|             }
 | |
|             return true;
 | |
|         }
 | |
| 
 | |
|         @Override // java.lang.Runnable
 | |
|         public void run() {
 | |
|             if (!this.mEnded && this.mAnimating) {
 | |
|                 this.mAnimating = false;
 | |
|                 this.mParent.post(this);
 | |
|             } else {
 | |
|                 this.mParent.endViewTransition(this.mChild);
 | |
|                 this.mTransitionEnded = true;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |