ResourcesFlusher.smali
.class Landroidx/appcompat/app/ResourcesFlusher;
.super Ljava/lang/Object;
.source "ResourcesFlusher.java"
# static fields
.field private static final TAG:Ljava/lang/String; = "ResourcesFlusher"
.field private static sDrawableCacheField:Ljava/lang/reflect/Field;
.field private static sDrawableCacheFieldFetched:Z
.field private static sResourcesImplField:Ljava/lang/reflect/Field;
.field private static sResourcesImplFieldFetched:Z
.field private static sThemedResourceCacheClazz:Ljava/lang/Class;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/lang/Class<",
"*>;"
}
.end annotation
.end field
.field private static sThemedResourceCacheClazzFetched:Z
.field private static sThemedResourceCache_mUnthemedEntriesField:Ljava/lang/reflect/Field;
.field private static sThemedResourceCache_mUnthemedEntriesFieldFetched:Z
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method private constructor <init>()V
.registers 1
.line 209
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 210
return-void
.end method
.method static flush(Landroid/content/res/Resources;)V
.registers 3
.param p0, "resources" # Landroid/content/res/Resources;
.line 46
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0x1c
if-lt v0, v1, :cond_7
.line 48
return-void
.line 49
:cond_7
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0x18
if-lt v0, v1, :cond_11
.line 50
invoke-static {p0}, Landroidx/appcompat/app/ResourcesFlusher;->flushNougats(Landroid/content/res/Resources;)V
goto :goto_24
.line 51
:cond_11
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0x17
if-lt v0, v1, :cond_1b
.line 52
invoke-static {p0}, Landroidx/appcompat/app/ResourcesFlusher;->flushMarshmallows(Landroid/content/res/Resources;)V
goto :goto_24
.line 53
:cond_1b
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0x15
if-lt v0, v1, :cond_24
.line 54
invoke-static {p0}, Landroidx/appcompat/app/ResourcesFlusher;->flushLollipops(Landroid/content/res/Resources;)V
.line 56
:cond_24
:goto_24
return-void
.end method
.method private static flushLollipops(Landroid/content/res/Resources;)V
.registers 5
.param p0, "resources" # Landroid/content/res/Resources;
.line 60
sget-boolean v0, Landroidx/appcompat/app/ResourcesFlusher;->sDrawableCacheFieldFetched:Z
const-string v1, "ResourcesFlusher"
if-nez v0, :cond_1d
.line 62
const/4 v0, 0x1
:try_start_7
const-class v2, Landroid/content/res/Resources;
const-string v3, "mDrawableCache"
invoke-virtual {v2, v3}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v2
sput-object v2, Landroidx/appcompat/app/ResourcesFlusher;->sDrawableCacheField:Ljava/lang/reflect/Field;
.line 63
invoke-virtual {v2, v0}, Ljava/lang/reflect/Field;->setAccessible(Z)V
:try_end_14
.catch Ljava/lang/NoSuchFieldException; {:try_start_7 .. :try_end_14} :catch_15
.line 66
goto :goto_1b
.line 64
:catch_15
move-exception v2
.line 65
.local v2, "e":Ljava/lang/NoSuchFieldException;
const-string v3, "Could not retrieve Resources#mDrawableCache field"
invoke-static {v1, v3, v2}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
.line 67
.end local v2 # "e":Ljava/lang/NoSuchFieldException;
:goto_1b
sput-boolean v0, Landroidx/appcompat/app/ResourcesFlusher;->sDrawableCacheFieldFetched:Z
.line 69
:cond_1d
sget-object v0, Landroidx/appcompat/app/ResourcesFlusher;->sDrawableCacheField:Ljava/lang/reflect/Field;
if-eqz v0, :cond_35
.line 70
const/4 v2, 0x0
.line 72
.local v2, "drawableCache":Ljava/util/Map;
:try_start_22
invoke-virtual {v0, p0}, Ljava/lang/reflect/Field;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/util/Map;
:try_end_28
.catch Ljava/lang/IllegalAccessException; {:try_start_22 .. :try_end_28} :catch_2a
move-object v2, v0
.line 75
goto :goto_30
.line 73
:catch_2a
move-exception v0
.line 74
.local v0, "e":Ljava/lang/IllegalAccessException;
const-string v3, "Could not retrieve value from Resources#mDrawableCache"
invoke-static {v1, v3, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
.line 76
.end local v0 # "e":Ljava/lang/IllegalAccessException;
:goto_30
if-eqz v2, :cond_35
.line 77
invoke-interface {v2}, Ljava/util/Map;->clear()V
.line 80
.end local v2 # "drawableCache":Ljava/util/Map;
:cond_35
return-void
.end method
.method private static flushMarshmallows(Landroid/content/res/Resources;)V
.registers 5
.param p0, "resources" # Landroid/content/res/Resources;
.line 84
sget-boolean v0, Landroidx/appcompat/app/ResourcesFlusher;->sDrawableCacheFieldFetched:Z
const-string v1, "ResourcesFlusher"
if-nez v0, :cond_1d
.line 86
const/4 v0, 0x1
:try_start_7
const-class v2, Landroid/content/res/Resources;
const-string v3, "mDrawableCache"
invoke-virtual {v2, v3}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v2
sput-object v2, Landroidx/appcompat/app/ResourcesFlusher;->sDrawableCacheField:Ljava/lang/reflect/Field;
.line 87
invoke-virtual {v2, v0}, Ljava/lang/reflect/Field;->setAccessible(Z)V
:try_end_14
.catch Ljava/lang/NoSuchFieldException; {:try_start_7 .. :try_end_14} :catch_15
.line 90
goto :goto_1b
.line 88
:catch_15
move-exception v2
.line 89
.local v2, "e":Ljava/lang/NoSuchFieldException;
const-string v3, "Could not retrieve Resources#mDrawableCache field"
invoke-static {v1, v3, v2}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
.line 91
.end local v2 # "e":Ljava/lang/NoSuchFieldException;
:goto_1b
sput-boolean v0, Landroidx/appcompat/app/ResourcesFlusher;->sDrawableCacheFieldFetched:Z
.line 94
:cond_1d
const/4 v0, 0x0
.line 95
.local v0, "drawableCache":Ljava/lang/Object;
sget-object v2, Landroidx/appcompat/app/ResourcesFlusher;->sDrawableCacheField:Ljava/lang/reflect/Field;
if-eqz v2, :cond_2e
.line 97
:try_start_22
invoke-virtual {v2, p0}, Ljava/lang/reflect/Field;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
:try_end_26
.catch Ljava/lang/IllegalAccessException; {:try_start_22 .. :try_end_26} :catch_28
move-object v0, v1
.line 100
goto :goto_2e
.line 98
:catch_28
move-exception v2
.line 99
.local v2, "e":Ljava/lang/IllegalAccessException;
const-string v3, "Could not retrieve value from Resources#mDrawableCache"
invoke-static {v1, v3, v2}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
.line 103
.end local v2 # "e":Ljava/lang/IllegalAccessException;
:cond_2e
:goto_2e
if-nez v0, :cond_31
.line 105
return-void
.line 108
:cond_31
invoke-static {v0}, Landroidx/appcompat/app/ResourcesFlusher;->flushThemedResourcesCache(Ljava/lang/Object;)V
.line 109
return-void
.end method
.method private static flushNougats(Landroid/content/res/Resources;)V
.registers 6
.param p0, "resources" # Landroid/content/res/Resources;
.line 113
sget-boolean v0, Landroidx/appcompat/app/ResourcesFlusher;->sResourcesImplFieldFetched:Z
const/4 v1, 0x1
const-string v2, "ResourcesFlusher"
if-nez v0, :cond_1d
.line 115
:try_start_7
const-class v0, Landroid/content/res/Resources;
const-string v3, "mResourcesImpl"
invoke-virtual {v0, v3}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v0
sput-object v0, Landroidx/appcompat/app/ResourcesFlusher;->sResourcesImplField:Ljava/lang/reflect/Field;
.line 116
invoke-virtual {v0, v1}, Ljava/lang/reflect/Field;->setAccessible(Z)V
:try_end_14
.catch Ljava/lang/NoSuchFieldException; {:try_start_7 .. :try_end_14} :catch_15
.line 119
goto :goto_1b
.line 117
:catch_15
move-exception v0
.line 118
.local v0, "e":Ljava/lang/NoSuchFieldException;
const-string v3, "Could not retrieve Resources#mResourcesImpl field"
invoke-static {v2, v3, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
.line 120
.end local v0 # "e":Ljava/lang/NoSuchFieldException;
:goto_1b
sput-boolean v1, Landroidx/appcompat/app/ResourcesFlusher;->sResourcesImplFieldFetched:Z
.line 123
:cond_1d
sget-object v0, Landroidx/appcompat/app/ResourcesFlusher;->sResourcesImplField:Ljava/lang/reflect/Field;
if-nez v0, :cond_22
.line 125
return-void
.line 128
:cond_22
const/4 v3, 0x0
.line 130
.local v3, "resourcesImpl":Ljava/lang/Object;
:try_start_23
invoke-virtual {v0, p0}, Ljava/lang/reflect/Field;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
:try_end_27
.catch Ljava/lang/IllegalAccessException; {:try_start_23 .. :try_end_27} :catch_29
move-object v3, v0
.line 133
goto :goto_2f
.line 131
:catch_29
move-exception v0
.line 132
.local v0, "e":Ljava/lang/IllegalAccessException;
const-string v4, "Could not retrieve value from Resources#mResourcesImpl"
invoke-static {v2, v4, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
.line 135
.end local v0 # "e":Ljava/lang/IllegalAccessException;
:goto_2f
if-nez v3, :cond_32
.line 137
return-void
.line 140
:cond_32
sget-boolean v0, Landroidx/appcompat/app/ResourcesFlusher;->sDrawableCacheFieldFetched:Z
if-nez v0, :cond_4e
.line 142
:try_start_36
invoke-virtual {v3}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v0
const-string v4, "mDrawableCache"
invoke-virtual {v0, v4}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v0
sput-object v0, Landroidx/appcompat/app/ResourcesFlusher;->sDrawableCacheField:Ljava/lang/reflect/Field;
.line 143
invoke-virtual {v0, v1}, Ljava/lang/reflect/Field;->setAccessible(Z)V
:try_end_45
.catch Ljava/lang/NoSuchFieldException; {:try_start_36 .. :try_end_45} :catch_46
.line 146
goto :goto_4c
.line 144
:catch_46
move-exception v0
.line 145
.local v0, "e":Ljava/lang/NoSuchFieldException;
const-string v4, "Could not retrieve ResourcesImpl#mDrawableCache field"
invoke-static {v2, v4, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
.line 147
.end local v0 # "e":Ljava/lang/NoSuchFieldException;
:goto_4c
sput-boolean v1, Landroidx/appcompat/app/ResourcesFlusher;->sDrawableCacheFieldFetched:Z
.line 150
:cond_4e
const/4 v0, 0x0
.line 151
.local v0, "drawableCache":Ljava/lang/Object;
sget-object v1, Landroidx/appcompat/app/ResourcesFlusher;->sDrawableCacheField:Ljava/lang/reflect/Field;
if-eqz v1, :cond_5f
.line 153
:try_start_53
invoke-virtual {v1, v3}, Ljava/lang/reflect/Field;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
:try_end_57
.catch Ljava/lang/IllegalAccessException; {:try_start_53 .. :try_end_57} :catch_59
move-object v0, v1
.line 156
goto :goto_5f
.line 154
:catch_59
move-exception v1
.line 155
.local v1, "e":Ljava/lang/IllegalAccessException;
const-string v4, "Could not retrieve value from ResourcesImpl#mDrawableCache"
invoke-static {v2, v4, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
.line 159
.end local v1 # "e":Ljava/lang/IllegalAccessException;
:cond_5f
:goto_5f
if-eqz v0, :cond_64
.line 160
invoke-static {v0}, Landroidx/appcompat/app/ResourcesFlusher;->flushThemedResourcesCache(Ljava/lang/Object;)V
.line 162
:cond_64
return-void
.end method
.method private static flushThemedResourcesCache(Ljava/lang/Object;)V
.registers 5
.param p0, "cache" # Ljava/lang/Object;
.line 166
sget-boolean v0, Landroidx/appcompat/app/ResourcesFlusher;->sThemedResourceCacheClazzFetched:Z
const/4 v1, 0x1
const-string v2, "ResourcesFlusher"
if-nez v0, :cond_18
.line 168
:try_start_7
const-string v0, "android.content.res.ThemedResourceCache"
invoke-static {v0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
move-result-object v0
sput-object v0, Landroidx/appcompat/app/ResourcesFlusher;->sThemedResourceCacheClazz:Ljava/lang/Class;
:try_end_f
.catch Ljava/lang/ClassNotFoundException; {:try_start_7 .. :try_end_f} :catch_10
.line 171
goto :goto_16
.line 169
:catch_10
move-exception v0
.line 170
.local v0, "e":Ljava/lang/ClassNotFoundException;
const-string v3, "Could not find ThemedResourceCache class"
invoke-static {v2, v3, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
.line 172
.end local v0 # "e":Ljava/lang/ClassNotFoundException;
:goto_16
sput-boolean v1, Landroidx/appcompat/app/ResourcesFlusher;->sThemedResourceCacheClazzFetched:Z
.line 175
:cond_18
sget-object v0, Landroidx/appcompat/app/ResourcesFlusher;->sThemedResourceCacheClazz:Ljava/lang/Class;
if-nez v0, :cond_1d
.line 177
return-void
.line 180
:cond_1d
sget-boolean v3, Landroidx/appcompat/app/ResourcesFlusher;->sThemedResourceCache_mUnthemedEntriesFieldFetched:Z
if-nez v3, :cond_35
.line 182
:try_start_21
const-string v3, "mUnthemedEntries"
.line 183
invoke-virtual {v0, v3}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v0
sput-object v0, Landroidx/appcompat/app/ResourcesFlusher;->sThemedResourceCache_mUnthemedEntriesField:Ljava/lang/reflect/Field;
.line 184
invoke-virtual {v0, v1}, Ljava/lang/reflect/Field;->setAccessible(Z)V
:try_end_2c
.catch Ljava/lang/NoSuchFieldException; {:try_start_21 .. :try_end_2c} :catch_2d
.line 187
goto :goto_33
.line 185
:catch_2d
move-exception v0
.line 186
.local v0, "ee":Ljava/lang/NoSuchFieldException;
const-string v3, "Could not retrieve ThemedResourceCache#mUnthemedEntries field"
invoke-static {v2, v3, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
.line 188
.end local v0 # "ee":Ljava/lang/NoSuchFieldException;
:goto_33
sput-boolean v1, Landroidx/appcompat/app/ResourcesFlusher;->sThemedResourceCache_mUnthemedEntriesFieldFetched:Z
.line 191
:cond_35
sget-object v0, Landroidx/appcompat/app/ResourcesFlusher;->sThemedResourceCache_mUnthemedEntriesField:Ljava/lang/reflect/Field;
if-nez v0, :cond_3a
.line 193
return-void
.line 196
:cond_3a
const/4 v1, 0x0
.line 198
.local v1, "unthemedEntries":Landroid/util/LongSparseArray;
nop
.line 199
:try_start_3c
invoke-virtual {v0, p0}, Ljava/lang/reflect/Field;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Landroid/util/LongSparseArray;
:try_end_42
.catch Ljava/lang/IllegalAccessException; {:try_start_3c .. :try_end_42} :catch_44
move-object v1, v0
.line 202
goto :goto_4a
.line 200
:catch_44
move-exception v0
.line 201
.local v0, "e":Ljava/lang/IllegalAccessException;
const-string v3, "Could not retrieve value from ThemedResourceCache#mUnthemedEntries"
invoke-static {v2, v3, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
.line 204
.end local v0 # "e":Ljava/lang/IllegalAccessException;
:goto_4a
if-eqz v1, :cond_4f
.line 205
invoke-virtual {v1}, Landroid/util/LongSparseArray;->clear()V
.line 207
:cond_4f
return-void
.end method