CrackMe.apk
Download file
package com.facebook.react.views.text.frescosupport;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.widget.TextView;
import com.facebook.drawee.controller.AbstractDraweeControllerBuilder;
import com.facebook.drawee.drawable.ScalingUtils;
import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
import com.facebook.drawee.view.DraweeHolder;
import com.facebook.imagepipeline.request.ImageRequestBuilder;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.modules.fresco.ReactNetworkImageRequest;
import com.facebook.react.uimanager.PixelUtil;
import com.facebook.react.views.image.ImageResizeMode;
import com.facebook.react.views.text.TextInlineImageSpan;
public class FrescoBasedReactTextInlineImageSpan extends TextInlineImageSpan {
private final Object mCallerContext;
private Drawable mDrawable;
private final AbstractDraweeControllerBuilder mDraweeControllerBuilder;
private final DraweeHolder<GenericDraweeHierarchy> mDraweeHolder;
private ReadableMap mHeaders;
private int mHeight;
private String mResizeMode;
private TextView mTextView;
private int mTintColor;
private Uri mUri;
private int mWidth;
public FrescoBasedReactTextInlineImageSpan(Resources resources, int i, int i2, int i3, Uri uri, ReadableMap readableMap, AbstractDraweeControllerBuilder abstractDraweeControllerBuilder, Object obj, String str) {
this.mDraweeHolder = new DraweeHolder<>(GenericDraweeHierarchyBuilder.newInstance(resources).build());
this.mDraweeControllerBuilder = abstractDraweeControllerBuilder;
this.mCallerContext = obj;
this.mTintColor = i3;
this.mUri = uri == null ? Uri.EMPTY : uri;
this.mHeaders = readableMap;
this.mWidth = (int) PixelUtil.toPixelFromDIP((float) i2);
this.mHeight = (int) PixelUtil.toPixelFromDIP((float) i);
this.mResizeMode = str;
}
public void onDetachedFromWindow() {
this.mDraweeHolder.onDetach();
}
public void onStartTemporaryDetach() {
this.mDraweeHolder.onDetach();
}
public void onAttachedToWindow() {
this.mDraweeHolder.onAttach();
}
public void onFinishTemporaryDetach() {
this.mDraweeHolder.onAttach();
}
public Drawable getDrawable() {
return this.mDrawable;
}
public int getSize(Paint paint, CharSequence charSequence, int i, int i2, Paint.FontMetricsInt fontMetricsInt) {
if (fontMetricsInt != null) {
fontMetricsInt.ascent = -this.mHeight;
fontMetricsInt.descent = 0;
fontMetricsInt.top = fontMetricsInt.ascent;
fontMetricsInt.bottom = 0;
}
return this.mWidth;
}
public void setTextView(TextView textView) {
this.mTextView = textView;
}
public void draw(Canvas canvas, CharSequence charSequence, int i, int i2, float f, int i3, int i4, int i5, Paint paint) {
if (this.mDrawable == null) {
ReactNetworkImageRequest fromBuilderWithHeaders = ReactNetworkImageRequest.fromBuilderWithHeaders(ImageRequestBuilder.newBuilderWithSource(this.mUri), this.mHeaders);
this.mDraweeHolder.getHierarchy().setActualImageScaleType(getResizeMode(this.mResizeMode));
this.mDraweeHolder.setController(this.mDraweeControllerBuilder.reset().setOldController(this.mDraweeHolder.getController()).setCallerContext(this.mCallerContext).setImageRequest(fromBuilderWithHeaders).build());
this.mDraweeControllerBuilder.reset();
Drawable topLevelDrawable = this.mDraweeHolder.getTopLevelDrawable();
this.mDrawable = topLevelDrawable;
topLevelDrawable.setBounds(0, 0, this.mWidth, this.mHeight);
int i6 = this.mTintColor;
if (i6 != 0) {
this.mDrawable.setColorFilter(i6, PorterDuff.Mode.SRC_IN);
}
this.mDrawable.setCallback(this.mTextView);
}
canvas.save();
canvas.translate(f, (float) (((i4 + ((int) paint.descent())) - (((int) (paint.descent() - paint.ascent())) / 2)) - ((this.mDrawable.getBounds().bottom - this.mDrawable.getBounds().top) / 2)));
this.mDrawable.draw(canvas);
canvas.restore();
}
private ScalingUtils.ScaleType getResizeMode(String str) {
return ImageResizeMode.toScaleType(str);
}
public int getWidth() {
return this.mWidth;
}
public int getHeight() {
return this.mHeight;
}
}
Download file