ADD week 5
This commit is contained in:
		
							
								
								
									
										205
									
								
								02-Easy5/E5/sources/androidx/appcompat/app/ResourcesFlusher.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										205
									
								
								02-Easy5/E5/sources/androidx/appcompat/app/ResourcesFlusher.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,205 @@ | ||||
| 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(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user