mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2025-01-09 13:43:22 +00:00
463 lines
20 KiB
Java
463 lines
20 KiB
Java
package androidx.appcompat.widget;
|
|
|
|
import android.content.Context;
|
|
import android.content.res.ColorStateList;
|
|
import android.content.res.Resources;
|
|
import android.content.res.XmlResourceParser;
|
|
import android.graphics.PorterDuff;
|
|
import android.graphics.PorterDuffColorFilter;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.graphics.drawable.LayerDrawable;
|
|
import android.util.AttributeSet;
|
|
import android.util.Log;
|
|
import android.util.TypedValue;
|
|
import android.util.Xml;
|
|
import androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat;
|
|
import androidx.appcompat.resources.Compatibility;
|
|
import androidx.appcompat.resources.R;
|
|
import androidx.collection.LongSparseArray;
|
|
import androidx.collection.LruCache;
|
|
import androidx.collection.SimpleArrayMap;
|
|
import androidx.collection.SparseArrayCompat;
|
|
import androidx.core.content.ContextCompat;
|
|
import androidx.core.graphics.drawable.DrawableCompat;
|
|
import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat;
|
|
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
|
|
import java.lang.ref.WeakReference;
|
|
import java.util.WeakHashMap;
|
|
import org.xmlpull.v1.XmlPullParser;
|
|
import org.xmlpull.v1.XmlPullParserException;
|
|
|
|
/* loaded from: classes.dex */
|
|
public final class ResourceManagerInternal {
|
|
private static final boolean DEBUG = false;
|
|
private static ResourceManagerInternal INSTANCE = null;
|
|
private static final String PLATFORM_VD_CLAZZ = "android.graphics.drawable.VectorDrawable";
|
|
private static final String SKIP_DRAWABLE_TAG = "appcompat_skip_skip";
|
|
private static final String TAG = "ResourceManagerInternal";
|
|
private SimpleArrayMap<String, InflateDelegate> mDelegates;
|
|
private final WeakHashMap<Context, LongSparseArray<WeakReference<Drawable.ConstantState>>> mDrawableCaches = new WeakHashMap<>(0);
|
|
private boolean mHasCheckedVectorDrawableSetup;
|
|
private ResourceManagerHooks mHooks;
|
|
private SparseArrayCompat<String> mKnownDrawableIdTags;
|
|
private WeakHashMap<Context, SparseArrayCompat<ColorStateList>> mTintLists;
|
|
private TypedValue mTypedValue;
|
|
private static final PorterDuff.Mode DEFAULT_MODE = PorterDuff.Mode.SRC_IN;
|
|
private static final ColorFilterLruCache COLOR_FILTER_CACHE = new ColorFilterLruCache(6);
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
/* loaded from: classes.dex */
|
|
public interface InflateDelegate {
|
|
Drawable createFromXmlInner(Context context, XmlPullParser xmlPullParser, AttributeSet attributeSet, Resources.Theme theme);
|
|
}
|
|
|
|
/* loaded from: classes.dex */
|
|
public interface ResourceManagerHooks {
|
|
Drawable createDrawableFor(ResourceManagerInternal resourceManagerInternal, Context context, int i);
|
|
|
|
ColorStateList getTintListForDrawableRes(Context context, int i);
|
|
|
|
PorterDuff.Mode getTintModeForDrawableRes(int i);
|
|
|
|
boolean tintDrawable(Context context, int i, Drawable drawable);
|
|
|
|
boolean tintDrawableUsingColorFilter(Context context, int i, Drawable drawable);
|
|
}
|
|
|
|
private static void installDefaultInflateDelegates(ResourceManagerInternal resourceManagerInternal) {
|
|
}
|
|
|
|
public static synchronized ResourceManagerInternal get() {
|
|
ResourceManagerInternal resourceManagerInternal;
|
|
synchronized (ResourceManagerInternal.class) {
|
|
if (INSTANCE == null) {
|
|
ResourceManagerInternal resourceManagerInternal2 = new ResourceManagerInternal();
|
|
INSTANCE = resourceManagerInternal2;
|
|
installDefaultInflateDelegates(resourceManagerInternal2);
|
|
}
|
|
resourceManagerInternal = INSTANCE;
|
|
}
|
|
return resourceManagerInternal;
|
|
}
|
|
|
|
public synchronized void setHooks(ResourceManagerHooks resourceManagerHooks) {
|
|
this.mHooks = resourceManagerHooks;
|
|
}
|
|
|
|
public synchronized Drawable getDrawable(Context context, int i) {
|
|
return getDrawable(context, i, false);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
public synchronized Drawable getDrawable(Context context, int i, boolean z) {
|
|
Drawable loadDrawableFromDelegates;
|
|
checkVectorDrawableSetup(context);
|
|
loadDrawableFromDelegates = loadDrawableFromDelegates(context, i);
|
|
if (loadDrawableFromDelegates == null) {
|
|
loadDrawableFromDelegates = createDrawableIfNeeded(context, i);
|
|
}
|
|
if (loadDrawableFromDelegates == null) {
|
|
loadDrawableFromDelegates = ContextCompat.getDrawable(context, i);
|
|
}
|
|
if (loadDrawableFromDelegates != null) {
|
|
loadDrawableFromDelegates = tintDrawable(context, i, z, loadDrawableFromDelegates);
|
|
}
|
|
if (loadDrawableFromDelegates != null) {
|
|
DrawableUtils.fixDrawable(loadDrawableFromDelegates);
|
|
}
|
|
return loadDrawableFromDelegates;
|
|
}
|
|
|
|
public synchronized void onConfigurationChanged(Context context) {
|
|
LongSparseArray<WeakReference<Drawable.ConstantState>> longSparseArray = this.mDrawableCaches.get(context);
|
|
if (longSparseArray != null) {
|
|
longSparseArray.clear();
|
|
}
|
|
}
|
|
|
|
private static long createCacheKey(TypedValue typedValue) {
|
|
return (typedValue.assetCookie << 32) | typedValue.data;
|
|
}
|
|
|
|
private Drawable createDrawableIfNeeded(Context context, int i) {
|
|
if (this.mTypedValue == null) {
|
|
this.mTypedValue = new TypedValue();
|
|
}
|
|
TypedValue typedValue = this.mTypedValue;
|
|
context.getResources().getValue(i, typedValue, true);
|
|
long createCacheKey = createCacheKey(typedValue);
|
|
Drawable cachedDrawable = getCachedDrawable(context, createCacheKey);
|
|
if (cachedDrawable != null) {
|
|
return cachedDrawable;
|
|
}
|
|
ResourceManagerHooks resourceManagerHooks = this.mHooks;
|
|
Drawable createDrawableFor = resourceManagerHooks == null ? null : resourceManagerHooks.createDrawableFor(this, context, i);
|
|
if (createDrawableFor != null) {
|
|
createDrawableFor.setChangingConfigurations(typedValue.changingConfigurations);
|
|
addDrawableToCache(context, createCacheKey, createDrawableFor);
|
|
}
|
|
return createDrawableFor;
|
|
}
|
|
|
|
private Drawable tintDrawable(Context context, int i, boolean z, Drawable drawable) {
|
|
ColorStateList tintList = getTintList(context, i);
|
|
if (tintList != null) {
|
|
if (DrawableUtils.canSafelyMutateDrawable(drawable)) {
|
|
drawable = drawable.mutate();
|
|
}
|
|
Drawable wrap = DrawableCompat.wrap(drawable);
|
|
DrawableCompat.setTintList(wrap, tintList);
|
|
PorterDuff.Mode tintMode = getTintMode(i);
|
|
if (tintMode == null) {
|
|
return wrap;
|
|
}
|
|
DrawableCompat.setTintMode(wrap, tintMode);
|
|
return wrap;
|
|
}
|
|
ResourceManagerHooks resourceManagerHooks = this.mHooks;
|
|
if ((resourceManagerHooks == null || !resourceManagerHooks.tintDrawable(context, i, drawable)) && !tintDrawableUsingColorFilter(context, i, drawable) && z) {
|
|
return null;
|
|
}
|
|
return drawable;
|
|
}
|
|
|
|
private Drawable loadDrawableFromDelegates(Context context, int i) {
|
|
int next;
|
|
SimpleArrayMap<String, InflateDelegate> simpleArrayMap = this.mDelegates;
|
|
if (simpleArrayMap == null || simpleArrayMap.isEmpty()) {
|
|
return null;
|
|
}
|
|
SparseArrayCompat<String> sparseArrayCompat = this.mKnownDrawableIdTags;
|
|
if (sparseArrayCompat != null) {
|
|
String str = sparseArrayCompat.get(i);
|
|
if (SKIP_DRAWABLE_TAG.equals(str) || (str != null && this.mDelegates.get(str) == null)) {
|
|
return null;
|
|
}
|
|
} else {
|
|
this.mKnownDrawableIdTags = new SparseArrayCompat<>();
|
|
}
|
|
if (this.mTypedValue == null) {
|
|
this.mTypedValue = new TypedValue();
|
|
}
|
|
TypedValue typedValue = this.mTypedValue;
|
|
Resources resources = context.getResources();
|
|
resources.getValue(i, typedValue, true);
|
|
long createCacheKey = createCacheKey(typedValue);
|
|
Drawable cachedDrawable = getCachedDrawable(context, createCacheKey);
|
|
if (cachedDrawable != null) {
|
|
return cachedDrawable;
|
|
}
|
|
if (typedValue.string != null && typedValue.string.toString().endsWith(".xml")) {
|
|
try {
|
|
XmlResourceParser xml = resources.getXml(i);
|
|
AttributeSet asAttributeSet = Xml.asAttributeSet(xml);
|
|
do {
|
|
next = xml.next();
|
|
if (next == 2) {
|
|
break;
|
|
}
|
|
} while (next != 1);
|
|
if (next != 2) {
|
|
throw new XmlPullParserException("No start tag found");
|
|
}
|
|
String name = xml.getName();
|
|
this.mKnownDrawableIdTags.append(i, name);
|
|
InflateDelegate inflateDelegate = this.mDelegates.get(name);
|
|
if (inflateDelegate != null) {
|
|
cachedDrawable = inflateDelegate.createFromXmlInner(context, xml, asAttributeSet, context.getTheme());
|
|
}
|
|
if (cachedDrawable != null) {
|
|
cachedDrawable.setChangingConfigurations(typedValue.changingConfigurations);
|
|
addDrawableToCache(context, createCacheKey, cachedDrawable);
|
|
}
|
|
} catch (Exception e) {
|
|
Log.e(TAG, "Exception while inflating drawable", e);
|
|
}
|
|
}
|
|
if (cachedDrawable == null) {
|
|
this.mKnownDrawableIdTags.append(i, SKIP_DRAWABLE_TAG);
|
|
}
|
|
return cachedDrawable;
|
|
}
|
|
|
|
private synchronized Drawable getCachedDrawable(Context context, long j) {
|
|
LongSparseArray<WeakReference<Drawable.ConstantState>> longSparseArray = this.mDrawableCaches.get(context);
|
|
if (longSparseArray == null) {
|
|
return null;
|
|
}
|
|
WeakReference<Drawable.ConstantState> weakReference = longSparseArray.get(j);
|
|
if (weakReference != null) {
|
|
Drawable.ConstantState constantState = weakReference.get();
|
|
if (constantState != null) {
|
|
return constantState.newDrawable(context.getResources());
|
|
}
|
|
longSparseArray.remove(j);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private synchronized boolean addDrawableToCache(Context context, long j, Drawable drawable) {
|
|
Drawable.ConstantState constantState = drawable.getConstantState();
|
|
if (constantState == null) {
|
|
return false;
|
|
}
|
|
LongSparseArray<WeakReference<Drawable.ConstantState>> longSparseArray = this.mDrawableCaches.get(context);
|
|
if (longSparseArray == null) {
|
|
longSparseArray = new LongSparseArray<>();
|
|
this.mDrawableCaches.put(context, longSparseArray);
|
|
}
|
|
longSparseArray.put(j, new WeakReference<>(constantState));
|
|
return true;
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
public synchronized Drawable onDrawableLoadedFromResources(Context context, VectorEnabledTintResources vectorEnabledTintResources, int i) {
|
|
Drawable loadDrawableFromDelegates = loadDrawableFromDelegates(context, i);
|
|
if (loadDrawableFromDelegates == null) {
|
|
loadDrawableFromDelegates = vectorEnabledTintResources.getDrawableCanonical(i);
|
|
}
|
|
if (loadDrawableFromDelegates == null) {
|
|
return null;
|
|
}
|
|
return tintDrawable(context, i, false, loadDrawableFromDelegates);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
public boolean tintDrawableUsingColorFilter(Context context, int i, Drawable drawable) {
|
|
ResourceManagerHooks resourceManagerHooks = this.mHooks;
|
|
return resourceManagerHooks != null && resourceManagerHooks.tintDrawableUsingColorFilter(context, i, drawable);
|
|
}
|
|
|
|
private void addDelegate(String str, InflateDelegate inflateDelegate) {
|
|
if (this.mDelegates == null) {
|
|
this.mDelegates = new SimpleArrayMap<>();
|
|
}
|
|
this.mDelegates.put(str, inflateDelegate);
|
|
}
|
|
|
|
PorterDuff.Mode getTintMode(int i) {
|
|
ResourceManagerHooks resourceManagerHooks = this.mHooks;
|
|
if (resourceManagerHooks == null) {
|
|
return null;
|
|
}
|
|
return resourceManagerHooks.getTintModeForDrawableRes(i);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
public synchronized ColorStateList getTintList(Context context, int i) {
|
|
ColorStateList tintListFromCache;
|
|
tintListFromCache = getTintListFromCache(context, i);
|
|
if (tintListFromCache == null) {
|
|
ResourceManagerHooks resourceManagerHooks = this.mHooks;
|
|
tintListFromCache = resourceManagerHooks == null ? null : resourceManagerHooks.getTintListForDrawableRes(context, i);
|
|
if (tintListFromCache != null) {
|
|
addTintListToCache(context, i, tintListFromCache);
|
|
}
|
|
}
|
|
return tintListFromCache;
|
|
}
|
|
|
|
private ColorStateList getTintListFromCache(Context context, int i) {
|
|
SparseArrayCompat<ColorStateList> sparseArrayCompat;
|
|
WeakHashMap<Context, SparseArrayCompat<ColorStateList>> weakHashMap = this.mTintLists;
|
|
if (weakHashMap == null || (sparseArrayCompat = weakHashMap.get(context)) == null) {
|
|
return null;
|
|
}
|
|
return sparseArrayCompat.get(i);
|
|
}
|
|
|
|
private void addTintListToCache(Context context, int i, ColorStateList colorStateList) {
|
|
if (this.mTintLists == null) {
|
|
this.mTintLists = new WeakHashMap<>();
|
|
}
|
|
SparseArrayCompat<ColorStateList> sparseArrayCompat = this.mTintLists.get(context);
|
|
if (sparseArrayCompat == null) {
|
|
sparseArrayCompat = new SparseArrayCompat<>();
|
|
this.mTintLists.put(context, sparseArrayCompat);
|
|
}
|
|
sparseArrayCompat.append(i, colorStateList);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
/* loaded from: classes.dex */
|
|
public static class ColorFilterLruCache extends LruCache<Integer, PorterDuffColorFilter> {
|
|
public ColorFilterLruCache(int i) {
|
|
super(i);
|
|
}
|
|
|
|
PorterDuffColorFilter get(int i, PorterDuff.Mode mode) {
|
|
return get(Integer.valueOf(generateCacheKey(i, mode)));
|
|
}
|
|
|
|
PorterDuffColorFilter put(int i, PorterDuff.Mode mode, PorterDuffColorFilter porterDuffColorFilter) {
|
|
return put(Integer.valueOf(generateCacheKey(i, mode)), porterDuffColorFilter);
|
|
}
|
|
|
|
private static int generateCacheKey(int i, PorterDuff.Mode mode) {
|
|
return ((i + 31) * 31) + mode.hashCode();
|
|
}
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
public static void tintDrawable(Drawable drawable, TintInfo tintInfo, int[] iArr) {
|
|
int[] state = drawable.getState();
|
|
if (DrawableUtils.canSafelyMutateDrawable(drawable) && drawable.mutate() != drawable) {
|
|
Log.d(TAG, "Mutated drawable is not the same instance as the input.");
|
|
return;
|
|
}
|
|
if ((drawable instanceof LayerDrawable) && drawable.isStateful()) {
|
|
drawable.setState(new int[0]);
|
|
drawable.setState(state);
|
|
}
|
|
if (tintInfo.mHasTintList || tintInfo.mHasTintMode) {
|
|
drawable.setColorFilter(createTintFilter(tintInfo.mHasTintList ? tintInfo.mTintList : null, tintInfo.mHasTintMode ? tintInfo.mTintMode : DEFAULT_MODE, iArr));
|
|
} else {
|
|
drawable.clearColorFilter();
|
|
}
|
|
}
|
|
|
|
private static PorterDuffColorFilter createTintFilter(ColorStateList colorStateList, PorterDuff.Mode mode, int[] iArr) {
|
|
if (colorStateList == null || mode == null) {
|
|
return null;
|
|
}
|
|
return getPorterDuffColorFilter(colorStateList.getColorForState(iArr, 0), mode);
|
|
}
|
|
|
|
public static synchronized PorterDuffColorFilter getPorterDuffColorFilter(int i, PorterDuff.Mode mode) {
|
|
PorterDuffColorFilter porterDuffColorFilter;
|
|
synchronized (ResourceManagerInternal.class) {
|
|
ColorFilterLruCache colorFilterLruCache = COLOR_FILTER_CACHE;
|
|
porterDuffColorFilter = colorFilterLruCache.get(i, mode);
|
|
if (porterDuffColorFilter == null) {
|
|
porterDuffColorFilter = new PorterDuffColorFilter(i, mode);
|
|
colorFilterLruCache.put(i, mode, porterDuffColorFilter);
|
|
}
|
|
}
|
|
return porterDuffColorFilter;
|
|
}
|
|
|
|
private void checkVectorDrawableSetup(Context context) {
|
|
if (this.mHasCheckedVectorDrawableSetup) {
|
|
return;
|
|
}
|
|
this.mHasCheckedVectorDrawableSetup = true;
|
|
Drawable drawable = getDrawable(context, R.drawable.abc_vector_test);
|
|
if (drawable == null || !isVectorDrawable(drawable)) {
|
|
this.mHasCheckedVectorDrawableSetup = false;
|
|
throw new IllegalStateException("This app has been built with an incorrect configuration. Please configure your build for VectorDrawableCompat.");
|
|
}
|
|
}
|
|
|
|
private static boolean isVectorDrawable(Drawable drawable) {
|
|
return (drawable instanceof VectorDrawableCompat) || PLATFORM_VD_CLAZZ.equals(drawable.getClass().getName());
|
|
}
|
|
|
|
/* loaded from: classes.dex */
|
|
private static class VdcInflateDelegate implements InflateDelegate {
|
|
VdcInflateDelegate() {
|
|
}
|
|
|
|
@Override // androidx.appcompat.widget.ResourceManagerInternal.InflateDelegate
|
|
public Drawable createFromXmlInner(Context context, XmlPullParser xmlPullParser, AttributeSet attributeSet, Resources.Theme theme) {
|
|
try {
|
|
return VectorDrawableCompat.createFromXmlInner(context.getResources(), xmlPullParser, attributeSet, theme);
|
|
} catch (Exception e) {
|
|
Log.e("VdcInflateDelegate", "Exception while inflating <vector>", e);
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* loaded from: classes.dex */
|
|
private static class AvdcInflateDelegate implements InflateDelegate {
|
|
AvdcInflateDelegate() {
|
|
}
|
|
|
|
@Override // androidx.appcompat.widget.ResourceManagerInternal.InflateDelegate
|
|
public Drawable createFromXmlInner(Context context, XmlPullParser xmlPullParser, AttributeSet attributeSet, Resources.Theme theme) {
|
|
try {
|
|
return AnimatedVectorDrawableCompat.createFromXmlInner(context, context.getResources(), xmlPullParser, attributeSet, theme);
|
|
} catch (Exception e) {
|
|
Log.e("AvdcInflateDelegate", "Exception while inflating <animated-vector>", e);
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* loaded from: classes.dex */
|
|
static class AsldcInflateDelegate implements InflateDelegate {
|
|
AsldcInflateDelegate() {
|
|
}
|
|
|
|
@Override // androidx.appcompat.widget.ResourceManagerInternal.InflateDelegate
|
|
public Drawable createFromXmlInner(Context context, XmlPullParser xmlPullParser, AttributeSet attributeSet, Resources.Theme theme) {
|
|
try {
|
|
return AnimatedStateListDrawableCompat.createFromXmlInner(context, context.getResources(), xmlPullParser, attributeSet, theme);
|
|
} catch (Exception e) {
|
|
Log.e("AsldcInflateDelegate", "Exception while inflating <animated-selector>", e);
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* loaded from: classes.dex */
|
|
static class DrawableDelegate implements InflateDelegate {
|
|
DrawableDelegate() {
|
|
}
|
|
|
|
@Override // androidx.appcompat.widget.ResourceManagerInternal.InflateDelegate
|
|
public Drawable createFromXmlInner(Context context, XmlPullParser xmlPullParser, AttributeSet attributeSet, Resources.Theme theme) {
|
|
String classAttribute = attributeSet.getClassAttribute();
|
|
if (classAttribute != null) {
|
|
try {
|
|
Drawable drawable = (Drawable) DrawableDelegate.class.getClassLoader().loadClass(classAttribute).asSubclass(Drawable.class).getDeclaredConstructor(new Class[0]).newInstance(new Object[0]);
|
|
Compatibility.Api21Impl.inflate(drawable, context.getResources(), xmlPullParser, attributeSet, theme);
|
|
return drawable;
|
|
} catch (Exception e) {
|
|
Log.e("DrawableDelegate", "Exception while inflating <drawable>", e);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
}
|