CrackMe.apk
Download file
package com.facebook.drawee.drawable;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import javax.annotation.Nullable;
public class ScalingUtils {
public interface ScaleType {
public static final ScaleType CENTER = ScaleTypeCenter.INSTANCE;
public static final ScaleType CENTER_CROP = ScaleTypeCenterCrop.INSTANCE;
public static final ScaleType CENTER_INSIDE = ScaleTypeCenterInside.INSTANCE;
public static final ScaleType FIT_BOTTOM_START = ScaleTypeFitBottomStart.INSTANCE;
public static final ScaleType FIT_CENTER = ScaleTypeFitCenter.INSTANCE;
public static final ScaleType FIT_END = ScaleTypeFitEnd.INSTANCE;
public static final ScaleType FIT_START = ScaleTypeFitStart.INSTANCE;
public static final ScaleType FIT_X = ScaleTypeFitX.INSTANCE;
public static final ScaleType FIT_XY = ScaleTypeFitXY.INSTANCE;
public static final ScaleType FIT_Y = ScaleTypeFitY.INSTANCE;
public static final ScaleType FOCUS_CROP = ScaleTypeFocusCrop.INSTANCE;
Matrix getTransform(Matrix matrix, Rect rect, int i, int i2, float f, float f2);
}
public interface StatefulScaleType {
Object getState();
}
@Nullable
public static ScaleTypeDrawable getActiveScaleTypeDrawable(@Nullable Drawable drawable) {
if (drawable == null) {
return null;
}
if (drawable instanceof ScaleTypeDrawable) {
return (ScaleTypeDrawable) drawable;
}
if (drawable instanceof DrawableParent) {
return getActiveScaleTypeDrawable(((DrawableParent) drawable).getDrawable());
}
if (drawable instanceof ArrayDrawable) {
ArrayDrawable arrayDrawable = (ArrayDrawable) drawable;
int numberOfLayers = arrayDrawable.getNumberOfLayers();
for (int i = 0; i < numberOfLayers; i++) {
ScaleTypeDrawable activeScaleTypeDrawable = getActiveScaleTypeDrawable(arrayDrawable.getDrawable(i));
if (activeScaleTypeDrawable != null) {
return activeScaleTypeDrawable;
}
}
}
return null;
}
public static abstract class AbstractScaleType implements ScaleType {
public abstract void getTransformImpl(Matrix matrix, Rect rect, int i, int i2, float f, float f2, float f3, float f4);
public Matrix getTransform(Matrix matrix, Rect rect, int i, int i2, float f, float f2) {
int i3 = i;
int i4 = i2;
getTransformImpl(matrix, rect, i3, i4, f, f2, ((float) rect.width()) / ((float) i3), ((float) rect.height()) / ((float) i4));
return matrix;
}
}
private static class ScaleTypeFitXY extends AbstractScaleType {
public static final ScaleType INSTANCE = new ScaleTypeFitXY();
public String toString() {
return "fit_xy";
}
private ScaleTypeFitXY() {
}
public void getTransformImpl(Matrix matrix, Rect rect, int i, int i2, float f, float f2, float f3, float f4) {
matrix.setScale(f3, f4);
matrix.postTranslate((float) ((int) (((float) rect.left) + 0.5f)), (float) ((int) (((float) rect.top) + 0.5f)));
}
}
private static class ScaleTypeFitStart extends AbstractScaleType {
public static final ScaleType INSTANCE = new ScaleTypeFitStart();
public String toString() {
return "fit_start";
}
private ScaleTypeFitStart() {
}
public void getTransformImpl(Matrix matrix, Rect rect, int i, int i2, float f, float f2, float f3, float f4) {
float min = Math.min(f3, f4);
matrix.setScale(min, min);
matrix.postTranslate((float) ((int) (((float) rect.left) + 0.5f)), (float) ((int) (((float) rect.top) + 0.5f)));
}
}
private static class ScaleTypeFitBottomStart extends AbstractScaleType {
public static final ScaleType INSTANCE = new ScaleTypeFitBottomStart();
public String toString() {
return "fit_bottom_start";
}
private ScaleTypeFitBottomStart() {
}
public void getTransformImpl(Matrix matrix, Rect rect, int i, int i2, float f, float f2, float f3, float f4) {
float min = Math.min(f3, f4);
matrix.setScale(min, min);
matrix.postTranslate((float) ((int) (((float) rect.left) + 0.5f)), (float) ((int) (((float) rect.top) + (((float) rect.height()) - (((float) i2) * min)) + 0.5f)));
}
}
private static class ScaleTypeFitCenter extends AbstractScaleType {
public static final ScaleType INSTANCE = new ScaleTypeFitCenter();
public String toString() {
return "fit_center";
}
private ScaleTypeFitCenter() {
}
public void getTransformImpl(Matrix matrix, Rect rect, int i, int i2, float f, float f2, float f3, float f4) {
float min = Math.min(f3, f4);
float width = ((float) rect.left) + ((((float) rect.width()) - (((float) i) * min)) * 0.5f);
float height = ((float) rect.top) + ((((float) rect.height()) - (((float) i2) * min)) * 0.5f);
matrix.setScale(min, min);
matrix.postTranslate((float) ((int) (width + 0.5f)), (float) ((int) (height + 0.5f)));
}
}
private static class ScaleTypeFitEnd extends AbstractScaleType {
public static final ScaleType INSTANCE = new ScaleTypeFitEnd();
public String toString() {
return "fit_end";
}
private ScaleTypeFitEnd() {
}
public void getTransformImpl(Matrix matrix, Rect rect, int i, int i2, float f, float f2, float f3, float f4) {
float min = Math.min(f3, f4);
matrix.setScale(min, min);
matrix.postTranslate((float) ((int) (((float) rect.left) + (((float) rect.width()) - (((float) i) * min)) + 0.5f)), (float) ((int) (((float) rect.top) + (((float) rect.height()) - (((float) i2) * min)) + 0.5f)));
}
}
private static class ScaleTypeCenter extends AbstractScaleType {
public static final ScaleType INSTANCE = new ScaleTypeCenter();
public String toString() {
return TtmlNode.CENTER;
}
private ScaleTypeCenter() {
}
public void getTransformImpl(Matrix matrix, Rect rect, int i, int i2, float f, float f2, float f3, float f4) {
matrix.setTranslate((float) ((int) (((float) rect.left) + (((float) (rect.width() - i)) * 0.5f) + 0.5f)), (float) ((int) (((float) rect.top) + (((float) (rect.height() - i2)) * 0.5f) + 0.5f)));
}
}
private static class ScaleTypeCenterInside extends AbstractScaleType {
public static final ScaleType INSTANCE = new ScaleTypeCenterInside();
public String toString() {
return "center_inside";
}
private ScaleTypeCenterInside() {
}
public void getTransformImpl(Matrix matrix, Rect rect, int i, int i2, float f, float f2, float f3, float f4) {
float min = Math.min(Math.min(f3, f4), 1.0f);
float width = ((float) rect.left) + ((((float) rect.width()) - (((float) i) * min)) * 0.5f);
float height = ((float) rect.top) + ((((float) rect.height()) - (((float) i2) * min)) * 0.5f);
matrix.setScale(min, min);
matrix.postTranslate((float) ((int) (width + 0.5f)), (float) ((int) (height + 0.5f)));
}
}
private static class ScaleTypeCenterCrop extends AbstractScaleType {
public static final ScaleType INSTANCE = new ScaleTypeCenterCrop();
public String toString() {
return "center_crop";
}
private ScaleTypeCenterCrop() {
}
public void getTransformImpl(Matrix matrix, Rect rect, int i, int i2, float f, float f2, float f3, float f4) {
float f5;
float f6;
if (f4 > f3) {
f5 = ((float) rect.left) + ((((float) rect.width()) - (((float) i) * f4)) * 0.5f);
f6 = (float) rect.top;
f3 = f4;
} else {
f6 = ((((float) rect.height()) - (((float) i2) * f3)) * 0.5f) + ((float) rect.top);
f5 = (float) rect.left;
}
matrix.setScale(f3, f3);
matrix.postTranslate((float) ((int) (f5 + 0.5f)), (float) ((int) (f6 + 0.5f)));
}
}
private static class ScaleTypeFocusCrop extends AbstractScaleType {
public static final ScaleType INSTANCE = new ScaleTypeFocusCrop();
public String toString() {
return "focus_crop";
}
private ScaleTypeFocusCrop() {
}
public void getTransformImpl(Matrix matrix, Rect rect, int i, int i2, float f, float f2, float f3, float f4) {
float f5;
float f6;
if (f4 > f3) {
float f7 = ((float) i) * f4;
f5 = ((float) rect.left) + Math.max(Math.min((((float) rect.width()) * 0.5f) - (f * f7), 0.0f), ((float) rect.width()) - f7);
f6 = (float) rect.top;
f3 = f4;
} else {
f5 = (float) rect.left;
float f8 = ((float) i2) * f3;
f6 = Math.max(Math.min((((float) rect.height()) * 0.5f) - (f2 * f8), 0.0f), ((float) rect.height()) - f8) + ((float) rect.top);
}
matrix.setScale(f3, f3);
matrix.postTranslate((float) ((int) (f5 + 0.5f)), (float) ((int) (f6 + 0.5f)));
}
}
private static class ScaleTypeFitX extends AbstractScaleType {
public static final ScaleType INSTANCE = new ScaleTypeFitX();
public String toString() {
return "fit_x";
}
private ScaleTypeFitX() {
}
public void getTransformImpl(Matrix matrix, Rect rect, int i, int i2, float f, float f2, float f3, float f4) {
float height = ((float) rect.top) + ((((float) rect.height()) - (((float) i2) * f3)) * 0.5f);
matrix.setScale(f3, f3);
matrix.postTranslate((float) ((int) (((float) rect.left) + 0.5f)), (float) ((int) (height + 0.5f)));
}
}
private static class ScaleTypeFitY extends AbstractScaleType {
public static final ScaleType INSTANCE = new ScaleTypeFitY();
public String toString() {
return "fit_y";
}
private ScaleTypeFitY() {
}
public void getTransformImpl(Matrix matrix, Rect rect, int i, int i2, float f, float f2, float f3, float f4) {
matrix.setScale(f4, f4);
matrix.postTranslate((float) ((int) (((float) rect.left) + ((((float) rect.width()) - (((float) i) * f4)) * 0.5f) + 0.5f)), (float) ((int) (((float) rect.top) + 0.5f)));
}
}
public static class InterpolatingScaleType implements ScaleType, StatefulScaleType {
@Nullable
private final Rect mBoundsFrom;
@Nullable
private final Rect mBoundsTo;
@Nullable
private final PointF mFocusPointFrom;
@Nullable
private final PointF mFocusPointTo;
private float mInterpolatingValue;
private final float[] mMatrixValuesFrom;
private final float[] mMatrixValuesInterpolated;
private final float[] mMatrixValuesTo;
private final ScaleType mScaleTypeFrom;
private final ScaleType mScaleTypeTo;
public InterpolatingScaleType(ScaleType scaleType, ScaleType scaleType2, @Nullable Rect rect, @Nullable Rect rect2, @Nullable PointF pointF, @Nullable PointF pointF2) {
this.mMatrixValuesFrom = new float[9];
this.mMatrixValuesTo = new float[9];
this.mMatrixValuesInterpolated = new float[9];
this.mScaleTypeFrom = scaleType;
this.mScaleTypeTo = scaleType2;
this.mBoundsFrom = rect;
this.mBoundsTo = rect2;
this.mFocusPointFrom = pointF;
this.mFocusPointTo = pointF2;
}
public InterpolatingScaleType(ScaleType scaleType, ScaleType scaleType2, @Nullable Rect rect, @Nullable Rect rect2) {
this(scaleType, scaleType2, rect, rect2, (PointF) null, (PointF) null);
}
public InterpolatingScaleType(ScaleType scaleType, ScaleType scaleType2) {
this(scaleType, scaleType2, (Rect) null, (Rect) null);
}
public ScaleType getScaleTypeFrom() {
return this.mScaleTypeFrom;
}
public ScaleType getScaleTypeTo() {
return this.mScaleTypeTo;
}
@Nullable
public Rect getBoundsFrom() {
return this.mBoundsFrom;
}
@Nullable
public Rect getBoundsTo() {
return this.mBoundsTo;
}
@Nullable
public PointF getFocusPointFrom() {
return this.mFocusPointFrom;
}
@Nullable
public PointF getFocusPointTo() {
return this.mFocusPointTo;
}
public void setValue(float f) {
this.mInterpolatingValue = f;
}
public float getValue() {
return this.mInterpolatingValue;
}
public Object getState() {
return Float.valueOf(this.mInterpolatingValue);
}
public Matrix getTransform(Matrix matrix, Rect rect, int i, int i2, float f, float f2) {
Matrix matrix2 = matrix;
Rect rect2 = this.mBoundsFrom;
Rect rect3 = rect2 != null ? rect2 : rect;
Rect rect4 = this.mBoundsTo;
Rect rect5 = rect4 != null ? rect4 : rect;
ScaleType scaleType = this.mScaleTypeFrom;
PointF pointF = this.mFocusPointFrom;
float f3 = pointF == null ? f : pointF.x;
PointF pointF2 = this.mFocusPointFrom;
scaleType.getTransform(matrix, rect3, i, i2, f3, pointF2 == null ? f2 : pointF2.y);
matrix.getValues(this.mMatrixValuesFrom);
ScaleType scaleType2 = this.mScaleTypeTo;
PointF pointF3 = this.mFocusPointTo;
float f4 = pointF3 == null ? f : pointF3.x;
PointF pointF4 = this.mFocusPointTo;
scaleType2.getTransform(matrix, rect5, i, i2, f4, pointF4 == null ? f2 : pointF4.y);
matrix.getValues(this.mMatrixValuesTo);
for (int i3 = 0; i3 < 9; i3++) {
float[] fArr = this.mMatrixValuesInterpolated;
float f5 = this.mMatrixValuesFrom[i3];
float f6 = this.mInterpolatingValue;
fArr[i3] = (f5 * (1.0f - f6)) + (this.mMatrixValuesTo[i3] * f6);
}
matrix.setValues(this.mMatrixValuesInterpolated);
return matrix2;
}
public String toString() {
return String.format("InterpolatingScaleType(%s (%s) -> %s (%s))", new Object[]{String.valueOf(this.mScaleTypeFrom), String.valueOf(this.mFocusPointFrom), String.valueOf(this.mScaleTypeTo), String.valueOf(this.mFocusPointTo)});
}
}
}
Download file