package androidx.appcompat.widget; import android.content.Context; import android.content.ContextWrapper; import android.content.res.AssetManager; import android.content.res.Resources; import androidx.annotation.NonNull; import androidx.annotation.RestrictTo; import java.lang.ref.WeakReference; import java.util.ArrayList; @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public class TintContextWrapper extends ContextWrapper { private static final Object CACHE_LOCK = new Object(); private static ArrayList> sCache; private final Resources mResources; private final Resources.Theme mTheme; private TintContextWrapper(@NonNull Context context) { super(context); if (VectorEnabledTintResources.shouldBeUsed()) { VectorEnabledTintResources vectorEnabledTintResources = new VectorEnabledTintResources(this, context.getResources()); this.mResources = vectorEnabledTintResources; Resources.Theme newTheme = vectorEnabledTintResources.newTheme(); this.mTheme = newTheme; newTheme.setTo(context.getTheme()); return; } this.mResources = new TintResources(this, context.getResources()); this.mTheme = null; } private static boolean shouldWrap(@NonNull Context context) { return !(context instanceof TintContextWrapper) && !(context.getResources() instanceof TintResources) && !(context.getResources() instanceof VectorEnabledTintResources) && VectorEnabledTintResources.shouldBeUsed(); } public static Context wrap(@NonNull Context context) { if (!shouldWrap(context)) { return context; } synchronized (CACHE_LOCK) { ArrayList> arrayList = sCache; if (arrayList == null) { sCache = new ArrayList<>(); } else { for (int size = arrayList.size() - 1; size >= 0; size--) { WeakReference weakReference = sCache.get(size); if (weakReference == null || weakReference.get() == null) { sCache.remove(size); } } for (int size2 = sCache.size() - 1; size2 >= 0; size2--) { WeakReference weakReference2 = sCache.get(size2); TintContextWrapper tintContextWrapper = weakReference2 != null ? weakReference2.get() : null; if (tintContextWrapper != null && tintContextWrapper.getBaseContext() == context) { return tintContextWrapper; } } } TintContextWrapper tintContextWrapper2 = new TintContextWrapper(context); sCache.add(new WeakReference<>(tintContextWrapper2)); return tintContextWrapper2; } } @Override // android.content.ContextWrapper, android.content.Context public AssetManager getAssets() { return this.mResources.getAssets(); } @Override // android.content.ContextWrapper, android.content.Context public Resources getResources() { return this.mResources; } @Override // android.content.ContextWrapper, android.content.Context public Resources.Theme getTheme() { Resources.Theme theme = this.mTheme; return theme == null ? super.getTheme() : theme; } @Override // android.content.ContextWrapper, android.content.Context public void setTheme(int i) { Resources.Theme theme = this.mTheme; if (theme == null) { super.setTheme(i); } else { theme.applyStyle(i, true); } } }