CrackMe.apk
Download file
package com.google.android.material.internal;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.TypedValue;
import androidx.appcompat.view.ContextThemeWrapper;
import androidx.appcompat.widget.TintTypedArray;
import com.google.android.material.R;
public final class ThemeEnforcement {
private static final int[] ANDROID_THEME_OVERLAY_ATTRS = {16842752, R.attr.theme};
private static final int[] APPCOMPAT_CHECK_ATTRS = {R.attr.colorPrimary};
private static final String APPCOMPAT_THEME_NAME = "Theme.AppCompat";
private static final int[] MATERIAL_CHECK_ATTRS = {R.attr.colorPrimaryVariant};
private static final String MATERIAL_THEME_NAME = "Theme.MaterialComponents";
private static final int[] MATERIAL_THEME_OVERLAY_ATTR = {R.attr.materialThemeOverlay};
private ThemeEnforcement() {
}
public static TypedArray obtainStyledAttributes(Context context, AttributeSet attributeSet, int[] iArr, int i, int i2, int... iArr2) {
checkCompatibleTheme(context, attributeSet, i, i2);
checkTextAppearance(context, attributeSet, iArr, i, i2, iArr2);
return context.obtainStyledAttributes(attributeSet, iArr, i, i2);
}
public static TintTypedArray obtainTintedStyledAttributes(Context context, AttributeSet attributeSet, int[] iArr, int i, int i2, int... iArr2) {
checkCompatibleTheme(context, attributeSet, i, i2);
checkTextAppearance(context, attributeSet, iArr, i, i2, iArr2);
return TintTypedArray.obtainStyledAttributes(context, attributeSet, iArr, i, i2);
}
private static void checkCompatibleTheme(Context context, AttributeSet attributeSet, int i, int i2) {
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, R.styleable.ThemeEnforcement, i, i2);
boolean z = obtainStyledAttributes.getBoolean(R.styleable.ThemeEnforcement_enforceMaterialTheme, false);
obtainStyledAttributes.recycle();
if (z) {
TypedValue typedValue = new TypedValue();
if (!context.getTheme().resolveAttribute(R.attr.isMaterialTheme, typedValue, true) || (typedValue.type == 18 && typedValue.data == 0)) {
checkMaterialTheme(context);
}
}
checkAppCompatTheme(context);
}
private static void checkTextAppearance(Context context, AttributeSet attributeSet, int[] iArr, int i, int i2, int... iArr2) {
boolean z;
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, R.styleable.ThemeEnforcement, i, i2);
boolean z2 = false;
if (!obtainStyledAttributes.getBoolean(R.styleable.ThemeEnforcement_enforceTextAppearance, false)) {
obtainStyledAttributes.recycle();
return;
}
if (iArr2 == null || iArr2.length == 0) {
if (obtainStyledAttributes.getResourceId(R.styleable.ThemeEnforcement_android_textAppearance, -1) != -1) {
z2 = true;
}
z = z2;
} else {
z = isCustomTextAppearanceValid(context, attributeSet, iArr, i, i2, iArr2);
}
obtainStyledAttributes.recycle();
if (!z) {
throw new IllegalArgumentException("This component requires that you specify a valid TextAppearance attribute. Update your app theme to inherit from Theme.MaterialComponents (or a descendant).");
}
}
private static boolean isCustomTextAppearanceValid(Context context, AttributeSet attributeSet, int[] iArr, int i, int i2, int... iArr2) {
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, iArr, i, i2);
for (int resourceId : iArr2) {
if (obtainStyledAttributes.getResourceId(resourceId, -1) == -1) {
obtainStyledAttributes.recycle();
return false;
}
}
obtainStyledAttributes.recycle();
return true;
}
public static void checkAppCompatTheme(Context context) {
checkTheme(context, APPCOMPAT_CHECK_ATTRS, APPCOMPAT_THEME_NAME);
}
public static void checkMaterialTheme(Context context) {
checkTheme(context, MATERIAL_CHECK_ATTRS, MATERIAL_THEME_NAME);
}
public static boolean isAppCompatTheme(Context context) {
return isTheme(context, APPCOMPAT_CHECK_ATTRS);
}
public static boolean isMaterialTheme(Context context) {
return isTheme(context, MATERIAL_CHECK_ATTRS);
}
private static boolean isTheme(Context context, int[] iArr) {
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(iArr);
for (int i = 0; i < iArr.length; i++) {
if (!obtainStyledAttributes.hasValue(i)) {
obtainStyledAttributes.recycle();
return false;
}
}
obtainStyledAttributes.recycle();
return true;
}
private static void checkTheme(Context context, int[] iArr, String str) {
if (!isTheme(context, iArr)) {
throw new IllegalArgumentException("The style on this component requires your app theme to be " + str + " (or a descendant).");
}
}
public static Context createThemedContext(Context context, AttributeSet attributeSet, int i, int i2) {
int obtainMaterialThemeOverlayId = obtainMaterialThemeOverlayId(context, attributeSet, i, i2);
if (obtainMaterialThemeOverlayId == 0) {
return context;
}
if ((context instanceof ContextThemeWrapper) && ((ContextThemeWrapper) context).getThemeResId() == obtainMaterialThemeOverlayId) {
return context;
}
ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(context, obtainMaterialThemeOverlayId);
int obtainAndroidThemeOverlayId = obtainAndroidThemeOverlayId(contextThemeWrapper, attributeSet);
return obtainAndroidThemeOverlayId != 0 ? new ContextThemeWrapper((Context) contextThemeWrapper, obtainAndroidThemeOverlayId) : contextThemeWrapper;
}
private static int obtainAndroidThemeOverlayId(Context context, AttributeSet attributeSet) {
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, ANDROID_THEME_OVERLAY_ATTRS);
int resourceId = obtainStyledAttributes.getResourceId(0, 0);
int resourceId2 = obtainStyledAttributes.getResourceId(1, 0);
obtainStyledAttributes.recycle();
return resourceId != 0 ? resourceId : resourceId2;
}
private static int obtainMaterialThemeOverlayId(Context context, AttributeSet attributeSet, int i, int i2) {
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, MATERIAL_THEME_OVERLAY_ATTR, i, i2);
int resourceId = obtainStyledAttributes.getResourceId(0, 0);
obtainStyledAttributes.recycle();
return resourceId;
}
}
Download file