CrackMe.apk
Download file
package androidx.fragment.app;
import android.animation.Animator;
import android.animation.AnimatorInflater;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
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.view.OneShotPreDrawListener;
import androidx.fragment.R;
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);
boolean z3 = false;
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, (Object) 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(context, 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);
}
z3 = true;
} catch (Resources.NotFoundException e) {
throw e;
} catch (RuntimeException unused) {
}
}
if (!z3) {
try {
Animator loadAnimator = AnimatorInflater.loadAnimator(context, nextAnim);
if (loadAnimator != null) {
return new AnimationOrAnimator(loadAnimator);
}
} catch (RuntimeException e2) {
if (!equals) {
Animation loadAnimation2 = AnimationUtils.loadAnimation(context, nextAnim);
if (loadAnimation2 != null) {
return new AnimationOrAnimator(loadAnimation2);
}
} else {
throw e2;
}
}
}
}
return null;
}
private static int getNextAnim(Fragment fragment, boolean z, boolean z2) {
if (z2) {
if (z) {
return fragment.getPopEnterAnim();
}
return fragment.getPopExitAnim();
} else if (z) {
return fragment.getEnterAnim();
} else {
return fragment.getExitAnim();
}
}
private static int transitToAnimResourceId(Context context, int i, boolean z) {
if (i == 4097) {
return z ? R.animator.fragment_open_enter : R.animator.fragment_open_exit;
}
if (i == 8194) {
return z ? R.animator.fragment_close_enter : R.animator.fragment_close_exit;
}
if (i != 8197) {
if (i == 4099) {
return z ? R.animator.fragment_fade_enter : R.animator.fragment_fade_exit;
}
if (i != 4100) {
return -1;
}
if (z) {
return toActivityTransitResId(context, 16842936);
}
return toActivityTransitResId(context, 16842937);
} else if (z) {
return toActivityTransitResId(context, 16842938);
} else {
return toActivityTransitResId(context, 16842939);
}
}
private static int toActivityTransitResId(Context context, int i) {
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(16973825, new int[]{i});
int resourceId = obtainStyledAttributes.getResourceId(0, -1);
obtainStyledAttributes.recycle();
return resourceId;
}
static class AnimationOrAnimator {
public final Animation animation;
public final Animator animator;
AnimationOrAnimator(Animation animation2) {
this.animation = animation2;
this.animator = null;
if (animation2 == null) {
throw new IllegalStateException("Animation cannot be null");
}
}
AnimationOrAnimator(Animator animator2) {
this.animation = null;
this.animator = animator2;
if (animator2 == null) {
throw new IllegalStateException("Animator cannot be null");
}
}
}
static class EndViewTransitionAnimation extends AnimationSet implements Runnable {
private boolean mAnimating = true;
private final View mChild;
private boolean mEnded;
private final ViewGroup mParent;
private boolean mTransitionEnded;
EndViewTransitionAnimation(Animation animation, ViewGroup viewGroup, View view) {
super(false);
this.mParent = viewGroup;
this.mChild = view;
addAnimation(animation);
viewGroup.post(this);
}
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;
}
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;
}
public void run() {
if (this.mEnded || !this.mAnimating) {
this.mParent.endViewTransition(this.mChild);
this.mTransitionEnded = true;
return;
}
this.mAnimating = false;
this.mParent.post(this);
}
}
}
Download file