ADD week 5
This commit is contained in:
		
							
								
								
									
										239
									
								
								02-Easy5/E5/sources/androidx/fragment/app/FragmentAnim.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										239
									
								
								02-Easy5/E5/sources/androidx/fragment/app/FragmentAnim.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,239 @@ | ||||
| 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; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user