206 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.appcompat.app;
 | |
| 
 | |
| import android.content.res.Resources;
 | |
| import android.os.Build;
 | |
| import android.util.Log;
 | |
| import android.util.LongSparseArray;
 | |
| import java.lang.reflect.Field;
 | |
| import java.util.Map;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| class ResourcesFlusher {
 | |
|     private static final String TAG = "ResourcesFlusher";
 | |
|     private static Field sDrawableCacheField;
 | |
|     private static boolean sDrawableCacheFieldFetched;
 | |
|     private static Field sResourcesImplField;
 | |
|     private static boolean sResourcesImplFieldFetched;
 | |
|     private static Class<?> sThemedResourceCacheClazz;
 | |
|     private static boolean sThemedResourceCacheClazzFetched;
 | |
|     private static Field sThemedResourceCache_mUnthemedEntriesField;
 | |
|     private static boolean sThemedResourceCache_mUnthemedEntriesFieldFetched;
 | |
| 
 | |
|     static void flush(Resources resources) {
 | |
|         if (Build.VERSION.SDK_INT >= 28) {
 | |
|             return;
 | |
|         }
 | |
|         if (Build.VERSION.SDK_INT >= 24) {
 | |
|             flushNougats(resources);
 | |
|         } else if (Build.VERSION.SDK_INT >= 23) {
 | |
|             flushMarshmallows(resources);
 | |
|         } else {
 | |
|             flushLollipops(resources);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static void flushLollipops(Resources resources) {
 | |
|         Map map;
 | |
|         if (!sDrawableCacheFieldFetched) {
 | |
|             try {
 | |
|                 Field declaredField = Resources.class.getDeclaredField("mDrawableCache");
 | |
|                 sDrawableCacheField = declaredField;
 | |
|                 declaredField.setAccessible(true);
 | |
|             } catch (NoSuchFieldException e) {
 | |
|                 Log.e(TAG, "Could not retrieve Resources#mDrawableCache field", e);
 | |
|             }
 | |
|             sDrawableCacheFieldFetched = true;
 | |
|         }
 | |
|         Field field = sDrawableCacheField;
 | |
|         if (field != null) {
 | |
|             try {
 | |
|                 map = (Map) field.get(resources);
 | |
|             } catch (IllegalAccessException e2) {
 | |
|                 Log.e(TAG, "Could not retrieve value from Resources#mDrawableCache", e2);
 | |
|                 map = null;
 | |
|             }
 | |
|             if (map != null) {
 | |
|                 map.clear();
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /* JADX WARN: Removed duplicated region for block: B:14:0x002f A[RETURN] */
 | |
|     /* JADX WARN: Removed duplicated region for block: B:16:0x0030  */
 | |
|     /*
 | |
|         Code decompiled incorrectly, please refer to instructions dump.
 | |
|         To view partially-correct add '--show-bad-code' argument
 | |
|     */
 | |
|     private static void flushMarshmallows(android.content.res.Resources r4) {
 | |
|         /*
 | |
|             boolean r0 = androidx.appcompat.app.ResourcesFlusher.sDrawableCacheFieldFetched
 | |
|             java.lang.String r1 = "ResourcesFlusher"
 | |
|             if (r0 != 0) goto L1d
 | |
|             r0 = 1
 | |
|             java.lang.Class<android.content.res.Resources> r2 = android.content.res.Resources.class
 | |
|             java.lang.String r3 = "mDrawableCache"
 | |
|             java.lang.reflect.Field r2 = r2.getDeclaredField(r3)     // Catch: java.lang.NoSuchFieldException -> L15
 | |
|             androidx.appcompat.app.ResourcesFlusher.sDrawableCacheField = r2     // Catch: java.lang.NoSuchFieldException -> L15
 | |
|             r2.setAccessible(r0)     // Catch: java.lang.NoSuchFieldException -> L15
 | |
|             goto L1b
 | |
|         L15:
 | |
|             r2 = move-exception
 | |
|             java.lang.String r3 = "Could not retrieve Resources#mDrawableCache field"
 | |
|             android.util.Log.e(r1, r3, r2)
 | |
|         L1b:
 | |
|             androidx.appcompat.app.ResourcesFlusher.sDrawableCacheFieldFetched = r0
 | |
|         L1d:
 | |
|             java.lang.reflect.Field r0 = androidx.appcompat.app.ResourcesFlusher.sDrawableCacheField
 | |
|             if (r0 == 0) goto L2c
 | |
|             java.lang.Object r4 = r0.get(r4)     // Catch: java.lang.IllegalAccessException -> L26
 | |
|             goto L2d
 | |
|         L26:
 | |
|             r4 = move-exception
 | |
|             java.lang.String r0 = "Could not retrieve value from Resources#mDrawableCache"
 | |
|             android.util.Log.e(r1, r0, r4)
 | |
|         L2c:
 | |
|             r4 = 0
 | |
|         L2d:
 | |
|             if (r4 != 0) goto L30
 | |
|             return
 | |
|         L30:
 | |
|             flushThemedResourcesCache(r4)
 | |
|             return
 | |
|         */
 | |
|         throw new UnsupportedOperationException("Method not decompiled: androidx.appcompat.app.ResourcesFlusher.flushMarshmallows(android.content.res.Resources):void");
 | |
|     }
 | |
| 
 | |
|     private static void flushNougats(Resources resources) {
 | |
|         Object obj;
 | |
|         if (!sResourcesImplFieldFetched) {
 | |
|             try {
 | |
|                 Field declaredField = Resources.class.getDeclaredField("mResourcesImpl");
 | |
|                 sResourcesImplField = declaredField;
 | |
|                 declaredField.setAccessible(true);
 | |
|             } catch (NoSuchFieldException e) {
 | |
|                 Log.e(TAG, "Could not retrieve Resources#mResourcesImpl field", e);
 | |
|             }
 | |
|             sResourcesImplFieldFetched = true;
 | |
|         }
 | |
|         Field field = sResourcesImplField;
 | |
|         if (field == null) {
 | |
|             return;
 | |
|         }
 | |
|         Object obj2 = null;
 | |
|         try {
 | |
|             obj = field.get(resources);
 | |
|         } catch (IllegalAccessException e2) {
 | |
|             Log.e(TAG, "Could not retrieve value from Resources#mResourcesImpl", e2);
 | |
|             obj = null;
 | |
|         }
 | |
|         if (obj == null) {
 | |
|             return;
 | |
|         }
 | |
|         if (!sDrawableCacheFieldFetched) {
 | |
|             try {
 | |
|                 Field declaredField2 = obj.getClass().getDeclaredField("mDrawableCache");
 | |
|                 sDrawableCacheField = declaredField2;
 | |
|                 declaredField2.setAccessible(true);
 | |
|             } catch (NoSuchFieldException e3) {
 | |
|                 Log.e(TAG, "Could not retrieve ResourcesImpl#mDrawableCache field", e3);
 | |
|             }
 | |
|             sDrawableCacheFieldFetched = true;
 | |
|         }
 | |
|         Field field2 = sDrawableCacheField;
 | |
|         if (field2 != null) {
 | |
|             try {
 | |
|                 obj2 = field2.get(obj);
 | |
|             } catch (IllegalAccessException e4) {
 | |
|                 Log.e(TAG, "Could not retrieve value from ResourcesImpl#mDrawableCache", e4);
 | |
|             }
 | |
|         }
 | |
|         if (obj2 != null) {
 | |
|             flushThemedResourcesCache(obj2);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static void flushThemedResourcesCache(Object obj) {
 | |
|         LongSparseArray longSparseArray;
 | |
|         if (!sThemedResourceCacheClazzFetched) {
 | |
|             try {
 | |
|                 sThemedResourceCacheClazz = Class.forName("android.content.res.ThemedResourceCache");
 | |
|             } catch (ClassNotFoundException e) {
 | |
|                 Log.e(TAG, "Could not find ThemedResourceCache class", e);
 | |
|             }
 | |
|             sThemedResourceCacheClazzFetched = true;
 | |
|         }
 | |
|         Class<?> cls = sThemedResourceCacheClazz;
 | |
|         if (cls == null) {
 | |
|             return;
 | |
|         }
 | |
|         if (!sThemedResourceCache_mUnthemedEntriesFieldFetched) {
 | |
|             try {
 | |
|                 Field declaredField = cls.getDeclaredField("mUnthemedEntries");
 | |
|                 sThemedResourceCache_mUnthemedEntriesField = declaredField;
 | |
|                 declaredField.setAccessible(true);
 | |
|             } catch (NoSuchFieldException e2) {
 | |
|                 Log.e(TAG, "Could not retrieve ThemedResourceCache#mUnthemedEntries field", e2);
 | |
|             }
 | |
|             sThemedResourceCache_mUnthemedEntriesFieldFetched = true;
 | |
|         }
 | |
|         Field field = sThemedResourceCache_mUnthemedEntriesField;
 | |
|         if (field == null) {
 | |
|             return;
 | |
|         }
 | |
|         try {
 | |
|             longSparseArray = (LongSparseArray) field.get(obj);
 | |
|         } catch (IllegalAccessException e3) {
 | |
|             Log.e(TAG, "Could not retrieve value from ThemedResourceCache#mUnthemedEntries", e3);
 | |
|             longSparseArray = null;
 | |
|         }
 | |
|         if (longSparseArray != null) {
 | |
|             Api16Impl.clear(longSparseArray);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private ResourcesFlusher() {
 | |
|     }
 | |
| 
 | |
|     static class Api16Impl {
 | |
|         private Api16Impl() {
 | |
|         }
 | |
| 
 | |
|         static void clear(LongSparseArray longSparseArray) {
 | |
|             longSparseArray.clear();
 | |
|         }
 | |
|     }
 | |
| }
 |