93 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.appcompat.widget;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.content.ContextWrapper;
 | |
| import android.content.res.AssetManager;
 | |
| import android.content.res.Resources;
 | |
| import java.lang.ref.WeakReference;
 | |
| import java.util.ArrayList;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class TintContextWrapper extends ContextWrapper {
 | |
|     private static final Object CACHE_LOCK = new Object();
 | |
|     private static ArrayList<WeakReference<TintContextWrapper>> sCache;
 | |
|     private final Resources mResources;
 | |
|     private final Resources.Theme mTheme;
 | |
| 
 | |
|     @Override // android.content.ContextWrapper, android.content.Context
 | |
|     public Resources getResources() {
 | |
|         return this.mResources;
 | |
|     }
 | |
| 
 | |
|     public static Context wrap(Context context) {
 | |
|         if (!shouldWrap(context)) {
 | |
|             return context;
 | |
|         }
 | |
|         synchronized (CACHE_LOCK) {
 | |
|             ArrayList<WeakReference<TintContextWrapper>> arrayList = sCache;
 | |
|             if (arrayList == null) {
 | |
|                 sCache = new ArrayList<>();
 | |
|             } else {
 | |
|                 for (int size = arrayList.size() - 1; size >= 0; size--) {
 | |
|                     WeakReference<TintContextWrapper> weakReference = sCache.get(size);
 | |
|                     if (weakReference == null || weakReference.get() == null) {
 | |
|                         sCache.remove(size);
 | |
|                     }
 | |
|                 }
 | |
|                 for (int size2 = sCache.size() - 1; size2 >= 0; size2--) {
 | |
|                     WeakReference<TintContextWrapper> 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;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static boolean shouldWrap(Context context) {
 | |
|         if ((context instanceof TintContextWrapper) || (context.getResources() instanceof TintResources) || (context.getResources() instanceof VectorEnabledTintResources)) {
 | |
|             return false;
 | |
|         }
 | |
|         return VectorEnabledTintResources.shouldBeUsed();
 | |
|     }
 | |
| 
 | |
|     private TintContextWrapper(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;
 | |
|     }
 | |
| 
 | |
|     @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);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.content.ContextWrapper, android.content.Context
 | |
|     public AssetManager getAssets() {
 | |
|         return this.mResources.getAssets();
 | |
|     }
 | |
| }
 |