CrackMe.apk
Download file
package com.facebook.imagepipeline.animated.impl;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import com.facebook.common.references.CloseableReference;
import com.facebook.imagepipeline.animated.base.AnimatedDrawableBackend;
import com.facebook.imagepipeline.animated.base.AnimatedDrawableFrameInfo;
import com.facebook.imagepipeline.animated.base.AnimatedImageResult;
import com.facebook.imagepipeline.transformation.BitmapTransformation;
import javax.annotation.Nullable;
public class AnimatedImageCompositor {
private final AnimatedDrawableBackend mAnimatedDrawableBackend;
private final Callback mCallback;
private final Paint mTransparentFillPaint;
public interface Callback {
@Nullable
CloseableReference<Bitmap> getCachedBitmap(int i);
void onIntermediateResult(int i, Bitmap bitmap);
}
private enum FrameNeededResult {
REQUIRED,
NOT_REQUIRED,
SKIP,
ABORT
}
public AnimatedImageCompositor(AnimatedDrawableBackend animatedDrawableBackend, Callback callback) {
this.mAnimatedDrawableBackend = animatedDrawableBackend;
this.mCallback = callback;
Paint paint = new Paint();
this.mTransparentFillPaint = paint;
paint.setColor(0);
paint.setStyle(Paint.Style.FILL);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
}
public void renderFrame(int i, Bitmap bitmap) {
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(0, PorterDuff.Mode.SRC);
for (int prepareCanvasWithClosestCachedFrame = !isKeyFrame(i) ? prepareCanvasWithClosestCachedFrame(i - 1, canvas) : i; prepareCanvasWithClosestCachedFrame < i; prepareCanvasWithClosestCachedFrame++) {
AnimatedDrawableFrameInfo frameInfo = this.mAnimatedDrawableBackend.getFrameInfo(prepareCanvasWithClosestCachedFrame);
AnimatedDrawableFrameInfo.DisposalMethod disposalMethod = frameInfo.disposalMethod;
if (disposalMethod != AnimatedDrawableFrameInfo.DisposalMethod.DISPOSE_TO_PREVIOUS) {
if (frameInfo.blendOperation == AnimatedDrawableFrameInfo.BlendOperation.NO_BLEND) {
disposeToBackground(canvas, frameInfo);
}
this.mAnimatedDrawableBackend.renderFrame(prepareCanvasWithClosestCachedFrame, canvas);
this.mCallback.onIntermediateResult(prepareCanvasWithClosestCachedFrame, bitmap);
if (disposalMethod == AnimatedDrawableFrameInfo.DisposalMethod.DISPOSE_TO_BACKGROUND) {
disposeToBackground(canvas, frameInfo);
}
}
}
AnimatedDrawableFrameInfo frameInfo2 = this.mAnimatedDrawableBackend.getFrameInfo(i);
if (frameInfo2.blendOperation == AnimatedDrawableFrameInfo.BlendOperation.NO_BLEND) {
disposeToBackground(canvas, frameInfo2);
}
this.mAnimatedDrawableBackend.renderFrame(i, canvas);
maybeApplyTransformation(bitmap);
}
/* renamed from: com.facebook.imagepipeline.animated.impl.AnimatedImageCompositor$1 reason: invalid class name */
static /* synthetic */ class AnonymousClass1 {
static final /* synthetic */ int[] $SwitchMap$com$facebook$imagepipeline$animated$impl$AnimatedImageCompositor$FrameNeededResult;
/* JADX WARNING: Can't wrap try/catch for region: R(8:0|1|2|3|4|5|6|(3:7|8|10)) */
/* JADX WARNING: Failed to process nested try/catch */
/* JADX WARNING: Missing exception handler attribute for start block: B:3:0x0012 */
/* JADX WARNING: Missing exception handler attribute for start block: B:5:0x001d */
/* JADX WARNING: Missing exception handler attribute for start block: B:7:0x0028 */
static {
/*
com.facebook.imagepipeline.animated.impl.AnimatedImageCompositor$FrameNeededResult[] r0 = com.facebook.imagepipeline.animated.impl.AnimatedImageCompositor.FrameNeededResult.values()
int r0 = r0.length
int[] r0 = new int[r0]
$SwitchMap$com$facebook$imagepipeline$animated$impl$AnimatedImageCompositor$FrameNeededResult = r0
com.facebook.imagepipeline.animated.impl.AnimatedImageCompositor$FrameNeededResult r1 = com.facebook.imagepipeline.animated.impl.AnimatedImageCompositor.FrameNeededResult.REQUIRED // Catch:{ NoSuchFieldError -> 0x0012 }
int r1 = r1.ordinal() // Catch:{ NoSuchFieldError -> 0x0012 }
r2 = 1
r0[r1] = r2 // Catch:{ NoSuchFieldError -> 0x0012 }
L_0x0012:
int[] r0 = $SwitchMap$com$facebook$imagepipeline$animated$impl$AnimatedImageCompositor$FrameNeededResult // Catch:{ NoSuchFieldError -> 0x001d }
com.facebook.imagepipeline.animated.impl.AnimatedImageCompositor$FrameNeededResult r1 = com.facebook.imagepipeline.animated.impl.AnimatedImageCompositor.FrameNeededResult.NOT_REQUIRED // Catch:{ NoSuchFieldError -> 0x001d }
int r1 = r1.ordinal() // Catch:{ NoSuchFieldError -> 0x001d }
r2 = 2
r0[r1] = r2 // Catch:{ NoSuchFieldError -> 0x001d }
L_0x001d:
int[] r0 = $SwitchMap$com$facebook$imagepipeline$animated$impl$AnimatedImageCompositor$FrameNeededResult // Catch:{ NoSuchFieldError -> 0x0028 }
com.facebook.imagepipeline.animated.impl.AnimatedImageCompositor$FrameNeededResult r1 = com.facebook.imagepipeline.animated.impl.AnimatedImageCompositor.FrameNeededResult.ABORT // Catch:{ NoSuchFieldError -> 0x0028 }
int r1 = r1.ordinal() // Catch:{ NoSuchFieldError -> 0x0028 }
r2 = 3
r0[r1] = r2 // Catch:{ NoSuchFieldError -> 0x0028 }
L_0x0028:
int[] r0 = $SwitchMap$com$facebook$imagepipeline$animated$impl$AnimatedImageCompositor$FrameNeededResult // Catch:{ NoSuchFieldError -> 0x0033 }
com.facebook.imagepipeline.animated.impl.AnimatedImageCompositor$FrameNeededResult r1 = com.facebook.imagepipeline.animated.impl.AnimatedImageCompositor.FrameNeededResult.SKIP // Catch:{ NoSuchFieldError -> 0x0033 }
int r1 = r1.ordinal() // Catch:{ NoSuchFieldError -> 0x0033 }
r2 = 4
r0[r1] = r2 // Catch:{ NoSuchFieldError -> 0x0033 }
L_0x0033:
return
*/
throw new UnsupportedOperationException("Method not decompiled: com.facebook.imagepipeline.animated.impl.AnimatedImageCompositor.AnonymousClass1.<clinit>():void");
}
}
private int prepareCanvasWithClosestCachedFrame(int i, Canvas canvas) {
while (i >= 0) {
int i2 = AnonymousClass1.$SwitchMap$com$facebook$imagepipeline$animated$impl$AnimatedImageCompositor$FrameNeededResult[isFrameNeededForRendering(i).ordinal()];
if (i2 == 1) {
AnimatedDrawableFrameInfo frameInfo = this.mAnimatedDrawableBackend.getFrameInfo(i);
CloseableReference<Bitmap> cachedBitmap = this.mCallback.getCachedBitmap(i);
if (cachedBitmap != null) {
try {
canvas.drawBitmap(cachedBitmap.get(), 0.0f, 0.0f, (Paint) null);
if (frameInfo.disposalMethod == AnimatedDrawableFrameInfo.DisposalMethod.DISPOSE_TO_BACKGROUND) {
disposeToBackground(canvas, frameInfo);
}
return i + 1;
} finally {
cachedBitmap.close();
}
} else if (isKeyFrame(i)) {
return i;
}
} else if (i2 == 2) {
return i + 1;
} else {
if (i2 == 3) {
return i;
}
}
i--;
}
return 0;
}
private void disposeToBackground(Canvas canvas, AnimatedDrawableFrameInfo animatedDrawableFrameInfo) {
canvas.drawRect((float) animatedDrawableFrameInfo.xOffset, (float) animatedDrawableFrameInfo.yOffset, (float) (animatedDrawableFrameInfo.xOffset + animatedDrawableFrameInfo.width), (float) (animatedDrawableFrameInfo.yOffset + animatedDrawableFrameInfo.height), this.mTransparentFillPaint);
}
private FrameNeededResult isFrameNeededForRendering(int i) {
AnimatedDrawableFrameInfo frameInfo = this.mAnimatedDrawableBackend.getFrameInfo(i);
AnimatedDrawableFrameInfo.DisposalMethod disposalMethod = frameInfo.disposalMethod;
if (disposalMethod == AnimatedDrawableFrameInfo.DisposalMethod.DISPOSE_DO_NOT) {
return FrameNeededResult.REQUIRED;
}
if (disposalMethod == AnimatedDrawableFrameInfo.DisposalMethod.DISPOSE_TO_BACKGROUND) {
if (isFullFrame(frameInfo)) {
return FrameNeededResult.NOT_REQUIRED;
}
return FrameNeededResult.REQUIRED;
} else if (disposalMethod == AnimatedDrawableFrameInfo.DisposalMethod.DISPOSE_TO_PREVIOUS) {
return FrameNeededResult.SKIP;
} else {
return FrameNeededResult.ABORT;
}
}
private boolean isKeyFrame(int i) {
if (i == 0) {
return true;
}
AnimatedDrawableFrameInfo frameInfo = this.mAnimatedDrawableBackend.getFrameInfo(i);
AnimatedDrawableFrameInfo frameInfo2 = this.mAnimatedDrawableBackend.getFrameInfo(i - 1);
if (frameInfo.blendOperation == AnimatedDrawableFrameInfo.BlendOperation.NO_BLEND && isFullFrame(frameInfo)) {
return true;
}
if (frameInfo2.disposalMethod != AnimatedDrawableFrameInfo.DisposalMethod.DISPOSE_TO_BACKGROUND || !isFullFrame(frameInfo2)) {
return false;
}
return true;
}
private boolean isFullFrame(AnimatedDrawableFrameInfo animatedDrawableFrameInfo) {
return animatedDrawableFrameInfo.xOffset == 0 && animatedDrawableFrameInfo.yOffset == 0 && animatedDrawableFrameInfo.width == this.mAnimatedDrawableBackend.getRenderedWidth() && animatedDrawableFrameInfo.height == this.mAnimatedDrawableBackend.getRenderedHeight();
}
private void maybeApplyTransformation(Bitmap bitmap) {
BitmapTransformation bitmapTransformation;
AnimatedImageResult animatedImageResult = this.mAnimatedDrawableBackend.getAnimatedImageResult();
if (animatedImageResult != null && (bitmapTransformation = animatedImageResult.getBitmapTransformation()) != null) {
bitmapTransformation.transform(bitmap);
}
}
}
Download file