LimitedDiscCache.smali
.class public abstract Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;
.super Lcom/nostra13/universalimageloader/cache/disc/BaseDiscCache;
.source "LimitedDiscCache.java"
# static fields
.field private static final INVALID_SIZE:I = -0x1
# instance fields
.field private final cacheSize:Ljava/util/concurrent/atomic/AtomicInteger;
.field private final lastUsageDates:Ljava/util/Map;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Map",
"<",
"Ljava/io/File;",
"Ljava/lang/Long;",
">;"
}
.end annotation
.end field
.field private final sizeLimit:I
# direct methods
.method public constructor <init>(Ljava/io/File;Lcom/nostra13/universalimageloader/cache/disc/naming/FileNameGenerator;I)V
.registers 5
.prologue
.line 55
invoke-direct {p0, p1, p2}, Lcom/nostra13/universalimageloader/cache/disc/BaseDiscCache;-><init>(Ljava/io/File;Lcom/nostra13/universalimageloader/cache/disc/naming/FileNameGenerator;)V
.line 45
new-instance v0, Ljava/util/HashMap;
invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
invoke-static {v0}, Ljava/util/Collections;->synchronizedMap(Ljava/util/Map;)Ljava/util/Map;
move-result-object v0
iput-object v0, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->lastUsageDates:Ljava/util/Map;
.line 56
iput p3, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->sizeLimit:I
.line 57
new-instance v0, Ljava/util/concurrent/atomic/AtomicInteger;
invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicInteger;-><init>()V
iput-object v0, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->cacheSize:Ljava/util/concurrent/atomic/AtomicInteger;
.line 58
invoke-direct {p0}, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->calculateCacheSizeAndFillUsageMap()V
.line 59
return-void
.end method
.method static synthetic access$000(Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;)Ljava/util/Map;
.registers 2
.prologue
.line 37
iget-object v0, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->lastUsageDates:Ljava/util/Map;
return-object v0
.end method
.method static synthetic access$100(Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;)Ljava/util/concurrent/atomic/AtomicInteger;
.registers 2
.prologue
.line 37
iget-object v0, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->cacheSize:Ljava/util/concurrent/atomic/AtomicInteger;
return-object v0
.end method
.method private calculateCacheSizeAndFillUsageMap()V
.registers 3
.prologue
.line 62
new-instance v0, Ljava/lang/Thread;
new-instance v1, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache$1;
invoke-direct {v1, p0}, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache$1;-><init>(Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;)V
invoke-direct {v0, v1}, Ljava/lang/Thread;-><init>(Ljava/lang/Runnable;)V
.line 75
invoke-virtual {v0}, Ljava/lang/Thread;->start()V
.line 76
return-void
.end method
.method private removeNext()I
.registers 12
.prologue
const/4 v2, 0x0
.line 115
iget-object v0, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->lastUsageDates:Ljava/util/Map;
invoke-interface {v0}, Ljava/util/Map;->isEmpty()Z
move-result v0
if-eqz v0, :cond_b
.line 116
const/4 v0, -0x1
.line 147
:cond_a
:goto_a
return v0
.line 120
:cond_b
iget-object v0, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->lastUsageDates:Ljava/util/Map;
invoke-interface {v0}, Ljava/util/Map;->entrySet()Ljava/util/Set;
move-result-object v0
.line 121
iget-object v4, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->lastUsageDates:Ljava/util/Map;
monitor-enter v4
.line 122
:try_start_14
invoke-interface {v0}, Ljava/util/Set;->iterator()Ljava/util/Iterator;
move-result-object v5
move-object v3, v2
:goto_19
invoke-interface {v5}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_52
invoke-interface {v5}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/util/Map$Entry;
.line 123
if-nez v2, :cond_36
.line 124
invoke-interface {v0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;
move-result-object v1
check-cast v1, Ljava/io/File;
.line 125
invoke-interface {v0}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/Long;
:goto_33
move-object v2, v1
move-object v3, v0
.line 133
goto :goto_19
.line 127
:cond_36
invoke-interface {v0}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object;
move-result-object v1
check-cast v1, Ljava/lang/Long;
.line 128
invoke-virtual {v1}, Ljava/lang/Long;->longValue()J
move-result-wide v6
invoke-virtual {v3}, Ljava/lang/Long;->longValue()J
move-result-wide v8
cmp-long v6, v6, v8
if-gez v6, :cond_75
.line 130
invoke-interface {v0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/io/File;
move-object v10, v0
move-object v0, v1
move-object v1, v10
goto :goto_33
.line 134
:cond_52
monitor-exit v4
:try_end_53
.catchall {:try_start_14 .. :try_end_53} :catchall_6c
.line 136
const/4 v0, 0x0
.line 137
if-eqz v2, :cond_a
.line 138
invoke-virtual {v2}, Ljava/io/File;->exists()Z
move-result v1
if-eqz v1, :cond_6f
.line 139
invoke-virtual {p0, v2}, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->getSize(Ljava/io/File;)I
move-result v0
.line 140
invoke-virtual {v2}, Ljava/io/File;->delete()Z
move-result v1
if-eqz v1, :cond_a
.line 141
iget-object v1, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->lastUsageDates:Ljava/util/Map;
invoke-interface {v1, v2}, Ljava/util/Map;->remove(Ljava/lang/Object;)Ljava/lang/Object;
goto :goto_a
.line 134
:catchall_6c
move-exception v0
:try_start_6d
monitor-exit v4
:try_end_6e
.catchall {:try_start_6d .. :try_end_6e} :catchall_6c
throw v0
.line 144
:cond_6f
iget-object v1, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->lastUsageDates:Ljava/util/Map;
invoke-interface {v1, v2}, Ljava/util/Map;->remove(Ljava/lang/Object;)Ljava/lang/Object;
goto :goto_a
:cond_75
move-object v1, v2
move-object v0, v3
goto :goto_33
.end method
# virtual methods
.method public clear()V
.registers 3
.prologue
.line 108
iget-object v0, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->lastUsageDates:Ljava/util/Map;
invoke-interface {v0}, Ljava/util/Map;->clear()V
.line 109
iget-object v0, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->cacheSize:Ljava/util/concurrent/atomic/AtomicInteger;
const/4 v1, 0x0
invoke-virtual {v0, v1}, Ljava/util/concurrent/atomic/AtomicInteger;->set(I)V
.line 110
invoke-super {p0}, Lcom/nostra13/universalimageloader/cache/disc/BaseDiscCache;->clear()V
.line 111
return-void
.end method
.method public get(Ljava/lang/String;)Ljava/io/File;
.registers 6
.prologue
.line 97
invoke-super {p0, p1}, Lcom/nostra13/universalimageloader/cache/disc/BaseDiscCache;->get(Ljava/lang/String;)Ljava/io/File;
move-result-object v0
.line 99
invoke-static {}, Ljava/lang/System;->currentTimeMillis()J
move-result-wide v2
invoke-static {v2, v3}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v1
.line 100
invoke-virtual {v1}, Ljava/lang/Long;->longValue()J
move-result-wide v2
invoke-virtual {v0, v2, v3}, Ljava/io/File;->setLastModified(J)Z
.line 101
iget-object v2, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->lastUsageDates:Ljava/util/Map;
invoke-interface {v2, v0, v1}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 103
return-object v0
.end method
.method protected abstract getSize(Ljava/io/File;)I
.end method
.method public put(Ljava/lang/String;Ljava/io/File;)V
.registers 7
.prologue
.line 80
invoke-virtual {p0, p2}, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->getSize(Ljava/io/File;)I
move-result v1
.line 81
iget-object v0, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->cacheSize:Ljava/util/concurrent/atomic/AtomicInteger;
invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->get()I
move-result v0
.line 83
:goto_a
add-int/2addr v0, v1
iget v2, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->sizeLimit:I
if-le v0, v2, :cond_16
.line 84
invoke-direct {p0}, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->removeNext()I
move-result v0
.line 85
const/4 v2, -0x1
if-ne v0, v2, :cond_30
.line 88
:cond_16
iget-object v0, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->cacheSize:Ljava/util/concurrent/atomic/AtomicInteger;
invoke-virtual {v0, v1}, Ljava/util/concurrent/atomic/AtomicInteger;->addAndGet(I)I
.line 90
invoke-static {}, Ljava/lang/System;->currentTimeMillis()J
move-result-wide v0
invoke-static {v0, v1}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v0
.line 91
invoke-virtual {v0}, Ljava/lang/Long;->longValue()J
move-result-wide v2
invoke-virtual {p2, v2, v3}, Ljava/io/File;->setLastModified(J)Z
.line 92
iget-object v1, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->lastUsageDates:Ljava/util/Map;
invoke-interface {v1, p2, v0}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 93
return-void
.line 86
:cond_30
iget-object v2, p0, Lcom/nostra13/universalimageloader/cache/disc/LimitedDiscCache;->cacheSize:Ljava/util/concurrent/atomic/AtomicInteger;
neg-int v0, v0
invoke-virtual {v2, v0}, Ljava/util/concurrent/atomic/AtomicInteger;->addAndGet(I)I
move-result v0
goto :goto_a
.end method