DownloadQueue.smali
.class public Lcom/h/m/DownloadQueue;
.super Ljava/lang/Object;
# instance fields
.field private mDispatchers:[Lcom/h/m/DownloadDispatcher;
.field private final mDownloadQueue:Ljava/util/concurrent/BlockingQueue;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/concurrent/BlockingQueue",
"<",
"Lcom/h/m/DownloadRequest;",
">;"
}
.end annotation
.end field
.field private mInteger:Ljava/util/concurrent/atomic/AtomicInteger;
.field private final mUnFinishQueue:Ljava/util/concurrent/BlockingQueue;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/concurrent/BlockingQueue",
"<",
"Lcom/h/m/DownloadRequest;",
">;"
}
.end annotation
.end field
# direct methods
.method public constructor <init>(I)V
.registers 3
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
new-instance v0, Ljava/util/concurrent/atomic/AtomicInteger;
invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicInteger;-><init>()V
iput-object v0, p0, Lcom/h/m/DownloadQueue;->mInteger:Ljava/util/concurrent/atomic/AtomicInteger;
new-instance v0, Ljava/util/concurrent/LinkedBlockingDeque;
invoke-direct {v0}, Ljava/util/concurrent/LinkedBlockingDeque;-><init>()V
iput-object v0, p0, Lcom/h/m/DownloadQueue;->mUnFinishQueue:Ljava/util/concurrent/BlockingQueue;
new-instance v0, Ljava/util/concurrent/PriorityBlockingQueue;
invoke-direct {v0}, Ljava/util/concurrent/PriorityBlockingQueue;-><init>()V
iput-object v0, p0, Lcom/h/m/DownloadQueue;->mDownloadQueue:Ljava/util/concurrent/BlockingQueue;
new-array v0, p1, [Lcom/h/m/DownloadDispatcher;
iput-object v0, p0, Lcom/h/m/DownloadQueue;->mDispatchers:[Lcom/h/m/DownloadDispatcher;
return-void
.end method
# virtual methods
.method public add(ILcom/h/m/DownloadRequest;Lcom/h/m/DownloadListener;)V
.registers 5
invoke-virtual {p2}, Lcom/h/m/DownloadRequest;->inQueue()Z
move-result v0
if-eqz v0, :cond_d
const-string/jumbo v0, "This request has been in the queue"
invoke-static {v0}, Lcom/h/r/Logger;->w(Ljava/lang/String;)V
:goto_c
return-void
:cond_d
iget-object v0, p0, Lcom/h/m/DownloadQueue;->mUnFinishQueue:Ljava/util/concurrent/BlockingQueue;
invoke-virtual {p2, v0}, Lcom/h/m/DownloadRequest;->setQueue(Ljava/util/concurrent/BlockingQueue;)V
invoke-virtual {p2, p1, p3}, Lcom/h/m/DownloadRequest;->onPreResponse(ILcom/h/m/DownloadListener;)V
iget-object v0, p0, Lcom/h/m/DownloadQueue;->mInteger:Ljava/util/concurrent/atomic/AtomicInteger;
invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->incrementAndGet()I
move-result v0
invoke-virtual {p2, v0}, Lcom/h/m/DownloadRequest;->setSequence(I)Lcom/h/r/BasicRequest;
iget-object v0, p0, Lcom/h/m/DownloadQueue;->mUnFinishQueue:Ljava/util/concurrent/BlockingQueue;
invoke-interface {v0, p2}, Ljava/util/concurrent/BlockingQueue;->add(Ljava/lang/Object;)Z
iget-object v0, p0, Lcom/h/m/DownloadQueue;->mDownloadQueue:Ljava/util/concurrent/BlockingQueue;
invoke-interface {v0, p2}, Ljava/util/concurrent/BlockingQueue;->add(Ljava/lang/Object;)Z
goto :goto_c
.end method
.method public cancelAll()V
.registers 4
iget-object v1, p0, Lcom/h/m/DownloadQueue;->mUnFinishQueue:Ljava/util/concurrent/BlockingQueue;
monitor-enter v1
:try_start_3
iget-object v0, p0, Lcom/h/m/DownloadQueue;->mUnFinishQueue:Ljava/util/concurrent/BlockingQueue;
invoke-interface {v0}, Ljava/util/concurrent/BlockingQueue;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_9
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_1c
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/h/m/DownloadRequest;
invoke-virtual {v0}, Lcom/h/m/DownloadRequest;->cancel()V
goto :goto_9
:catchall_19
move-exception v0
monitor-exit v1
:try_end_1b
.catchall {:try_start_3 .. :try_end_1b} :catchall_19
throw v0
:cond_1c
:try_start_1c
monitor-exit v1
:try_end_1d
.catchall {:try_start_1c .. :try_end_1d} :catchall_19
return-void
.end method
.method public cancelBySign(Ljava/lang/Object;)V
.registers 5
iget-object v1, p0, Lcom/h/m/DownloadQueue;->mUnFinishQueue:Ljava/util/concurrent/BlockingQueue;
monitor-enter v1
:try_start_3
iget-object v0, p0, Lcom/h/m/DownloadQueue;->mUnFinishQueue:Ljava/util/concurrent/BlockingQueue;
invoke-interface {v0}, Ljava/util/concurrent/BlockingQueue;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_9
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_1c
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/h/m/DownloadRequest;
invoke-virtual {v0, p1}, Lcom/h/m/DownloadRequest;->cancelBySign(Ljava/lang/Object;)V
goto :goto_9
:catchall_19
move-exception v0
monitor-exit v1
:try_end_1b
.catchall {:try_start_3 .. :try_end_1b} :catchall_19
throw v0
:cond_1c
:try_start_1c
monitor-exit v1
:try_end_1d
.catchall {:try_start_1c .. :try_end_1d} :catchall_19
return-void
.end method
.method public start()V
.registers 5
invoke-virtual {p0}, Lcom/h/m/DownloadQueue;->stop()V
const/4 v0, 0x0
:goto_4
iget-object v1, p0, Lcom/h/m/DownloadQueue;->mDispatchers:[Lcom/h/m/DownloadDispatcher;
array-length v1, v1
if-ge v0, v1, :cond_1c
new-instance v1, Lcom/h/m/DownloadDispatcher;
iget-object v2, p0, Lcom/h/m/DownloadQueue;->mUnFinishQueue:Ljava/util/concurrent/BlockingQueue;
iget-object v3, p0, Lcom/h/m/DownloadQueue;->mDownloadQueue:Ljava/util/concurrent/BlockingQueue;
invoke-direct {v1, v2, v3}, Lcom/h/m/DownloadDispatcher;-><init>(Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/BlockingQueue;)V
iget-object v2, p0, Lcom/h/m/DownloadQueue;->mDispatchers:[Lcom/h/m/DownloadDispatcher;
aput-object v1, v2, v0
invoke-virtual {v1}, Lcom/h/m/DownloadDispatcher;->start()V
add-int/lit8 v0, v0, 0x1
goto :goto_4
:cond_1c
return-void
.end method
.method public stop()V
.registers 5
iget-object v1, p0, Lcom/h/m/DownloadQueue;->mDispatchers:[Lcom/h/m/DownloadDispatcher;
array-length v2, v1
const/4 v0, 0x0
:goto_4
if-ge v0, v2, :cond_10
aget-object v3, v1, v0
if-eqz v3, :cond_d
invoke-virtual {v3}, Lcom/h/m/DownloadDispatcher;->quit()V
:cond_d
add-int/lit8 v0, v0, 0x1
goto :goto_4
:cond_10
return-void
.end method
.method public unFinishSize()I
.registers 2
iget-object v0, p0, Lcom/h/m/DownloadQueue;->mUnFinishQueue:Ljava/util/concurrent/BlockingQueue;
invoke-interface {v0}, Ljava/util/concurrent/BlockingQueue;->size()I
move-result v0
return v0
.end method
.method public unStartSize()I
.registers 2
iget-object v0, p0, Lcom/h/m/DownloadQueue;->mDownloadQueue:Ljava/util/concurrent/BlockingQueue;
invoke-interface {v0}, Ljava/util/concurrent/BlockingQueue;->size()I
move-result v0
return v0
.end method