CrackMe.apk
Download file
package com.google.android.material.card;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.InsetDrawable;
import android.graphics.drawable.LayerDrawable;
import android.graphics.drawable.RippleDrawable;
import android.graphics.drawable.StateListDrawable;
import android.os.Build;
import android.util.AttributeSet;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.core.view.ViewCompat;
import com.google.android.material.R;
import com.google.android.material.color.MaterialColors;
import com.google.android.material.resources.MaterialResources;
import com.google.android.material.ripple.RippleUtils;
import com.google.android.material.shape.CornerTreatment;
import com.google.android.material.shape.CutCornerTreatment;
import com.google.android.material.shape.MaterialShapeDrawable;
import com.google.android.material.shape.RoundedCornerTreatment;
import com.google.android.material.shape.ShapeAppearanceModel;
class MaterialCardViewHelper {
private static final float CARD_VIEW_SHADOW_MULTIPLIER = 1.5f;
private static final int CHECKED_ICON_LAYER_INDEX = 2;
private static final int[] CHECKED_STATE_SET = {16842912};
private static final double COS_45 = Math.cos(Math.toRadians(45.0d));
private static final int DEFAULT_STROKE_VALUE = -1;
private final MaterialShapeDrawable bgDrawable;
private boolean checkable;
private Drawable checkedIcon;
private final int checkedIconMargin;
private final int checkedIconSize;
private ColorStateList checkedIconTint;
private LayerDrawable clickableForegroundDrawable;
private MaterialShapeDrawable compatRippleDrawable;
private Drawable fgDrawable;
private final MaterialShapeDrawable foregroundContentDrawable;
private MaterialShapeDrawable foregroundShapeDrawable;
private boolean isBackgroundOverwritten = false;
private final MaterialCardView materialCardView;
private ColorStateList rippleColor;
private Drawable rippleDrawable;
private ShapeAppearanceModel shapeAppearanceModel;
private ColorStateList strokeColor;
private int strokeWidth;
private final Rect userContentPadding = new Rect();
public MaterialCardViewHelper(MaterialCardView materialCardView2, AttributeSet attributeSet, int i, int i2) {
this.materialCardView = materialCardView2;
MaterialShapeDrawable materialShapeDrawable = new MaterialShapeDrawable(materialCardView2.getContext(), attributeSet, i, i2);
this.bgDrawable = materialShapeDrawable;
materialShapeDrawable.initializeElevationOverlay(materialCardView2.getContext());
materialShapeDrawable.setShadowColor(-12303292);
ShapeAppearanceModel.Builder builder = materialShapeDrawable.getShapeAppearanceModel().toBuilder();
TypedArray obtainStyledAttributes = materialCardView2.getContext().obtainStyledAttributes(attributeSet, R.styleable.CardView, i, R.style.CardView);
if (obtainStyledAttributes.hasValue(R.styleable.CardView_cardCornerRadius)) {
builder.setAllCornerSizes(obtainStyledAttributes.getDimension(R.styleable.CardView_cardCornerRadius, 0.0f));
}
this.foregroundContentDrawable = new MaterialShapeDrawable();
setShapeAppearanceModel(builder.build());
Resources resources = materialCardView2.getResources();
this.checkedIconMargin = resources.getDimensionPixelSize(R.dimen.mtrl_card_checked_icon_margin);
this.checkedIconSize = resources.getDimensionPixelSize(R.dimen.mtrl_card_checked_icon_size);
obtainStyledAttributes.recycle();
}
/* access modifiers changed from: package-private */
public void loadFromAttributes(TypedArray typedArray) {
ColorStateList colorStateList = MaterialResources.getColorStateList(this.materialCardView.getContext(), typedArray, R.styleable.MaterialCardView_strokeColor);
this.strokeColor = colorStateList;
if (colorStateList == null) {
this.strokeColor = ColorStateList.valueOf(-1);
}
this.strokeWidth = typedArray.getDimensionPixelSize(R.styleable.MaterialCardView_strokeWidth, 0);
boolean z = typedArray.getBoolean(R.styleable.MaterialCardView_android_checkable, false);
this.checkable = z;
this.materialCardView.setLongClickable(z);
this.checkedIconTint = MaterialResources.getColorStateList(this.materialCardView.getContext(), typedArray, R.styleable.MaterialCardView_checkedIconTint);
setCheckedIcon(MaterialResources.getDrawable(this.materialCardView.getContext(), typedArray, R.styleable.MaterialCardView_checkedIcon));
ColorStateList colorStateList2 = MaterialResources.getColorStateList(this.materialCardView.getContext(), typedArray, R.styleable.MaterialCardView_rippleColor);
this.rippleColor = colorStateList2;
if (colorStateList2 == null) {
this.rippleColor = ColorStateList.valueOf(MaterialColors.getColor(this.materialCardView, R.attr.colorControlHighlight));
}
ColorStateList colorStateList3 = MaterialResources.getColorStateList(this.materialCardView.getContext(), typedArray, R.styleable.MaterialCardView_cardForegroundColor);
MaterialShapeDrawable materialShapeDrawable = this.foregroundContentDrawable;
if (colorStateList3 == null) {
colorStateList3 = ColorStateList.valueOf(0);
}
materialShapeDrawable.setFillColor(colorStateList3);
updateRippleColor();
updateElevation();
updateStroke();
this.materialCardView.setBackgroundInternal(insetDrawable(this.bgDrawable));
Drawable clickableForeground = this.materialCardView.isClickable() ? getClickableForeground() : this.foregroundContentDrawable;
this.fgDrawable = clickableForeground;
this.materialCardView.setForeground(insetDrawable(clickableForeground));
}
/* access modifiers changed from: package-private */
public boolean isBackgroundOverwritten() {
return this.isBackgroundOverwritten;
}
/* access modifiers changed from: package-private */
public void setBackgroundOverwritten(boolean z) {
this.isBackgroundOverwritten = z;
}
/* access modifiers changed from: package-private */
public void setStrokeColor(ColorStateList colorStateList) {
if (this.strokeColor != colorStateList) {
this.strokeColor = colorStateList;
updateStroke();
}
}
/* access modifiers changed from: package-private */
public int getStrokeColor() {
ColorStateList colorStateList = this.strokeColor;
if (colorStateList == null) {
return -1;
}
return colorStateList.getDefaultColor();
}
/* access modifiers changed from: package-private */
public ColorStateList getStrokeColorStateList() {
return this.strokeColor;
}
/* access modifiers changed from: package-private */
public void setStrokeWidth(int i) {
if (i != this.strokeWidth) {
this.strokeWidth = i;
updateStroke();
}
}
/* access modifiers changed from: package-private */
public int getStrokeWidth() {
return this.strokeWidth;
}
/* access modifiers changed from: package-private */
public MaterialShapeDrawable getBackground() {
return this.bgDrawable;
}
/* access modifiers changed from: package-private */
public void setCardBackgroundColor(ColorStateList colorStateList) {
this.bgDrawable.setFillColor(colorStateList);
}
/* access modifiers changed from: package-private */
public ColorStateList getCardBackgroundColor() {
return this.bgDrawable.getFillColor();
}
/* access modifiers changed from: package-private */
public void setUserContentPadding(int i, int i2, int i3, int i4) {
this.userContentPadding.set(i, i2, i3, i4);
updateContentPadding();
}
/* access modifiers changed from: package-private */
public Rect getUserContentPadding() {
return this.userContentPadding;
}
/* access modifiers changed from: package-private */
public void updateClickable() {
Drawable drawable = this.fgDrawable;
Drawable clickableForeground = this.materialCardView.isClickable() ? getClickableForeground() : this.foregroundContentDrawable;
this.fgDrawable = clickableForeground;
if (drawable != clickableForeground) {
updateInsetForeground(clickableForeground);
}
}
/* access modifiers changed from: package-private */
public void setCornerRadius(float f) {
setShapeAppearanceModel(this.shapeAppearanceModel.withCornerSize(f));
this.fgDrawable.invalidateSelf();
if (shouldAddCornerPaddingOutsideCardBackground() || shouldAddCornerPaddingInsideCardBackground()) {
updateContentPadding();
}
if (shouldAddCornerPaddingOutsideCardBackground()) {
updateInsets();
}
}
/* access modifiers changed from: package-private */
public float getCornerRadius() {
return this.bgDrawable.getTopLeftCornerResolvedSize();
}
/* access modifiers changed from: package-private */
public void setProgress(float f) {
this.bgDrawable.setInterpolation(f);
MaterialShapeDrawable materialShapeDrawable = this.foregroundContentDrawable;
if (materialShapeDrawable != null) {
materialShapeDrawable.setInterpolation(f);
}
MaterialShapeDrawable materialShapeDrawable2 = this.foregroundShapeDrawable;
if (materialShapeDrawable2 != null) {
materialShapeDrawable2.setInterpolation(f);
}
}
/* access modifiers changed from: package-private */
public float getProgress() {
return this.bgDrawable.getInterpolation();
}
/* access modifiers changed from: package-private */
public void updateElevation() {
this.bgDrawable.setElevation(this.materialCardView.getCardElevation());
}
/* access modifiers changed from: package-private */
public void updateInsets() {
if (!isBackgroundOverwritten()) {
this.materialCardView.setBackgroundInternal(insetDrawable(this.bgDrawable));
}
this.materialCardView.setForeground(insetDrawable(this.fgDrawable));
}
/* access modifiers changed from: package-private */
public void updateStroke() {
this.foregroundContentDrawable.setStroke((float) this.strokeWidth, this.strokeColor);
}
/* access modifiers changed from: package-private */
public void updateContentPadding() {
int calculateActualCornerPadding = (int) ((shouldAddCornerPaddingInsideCardBackground() || shouldAddCornerPaddingOutsideCardBackground() ? calculateActualCornerPadding() : 0.0f) - getParentCardViewCalculatedCornerPadding());
this.materialCardView.setAncestorContentPadding(this.userContentPadding.left + calculateActualCornerPadding, this.userContentPadding.top + calculateActualCornerPadding, this.userContentPadding.right + calculateActualCornerPadding, this.userContentPadding.bottom + calculateActualCornerPadding);
}
/* access modifiers changed from: package-private */
public void setCheckable(boolean z) {
this.checkable = z;
}
/* access modifiers changed from: package-private */
public boolean isCheckable() {
return this.checkable;
}
/* access modifiers changed from: package-private */
public void setRippleColor(ColorStateList colorStateList) {
this.rippleColor = colorStateList;
updateRippleColor();
}
/* access modifiers changed from: package-private */
public void setCheckedIconTint(ColorStateList colorStateList) {
this.checkedIconTint = colorStateList;
Drawable drawable = this.checkedIcon;
if (drawable != null) {
DrawableCompat.setTintList(drawable, colorStateList);
}
}
/* access modifiers changed from: package-private */
public ColorStateList getCheckedIconTint() {
return this.checkedIconTint;
}
/* access modifiers changed from: package-private */
public ColorStateList getRippleColor() {
return this.rippleColor;
}
/* access modifiers changed from: package-private */
public Drawable getCheckedIcon() {
return this.checkedIcon;
}
/* access modifiers changed from: package-private */
public void setCheckedIcon(Drawable drawable) {
this.checkedIcon = drawable;
if (drawable != null) {
Drawable wrap = DrawableCompat.wrap(drawable.mutate());
this.checkedIcon = wrap;
DrawableCompat.setTintList(wrap, this.checkedIconTint);
}
if (this.clickableForegroundDrawable != null) {
this.clickableForegroundDrawable.setDrawableByLayerId(R.id.mtrl_card_checked_layer_id, createCheckedIconLayer());
}
}
/* access modifiers changed from: package-private */
public void onMeasure(int i, int i2) {
int i3;
int i4;
if (this.clickableForegroundDrawable != null) {
int i5 = this.checkedIconMargin;
int i6 = this.checkedIconSize;
int i7 = (i - i5) - i6;
int i8 = (i2 - i5) - i6;
if (ViewCompat.getLayoutDirection(this.materialCardView) == 1) {
i3 = i7;
i4 = i5;
} else {
i4 = i7;
i3 = i5;
}
this.clickableForegroundDrawable.setLayerInset(2, i4, this.checkedIconMargin, i3, i8);
}
}
/* access modifiers changed from: package-private */
public void forceRippleRedraw() {
Drawable drawable = this.rippleDrawable;
if (drawable != null) {
Rect bounds = drawable.getBounds();
int i = bounds.bottom;
this.rippleDrawable.setBounds(bounds.left, bounds.top, bounds.right, i - 1);
this.rippleDrawable.setBounds(bounds.left, bounds.top, bounds.right, i);
}
}
/* access modifiers changed from: package-private */
public void setShapeAppearanceModel(ShapeAppearanceModel shapeAppearanceModel2) {
this.shapeAppearanceModel = shapeAppearanceModel2;
this.bgDrawable.setShapeAppearanceModel(shapeAppearanceModel2);
MaterialShapeDrawable materialShapeDrawable = this.foregroundContentDrawable;
if (materialShapeDrawable != null) {
materialShapeDrawable.setShapeAppearanceModel(shapeAppearanceModel2);
}
MaterialShapeDrawable materialShapeDrawable2 = this.foregroundShapeDrawable;
if (materialShapeDrawable2 != null) {
materialShapeDrawable2.setShapeAppearanceModel(shapeAppearanceModel2);
}
MaterialShapeDrawable materialShapeDrawable3 = this.compatRippleDrawable;
if (materialShapeDrawable3 != null) {
materialShapeDrawable3.setShapeAppearanceModel(shapeAppearanceModel2);
}
}
/* access modifiers changed from: package-private */
public ShapeAppearanceModel getShapeAppearanceModel() {
return this.shapeAppearanceModel;
}
private void updateInsetForeground(Drawable drawable) {
if (Build.VERSION.SDK_INT < 23 || !(this.materialCardView.getForeground() instanceof InsetDrawable)) {
this.materialCardView.setForeground(insetDrawable(drawable));
} else {
((InsetDrawable) this.materialCardView.getForeground()).setDrawable(drawable);
}
}
private Drawable insetDrawable(Drawable drawable) {
int i;
int i2;
if ((Build.VERSION.SDK_INT < 21) || this.materialCardView.getUseCompatPadding()) {
int ceil = (int) Math.ceil((double) calculateVerticalBackgroundPadding());
i2 = (int) Math.ceil((double) calculateHorizontalBackgroundPadding());
i = ceil;
} else {
i2 = 0;
i = 0;
}
return new InsetDrawable(drawable, i2, i, i2, i) {
public boolean getPadding(Rect rect) {
return false;
}
};
}
private float calculateVerticalBackgroundPadding() {
return (this.materialCardView.getMaxCardElevation() * CARD_VIEW_SHADOW_MULTIPLIER) + (shouldAddCornerPaddingOutsideCardBackground() ? calculateActualCornerPadding() : 0.0f);
}
private float calculateHorizontalBackgroundPadding() {
return this.materialCardView.getMaxCardElevation() + (shouldAddCornerPaddingOutsideCardBackground() ? calculateActualCornerPadding() : 0.0f);
}
private boolean canClipToOutline() {
return Build.VERSION.SDK_INT >= 21 && this.bgDrawable.isRoundRect();
}
private float getParentCardViewCalculatedCornerPadding() {
if (!this.materialCardView.getPreventCornerOverlap()) {
return 0.0f;
}
if (Build.VERSION.SDK_INT < 21 || this.materialCardView.getUseCompatPadding()) {
return (float) ((1.0d - COS_45) * ((double) this.materialCardView.getCardViewRadius()));
}
return 0.0f;
}
private boolean shouldAddCornerPaddingInsideCardBackground() {
return this.materialCardView.getPreventCornerOverlap() && !canClipToOutline();
}
private boolean shouldAddCornerPaddingOutsideCardBackground() {
return this.materialCardView.getPreventCornerOverlap() && canClipToOutline() && this.materialCardView.getUseCompatPadding();
}
private float calculateActualCornerPadding() {
return Math.max(Math.max(calculateCornerPaddingForCornerTreatment(this.shapeAppearanceModel.getTopLeftCorner(), this.bgDrawable.getTopLeftCornerResolvedSize()), calculateCornerPaddingForCornerTreatment(this.shapeAppearanceModel.getTopRightCorner(), this.bgDrawable.getTopRightCornerResolvedSize())), Math.max(calculateCornerPaddingForCornerTreatment(this.shapeAppearanceModel.getBottomRightCorner(), this.bgDrawable.getBottomRightCornerResolvedSize()), calculateCornerPaddingForCornerTreatment(this.shapeAppearanceModel.getBottomLeftCorner(), this.bgDrawable.getBottomLeftCornerResolvedSize())));
}
private float calculateCornerPaddingForCornerTreatment(CornerTreatment cornerTreatment, float f) {
if (cornerTreatment instanceof RoundedCornerTreatment) {
return (float) ((1.0d - COS_45) * ((double) f));
}
if (cornerTreatment instanceof CutCornerTreatment) {
return f / 2.0f;
}
return 0.0f;
}
private Drawable getClickableForeground() {
if (this.rippleDrawable == null) {
this.rippleDrawable = createForegroundRippleDrawable();
}
if (this.clickableForegroundDrawable == null) {
LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{this.rippleDrawable, this.foregroundContentDrawable, createCheckedIconLayer()});
this.clickableForegroundDrawable = layerDrawable;
layerDrawable.setId(2, R.id.mtrl_card_checked_layer_id);
}
return this.clickableForegroundDrawable;
}
private Drawable createForegroundRippleDrawable() {
if (!RippleUtils.USE_FRAMEWORK_RIPPLE) {
return createCompatRippleDrawable();
}
this.foregroundShapeDrawable = createForegroundShapeDrawable();
return new RippleDrawable(this.rippleColor, (Drawable) null, this.foregroundShapeDrawable);
}
private Drawable createCompatRippleDrawable() {
StateListDrawable stateListDrawable = new StateListDrawable();
MaterialShapeDrawable createForegroundShapeDrawable = createForegroundShapeDrawable();
this.compatRippleDrawable = createForegroundShapeDrawable;
createForegroundShapeDrawable.setFillColor(this.rippleColor);
stateListDrawable.addState(new int[]{16842919}, this.compatRippleDrawable);
return stateListDrawable;
}
private void updateRippleColor() {
Drawable drawable;
if (!RippleUtils.USE_FRAMEWORK_RIPPLE || (drawable = this.rippleDrawable) == null) {
MaterialShapeDrawable materialShapeDrawable = this.compatRippleDrawable;
if (materialShapeDrawable != null) {
materialShapeDrawable.setFillColor(this.rippleColor);
return;
}
return;
}
((RippleDrawable) drawable).setColor(this.rippleColor);
}
private Drawable createCheckedIconLayer() {
StateListDrawable stateListDrawable = new StateListDrawable();
Drawable drawable = this.checkedIcon;
if (drawable != null) {
stateListDrawable.addState(CHECKED_STATE_SET, drawable);
}
return stateListDrawable;
}
private MaterialShapeDrawable createForegroundShapeDrawable() {
return new MaterialShapeDrawable(this.shapeAppearanceModel);
}
}
Download file