ADD week 5
This commit is contained in:
		| @@ -0,0 +1,92 @@ | ||||
| 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(); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user