CrackMe.apk
Download file
package androidx.core.content.res;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.util.SparseArray;
import android.util.TypedValue;
import androidx.core.util.ObjectsCompat;
import androidx.core.util.Preconditions;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.WeakHashMap;
public final class ResourcesCompat {
public static final int ID_NULL = 0;
private static final String TAG = "ResourcesCompat";
private static final Object sColorStateCacheLock = new Object();
private static final WeakHashMap<ColorStateListCacheKey, SparseArray<ColorStateListCacheEntry>> sColorStateCaches = new WeakHashMap<>(0);
private static final ThreadLocal<TypedValue> sTempTypedValue = new ThreadLocal<>();
public static Drawable getDrawable(Resources resources, int i, Resources.Theme theme) throws Resources.NotFoundException {
if (Build.VERSION.SDK_INT >= 21) {
return resources.getDrawable(i, theme);
}
return resources.getDrawable(i);
}
public static Drawable getDrawableForDensity(Resources resources, int i, int i2, Resources.Theme theme) throws Resources.NotFoundException {
if (Build.VERSION.SDK_INT >= 21) {
return resources.getDrawableForDensity(i, i2, theme);
}
if (Build.VERSION.SDK_INT >= 15) {
return resources.getDrawableForDensity(i, i2);
}
return resources.getDrawable(i);
}
public static int getColor(Resources resources, int i, Resources.Theme theme) throws Resources.NotFoundException {
if (Build.VERSION.SDK_INT >= 23) {
return resources.getColor(i, theme);
}
return resources.getColor(i);
}
public static ColorStateList getColorStateList(Resources resources, int i, Resources.Theme theme) throws Resources.NotFoundException {
ColorStateListCacheKey colorStateListCacheKey = new ColorStateListCacheKey(resources, theme);
ColorStateList cachedColorStateList = getCachedColorStateList(colorStateListCacheKey, i);
if (cachedColorStateList != null) {
return cachedColorStateList;
}
ColorStateList inflateColorStateList = inflateColorStateList(resources, i, theme);
if (inflateColorStateList != null) {
addColorStateListToCache(colorStateListCacheKey, i, inflateColorStateList);
return inflateColorStateList;
} else if (Build.VERSION.SDK_INT >= 23) {
return Api23Impl.getColorStateList(resources, i, theme);
} else {
return resources.getColorStateList(i);
}
}
private static ColorStateList inflateColorStateList(Resources resources, int i, Resources.Theme theme) {
if (isColorInt(resources, i)) {
return null;
}
try {
return ColorStateListInflaterCompat.createFromXml(resources, resources.getXml(i), theme);
} catch (Exception e) {
Log.w(TAG, "Failed to inflate ColorStateList, leaving it to the framework", e);
return null;
}
}
/* JADX WARNING: Code restructure failed: missing block: B:16:0x0031, code lost:
return null;
*/
/* Code decompiled incorrectly, please refer to instructions dump. */
private static android.content.res.ColorStateList getCachedColorStateList(androidx.core.content.res.ResourcesCompat.ColorStateListCacheKey r4, int r5) {
/*
java.lang.Object r0 = sColorStateCacheLock
monitor-enter(r0)
java.util.WeakHashMap<androidx.core.content.res.ResourcesCompat$ColorStateListCacheKey, android.util.SparseArray<androidx.core.content.res.ResourcesCompat$ColorStateListCacheEntry>> r1 = sColorStateCaches // Catch:{ all -> 0x0033 }
java.lang.Object r1 = r1.get(r4) // Catch:{ all -> 0x0033 }
android.util.SparseArray r1 = (android.util.SparseArray) r1 // Catch:{ all -> 0x0033 }
if (r1 == 0) goto L_0x0030
int r2 = r1.size() // Catch:{ all -> 0x0033 }
if (r2 <= 0) goto L_0x0030
java.lang.Object r2 = r1.get(r5) // Catch:{ all -> 0x0033 }
androidx.core.content.res.ResourcesCompat$ColorStateListCacheEntry r2 = (androidx.core.content.res.ResourcesCompat.ColorStateListCacheEntry) r2 // Catch:{ all -> 0x0033 }
if (r2 == 0) goto L_0x0030
android.content.res.Configuration r3 = r2.mConfiguration // Catch:{ all -> 0x0033 }
android.content.res.Resources r4 = r4.mResources // Catch:{ all -> 0x0033 }
android.content.res.Configuration r4 = r4.getConfiguration() // Catch:{ all -> 0x0033 }
boolean r4 = r3.equals(r4) // Catch:{ all -> 0x0033 }
if (r4 == 0) goto L_0x002d
android.content.res.ColorStateList r4 = r2.mValue // Catch:{ all -> 0x0033 }
monitor-exit(r0) // Catch:{ all -> 0x0033 }
return r4
L_0x002d:
r1.remove(r5) // Catch:{ all -> 0x0033 }
L_0x0030:
monitor-exit(r0) // Catch:{ all -> 0x0033 }
r4 = 0
return r4
L_0x0033:
r4 = move-exception
monitor-exit(r0) // Catch:{ all -> 0x0033 }
throw r4
*/
throw new UnsupportedOperationException("Method not decompiled: androidx.core.content.res.ResourcesCompat.getCachedColorStateList(androidx.core.content.res.ResourcesCompat$ColorStateListCacheKey, int):android.content.res.ColorStateList");
}
private static void addColorStateListToCache(ColorStateListCacheKey colorStateListCacheKey, int i, ColorStateList colorStateList) {
synchronized (sColorStateCacheLock) {
WeakHashMap<ColorStateListCacheKey, SparseArray<ColorStateListCacheEntry>> weakHashMap = sColorStateCaches;
SparseArray sparseArray = weakHashMap.get(colorStateListCacheKey);
if (sparseArray == null) {
sparseArray = new SparseArray();
weakHashMap.put(colorStateListCacheKey, sparseArray);
}
sparseArray.append(i, new ColorStateListCacheEntry(colorStateList, colorStateListCacheKey.mResources.getConfiguration()));
}
}
private static boolean isColorInt(Resources resources, int i) {
TypedValue typedValue = getTypedValue();
resources.getValue(i, typedValue, true);
if (typedValue.type < 28 || typedValue.type > 31) {
return false;
}
return true;
}
private static TypedValue getTypedValue() {
ThreadLocal<TypedValue> threadLocal = sTempTypedValue;
TypedValue typedValue = threadLocal.get();
if (typedValue != null) {
return typedValue;
}
TypedValue typedValue2 = new TypedValue();
threadLocal.set(typedValue2);
return typedValue2;
}
private static final class ColorStateListCacheKey {
final Resources mResources;
final Resources.Theme mTheme;
ColorStateListCacheKey(Resources resources, Resources.Theme theme) {
this.mResources = resources;
this.mTheme = theme;
}
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
ColorStateListCacheKey colorStateListCacheKey = (ColorStateListCacheKey) obj;
if (!this.mResources.equals(colorStateListCacheKey.mResources) || !ObjectsCompat.equals(this.mTheme, colorStateListCacheKey.mTheme)) {
return false;
}
return true;
}
public int hashCode() {
return ObjectsCompat.hash(this.mResources, this.mTheme);
}
}
private static class ColorStateListCacheEntry {
final Configuration mConfiguration;
final ColorStateList mValue;
ColorStateListCacheEntry(ColorStateList colorStateList, Configuration configuration) {
this.mValue = colorStateList;
this.mConfiguration = configuration;
}
}
public static float getFloat(Resources resources, int i) {
if (Build.VERSION.SDK_INT >= 29) {
return ImplApi29.getFloat(resources, i);
}
TypedValue typedValue = getTypedValue();
resources.getValue(i, typedValue, true);
if (typedValue.type == 4) {
return typedValue.getFloat();
}
throw new Resources.NotFoundException("Resource ID #0x" + Integer.toHexString(i) + " type #0x" + Integer.toHexString(typedValue.type) + " is not valid");
}
public static Typeface getFont(Context context, int i) throws Resources.NotFoundException {
if (context.isRestricted()) {
return null;
}
return loadFont(context, i, new TypedValue(), 0, (FontCallback) null, (Handler) null, false, false);
}
public static Typeface getCachedFont(Context context, int i) throws Resources.NotFoundException {
if (context.isRestricted()) {
return null;
}
return loadFont(context, i, new TypedValue(), 0, (FontCallback) null, (Handler) null, false, true);
}
public static abstract class FontCallback {
public abstract void onFontRetrievalFailed(int i);
public abstract void onFontRetrieved(Typeface typeface);
public final void callbackSuccessAsync(final Typeface typeface, Handler handler) {
getHandler(handler).post(new Runnable() {
public void run() {
FontCallback.this.onFontRetrieved(typeface);
}
});
}
public final void callbackFailAsync(final int i, Handler handler) {
getHandler(handler).post(new Runnable() {
public void run() {
FontCallback.this.onFontRetrievalFailed(i);
}
});
}
public static Handler getHandler(Handler handler) {
return handler == null ? new Handler(Looper.getMainLooper()) : handler;
}
}
public static void getFont(Context context, int i, FontCallback fontCallback, Handler handler) throws Resources.NotFoundException {
Preconditions.checkNotNull(fontCallback);
if (context.isRestricted()) {
fontCallback.callbackFailAsync(-4, handler);
return;
}
loadFont(context, i, new TypedValue(), 0, fontCallback, handler, false, false);
}
public static Typeface getFont(Context context, int i, TypedValue typedValue, int i2, FontCallback fontCallback) throws Resources.NotFoundException {
if (context.isRestricted()) {
return null;
}
return loadFont(context, i, typedValue, i2, fontCallback, (Handler) null, true, false);
}
private static Typeface loadFont(Context context, int i, TypedValue typedValue, int i2, FontCallback fontCallback, Handler handler, boolean z, boolean z2) {
Resources resources = context.getResources();
int i3 = i;
resources.getValue(i, typedValue, true);
Typeface loadFont = loadFont(context, resources, typedValue, i, i2, fontCallback, handler, z, z2);
if (loadFont != null || fontCallback != null || z2) {
return loadFont;
}
throw new Resources.NotFoundException("Font resource ID #0x" + Integer.toHexString(i) + " could not be retrieved.");
}
/* JADX WARNING: Removed duplicated region for block: B:36:0x00a8 */
/* Code decompiled incorrectly, please refer to instructions dump. */
private static android.graphics.Typeface loadFont(android.content.Context r15, android.content.res.Resources r16, android.util.TypedValue r17, int r18, int r19, androidx.core.content.res.ResourcesCompat.FontCallback r20, android.os.Handler r21, boolean r22, boolean r23) {
/*
r0 = r16
r1 = r17
r4 = r18
r5 = r19
r9 = r20
r10 = r21
java.lang.String r11 = "ResourcesCompat"
java.lang.CharSequence r2 = r1.string
if (r2 == 0) goto L_0x00ac
java.lang.CharSequence r1 = r1.string
java.lang.String r12 = r1.toString()
java.lang.String r1 = "res/"
boolean r1 = r12.startsWith(r1)
r13 = -3
r14 = 0
if (r1 != 0) goto L_0x0028
if (r9 == 0) goto L_0x0027
r9.callbackFailAsync(r13, r10)
L_0x0027:
return r14
L_0x0028:
android.graphics.Typeface r1 = androidx.core.graphics.TypefaceCompat.findFromCache(r0, r4, r5)
if (r1 == 0) goto L_0x0034
if (r9 == 0) goto L_0x0033
r9.callbackSuccessAsync(r1, r10)
L_0x0033:
return r1
L_0x0034:
if (r23 == 0) goto L_0x0037
return r14
L_0x0037:
java.lang.String r1 = r12.toLowerCase() // Catch:{ XmlPullParserException -> 0x0091, IOException -> 0x007b }
java.lang.String r2 = ".xml"
boolean r1 = r1.endsWith(r2) // Catch:{ XmlPullParserException -> 0x0091, IOException -> 0x007b }
if (r1 == 0) goto L_0x006a
android.content.res.XmlResourceParser r1 = r0.getXml(r4) // Catch:{ XmlPullParserException -> 0x0091, IOException -> 0x007b }
androidx.core.content.res.FontResourcesParserCompat$FamilyResourceEntry r2 = androidx.core.content.res.FontResourcesParserCompat.parse(r1, r0) // Catch:{ XmlPullParserException -> 0x0091, IOException -> 0x007b }
if (r2 != 0) goto L_0x0058
java.lang.String r0 = "Failed to find font-family tag"
android.util.Log.e(r11, r0) // Catch:{ XmlPullParserException -> 0x0091, IOException -> 0x007b }
if (r9 == 0) goto L_0x0057
r9.callbackFailAsync(r13, r10) // Catch:{ XmlPullParserException -> 0x0091, IOException -> 0x007b }
L_0x0057:
return r14
L_0x0058:
r1 = r15
r3 = r16
r4 = r18
r5 = r19
r6 = r20
r7 = r21
r8 = r22
android.graphics.Typeface r0 = androidx.core.graphics.TypefaceCompat.createFromResourcesFamilyXml(r1, r2, r3, r4, r5, r6, r7, r8) // Catch:{ XmlPullParserException -> 0x0091, IOException -> 0x007b }
return r0
L_0x006a:
r1 = r15
android.graphics.Typeface r0 = androidx.core.graphics.TypefaceCompat.createFromResourcesFontFile(r15, r0, r4, r12, r5) // Catch:{ XmlPullParserException -> 0x0091, IOException -> 0x007b }
if (r9 == 0) goto L_0x007a
if (r0 == 0) goto L_0x0077
r9.callbackSuccessAsync(r0, r10) // Catch:{ XmlPullParserException -> 0x0091, IOException -> 0x007b }
goto L_0x007a
L_0x0077:
r9.callbackFailAsync(r13, r10) // Catch:{ XmlPullParserException -> 0x0091, IOException -> 0x007b }
L_0x007a:
return r0
L_0x007b:
r0 = move-exception
java.lang.StringBuilder r1 = new java.lang.StringBuilder
r1.<init>()
java.lang.String r2 = "Failed to read xml resource "
r1.append(r2)
r1.append(r12)
java.lang.String r1 = r1.toString()
android.util.Log.e(r11, r1, r0)
goto L_0x00a6
L_0x0091:
r0 = move-exception
java.lang.StringBuilder r1 = new java.lang.StringBuilder
r1.<init>()
java.lang.String r2 = "Failed to parse xml resource "
r1.append(r2)
r1.append(r12)
java.lang.String r1 = r1.toString()
android.util.Log.e(r11, r1, r0)
L_0x00a6:
if (r9 == 0) goto L_0x00ab
r9.callbackFailAsync(r13, r10)
L_0x00ab:
return r14
L_0x00ac:
android.content.res.Resources$NotFoundException r2 = new android.content.res.Resources$NotFoundException
java.lang.StringBuilder r3 = new java.lang.StringBuilder
r3.<init>()
java.lang.String r5 = "Resource \""
r3.append(r5)
java.lang.String r0 = r0.getResourceName(r4)
r3.append(r0)
java.lang.String r0 = "\" ("
r3.append(r0)
java.lang.String r0 = java.lang.Integer.toHexString(r18)
r3.append(r0)
java.lang.String r0 = ") is not a Font: "
r3.append(r0)
r3.append(r1)
java.lang.String r0 = r3.toString()
r2.<init>(r0)
throw r2
*/
throw new UnsupportedOperationException("Method not decompiled: androidx.core.content.res.ResourcesCompat.loadFont(android.content.Context, android.content.res.Resources, android.util.TypedValue, int, int, androidx.core.content.res.ResourcesCompat$FontCallback, android.os.Handler, boolean, boolean):android.graphics.Typeface");
}
static class ImplApi29 {
private ImplApi29() {
}
static float getFloat(Resources resources, int i) {
return resources.getFloat(i);
}
}
static class Api23Impl {
private Api23Impl() {
}
static ColorStateList getColorStateList(Resources resources, int i, Resources.Theme theme) {
return resources.getColorStateList(i, theme);
}
}
private ResourcesCompat() {
}
public static final class ThemeCompat {
private ThemeCompat() {
}
public static void rebase(Resources.Theme theme) {
if (Build.VERSION.SDK_INT >= 29) {
ImplApi29.rebase(theme);
} else if (Build.VERSION.SDK_INT >= 23) {
ImplApi23.rebase(theme);
}
}
static class ImplApi29 {
private ImplApi29() {
}
static void rebase(Resources.Theme theme) {
theme.rebase();
}
}
static class ImplApi23 {
private static Method sRebaseMethod;
private static boolean sRebaseMethodFetched;
private static final Object sRebaseMethodLock = new Object();
private ImplApi23() {
}
static void rebase(Resources.Theme theme) {
synchronized (sRebaseMethodLock) {
if (!sRebaseMethodFetched) {
try {
Method declaredMethod = Resources.Theme.class.getDeclaredMethod("rebase", new Class[0]);
sRebaseMethod = declaredMethod;
declaredMethod.setAccessible(true);
} catch (NoSuchMethodException e) {
Log.i(ResourcesCompat.TAG, "Failed to retrieve rebase() method", e);
}
sRebaseMethodFetched = true;
}
Method method = sRebaseMethod;
if (method != null) {
try {
method.invoke(theme, new Object[0]);
} catch (IllegalAccessException | InvocationTargetException e2) {
Log.i(ResourcesCompat.TAG, "Failed to invoke rebase() method via reflection", e2);
sRebaseMethod = null;
}
}
}
}
}
}
}
Download file