ResourcesFlusher.smali
.class Landroid/support/v7/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;
.field private static sThemedResourceCacheClazzFetched:Z
.field private static sThemedResourceCache_mUnthemedEntriesField:Ljava/lang/reflect/Field;
.field private static sThemedResourceCache_mUnthemedEntriesFieldFetched:Z
# direct methods
.method constructor <init>()V
.registers 1
.prologue
.line 29
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method static flush(Landroid/content/res/Resources;)Z
.registers 3
.prologue
.line 45
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0x18
if-lt v0, v1, :cond_b
.line 46
invoke-static {p0}, Landroid/support/v7/app/ResourcesFlusher;->flushNougats(Landroid/content/res/Resources;)Z
move-result v0
.line 52
:goto_a
return v0
.line 47
:cond_b
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0x17
if-lt v0, v1, :cond_16
.line 48
invoke-static {p0}, Landroid/support/v7/app/ResourcesFlusher;->flushMarshmallows(Landroid/content/res/Resources;)Z
move-result v0
goto :goto_a
.line 49
:cond_16
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0x15
if-lt v0, v1, :cond_21
.line 50
invoke-static {p0}, Landroid/support/v7/app/ResourcesFlusher;->flushLollipops(Landroid/content/res/Resources;)Z
move-result v0
goto :goto_a
.line 52
:cond_21
const/4 v0, 0x0
goto :goto_a
.end method
.method private static flushLollipops(Landroid/content/res/Resources;)Z
.registers 4
.prologue
const/4 v1, 0x1
.line 57
sget-boolean v0, Landroid/support/v7/app/ResourcesFlusher;->sDrawableCacheFieldFetched:Z
if-nez v0, :cond_15
.line 59
:try_start_5
const-class v0, Landroid/content/res/Resources;
const-string v2, "mDrawableCache"
invoke-virtual {v0, v2}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v0
.line 60
sput-object v0, Landroid/support/v7/app/ResourcesFlusher;->sDrawableCacheField:Ljava/lang/reflect/Field;
const/4 v2, 0x1
invoke-virtual {v0, v2}, Ljava/lang/reflect/Field;->setAccessible(Z)V
:try_end_13
.catch Ljava/lang/NoSuchFieldException; {:try_start_5 .. :try_end_13} :catch_2e
.line 64
:goto_13
sput-boolean v1, Landroid/support/v7/app/ResourcesFlusher;->sDrawableCacheFieldFetched:Z
.line 66
:cond_15
sget-object v0, Landroid/support/v7/app/ResourcesFlusher;->sDrawableCacheField:Ljava/lang/reflect/Field;
if-eqz v0, :cond_2c
.line 67
const/4 v2, 0x0
.line 69
:try_start_1a
sget-object v0, Landroid/support/v7/app/ResourcesFlusher;->sDrawableCacheField:Ljava/lang/reflect/Field;
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_22
.catch Ljava/lang/IllegalAccessException; {:try_start_1a .. :try_end_22} :catch_29
.line 73
:goto_22
if-eqz v0, :cond_2c
.line 74
invoke-interface {v0}, Ljava/util/Map;->clear()V
move v0, v1
.line 78
:goto_28
return v0
:catch_29
move-exception v0
move-object v0, v2
goto :goto_22
:cond_2c
const/4 v0, 0x0
goto :goto_28
:catch_2e
move-exception v0
goto :goto_13
.end method
.method private static flushMarshmallows(Landroid/content/res/Resources;)Z
.registers 5
.prologue
const/4 v0, 0x0
const/4 v1, 0x1
.line 83
sget-boolean v2, Landroid/support/v7/app/ResourcesFlusher;->sDrawableCacheFieldFetched:Z
if-nez v2, :cond_16
.line 85
:try_start_6
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
.line 86
sput-object v2, Landroid/support/v7/app/ResourcesFlusher;->sDrawableCacheField:Ljava/lang/reflect/Field;
const/4 v3, 0x1
invoke-virtual {v2, v3}, Ljava/lang/reflect/Field;->setAccessible(Z)V
:try_end_14
.catch Ljava/lang/NoSuchFieldException; {:try_start_6 .. :try_end_14} :catch_30
.line 90
:goto_14
sput-boolean v1, Landroid/support/v7/app/ResourcesFlusher;->sDrawableCacheFieldFetched:Z
.line 93
:cond_16
const/4 v2, 0x0
.line 94
sget-object v3, Landroid/support/v7/app/ResourcesFlusher;->sDrawableCacheField:Ljava/lang/reflect/Field;
if-eqz v3, :cond_21
.line 96
:try_start_1b
sget-object v3, Landroid/support/v7/app/ResourcesFlusher;->sDrawableCacheField:Ljava/lang/reflect/Field;
invoke-virtual {v3, p0}, Ljava/lang/reflect/Field;->get(Ljava/lang/Object;)Ljava/lang/Object;
:try_end_20
.catch Ljava/lang/IllegalAccessException; {:try_start_1b .. :try_end_20} :catch_2e
move-result-object v2
.line 102
:cond_21
:goto_21
if-nez v2, :cond_24
.line 107
:cond_23
:goto_23
return v0
:cond_24
if-eqz v2, :cond_23
invoke-static {v2}, Landroid/support/v7/app/ResourcesFlusher;->flushThemedResourcesCache(Ljava/lang/Object;)Z
move-result v2
if-eqz v2, :cond_23
move v0, v1
goto :goto_23
:catch_2e
move-exception v3
goto :goto_21
:catch_30
move-exception v2
goto :goto_14
.end method
.method private static flushNougats(Landroid/content/res/Resources;)Z
.registers 7
.prologue
const/4 v2, 0x0
const/4 v0, 0x0
const/4 v1, 0x1
.line 112
sget-boolean v3, Landroid/support/v7/app/ResourcesFlusher;->sResourcesImplFieldFetched:Z
if-nez v3, :cond_17
.line 114
:try_start_7
const-class v3, Landroid/content/res/Resources;
const-string v4, "mResourcesImpl"
invoke-virtual {v3, v4}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v3
.line 115
sput-object v3, Landroid/support/v7/app/ResourcesFlusher;->sResourcesImplField:Ljava/lang/reflect/Field;
const/4 v4, 0x1
invoke-virtual {v3, v4}, Ljava/lang/reflect/Field;->setAccessible(Z)V
:try_end_15
.catch Ljava/lang/NoSuchFieldException; {:try_start_7 .. :try_end_15} :catch_55
.line 119
:goto_15
sput-boolean v1, Landroid/support/v7/app/ResourcesFlusher;->sResourcesImplFieldFetched:Z
.line 122
:cond_17
sget-object v3, Landroid/support/v7/app/ResourcesFlusher;->sResourcesImplField:Ljava/lang/reflect/Field;
if-nez v3, :cond_1c
.line 158
:cond_1b
:goto_1b
return v0
.line 129
:cond_1c
:try_start_1c
sget-object v3, Landroid/support/v7/app/ResourcesFlusher;->sResourcesImplField:Ljava/lang/reflect/Field;
invoke-virtual {v3, p0}, Ljava/lang/reflect/Field;->get(Ljava/lang/Object;)Ljava/lang/Object;
:try_end_21
.catch Ljava/lang/IllegalAccessException; {:try_start_1c .. :try_end_21} :catch_4e
move-result-object v3
.line 134
:goto_22
if-eqz v3, :cond_1b
.line 139
sget-boolean v4, Landroid/support/v7/app/ResourcesFlusher;->sDrawableCacheFieldFetched:Z
if-nez v4, :cond_3a
.line 141
:try_start_28
invoke-virtual {v3}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v4
const-string v5, "mDrawableCache"
invoke-virtual {v4, v5}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v4
.line 142
sput-object v4, Landroid/support/v7/app/ResourcesFlusher;->sDrawableCacheField:Ljava/lang/reflect/Field;
const/4 v5, 0x1
invoke-virtual {v4, v5}, Ljava/lang/reflect/Field;->setAccessible(Z)V
:try_end_38
.catch Ljava/lang/NoSuchFieldException; {:try_start_28 .. :try_end_38} :catch_53
.line 146
:goto_38
sput-boolean v1, Landroid/support/v7/app/ResourcesFlusher;->sDrawableCacheFieldFetched:Z
.line 150
:cond_3a
sget-object v4, Landroid/support/v7/app/ResourcesFlusher;->sDrawableCacheField:Ljava/lang/reflect/Field;
if-eqz v4, :cond_44
.line 152
:try_start_3e
sget-object v4, Landroid/support/v7/app/ResourcesFlusher;->sDrawableCacheField:Ljava/lang/reflect/Field;
invoke-virtual {v4, v3}, Ljava/lang/reflect/Field;->get(Ljava/lang/Object;)Ljava/lang/Object;
:try_end_43
.catch Ljava/lang/IllegalAccessException; {:try_start_3e .. :try_end_43} :catch_51
move-result-object v2
.line 158
:cond_44
:goto_44
if-eqz v2, :cond_1b
invoke-static {v2}, Landroid/support/v7/app/ResourcesFlusher;->flushThemedResourcesCache(Ljava/lang/Object;)Z
move-result v2
if-eqz v2, :cond_1b
move v0, v1
goto :goto_1b
:catch_4e
move-exception v3
move-object v3, v2
goto :goto_22
:catch_51
move-exception v3
goto :goto_44
:catch_53
move-exception v4
goto :goto_38
:catch_55
move-exception v3
goto :goto_15
.end method
.method private static flushThemedResourcesCache(Ljava/lang/Object;)Z
.registers 5
.prologue
const/4 v1, 0x0
const/4 v2, 0x1
.line 163
sget-boolean v0, Landroid/support/v7/app/ResourcesFlusher;->sThemedResourceCacheClazzFetched:Z
if-nez v0, :cond_10
.line 165
:try_start_6
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, Landroid/support/v7/app/ResourcesFlusher;->sThemedResourceCacheClazz:Ljava/lang/Class;
:try_end_e
.catch Ljava/lang/ClassNotFoundException; {:try_start_6 .. :try_end_e} :catch_47
.line 169
:goto_e
sput-boolean v2, Landroid/support/v7/app/ResourcesFlusher;->sThemedResourceCacheClazzFetched:Z
.line 172
:cond_10
sget-object v0, Landroid/support/v7/app/ResourcesFlusher;->sThemedResourceCacheClazz:Ljava/lang/Class;
if-nez v0, :cond_16
move v0, v1
.line 205
:goto_15
return v0
.line 177
:cond_16
sget-boolean v0, Landroid/support/v7/app/ResourcesFlusher;->sThemedResourceCache_mUnthemedEntriesFieldFetched:Z
if-nez v0, :cond_2a
.line 179
:try_start_1a
sget-object v0, Landroid/support/v7/app/ResourcesFlusher;->sThemedResourceCacheClazz:Ljava/lang/Class;
const-string v3, "mUnthemedEntries"
.line 180
invoke-virtual {v0, v3}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v0
.line 181
sput-object v0, Landroid/support/v7/app/ResourcesFlusher;->sThemedResourceCache_mUnthemedEntriesField:Ljava/lang/reflect/Field;
const/4 v3, 0x1
invoke-virtual {v0, v3}, Ljava/lang/reflect/Field;->setAccessible(Z)V
:try_end_28
.catch Ljava/lang/NoSuchFieldException; {:try_start_1a .. :try_end_28} :catch_45
.line 185
:goto_28
sput-boolean v2, Landroid/support/v7/app/ResourcesFlusher;->sThemedResourceCache_mUnthemedEntriesFieldFetched:Z
.line 188
:cond_2a
sget-object v0, Landroid/support/v7/app/ResourcesFlusher;->sThemedResourceCache_mUnthemedEntriesField:Ljava/lang/reflect/Field;
if-nez v0, :cond_30
move v0, v1
.line 190
goto :goto_15
.line 193
:cond_30
const/4 v3, 0x0
.line 195
:try_start_31
sget-object v0, Landroid/support/v7/app/ResourcesFlusher;->sThemedResourceCache_mUnthemedEntriesField:Ljava/lang/reflect/Field;
.line 196
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_39
.catch Ljava/lang/IllegalAccessException; {:try_start_31 .. :try_end_39} :catch_40
.line 201
:goto_39
if-eqz v0, :cond_43
.line 202
invoke-virtual {v0}, Landroid/util/LongSparseArray;->clear()V
move v0, v2
.line 203
goto :goto_15
:catch_40
move-exception v0
move-object v0, v3
goto :goto_39
:cond_43
move v0, v1
.line 205
goto :goto_15
:catch_45
move-exception v0
goto :goto_28
:catch_47
move-exception v0
goto :goto_e
.end method