VungleJobRunner.smali
.class Lcom/vungle/warren/VungleJobRunner;
.super Ljava/lang/Object;
.source "VungleJobRunner.java"
# interfaces
.implements Lcom/vungle/warren/tasks/JobRunner;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/vungle/warren/VungleJobRunner$PendingRunnable;,
Lcom/vungle/warren/VungleJobRunner$PendingJob;
}
.end annotation
# static fields
.field private static final TAG:Ljava/lang/String;
.field private static handler:Landroid/os/Handler;
# instance fields
.field private creator:Lcom/vungle/warren/tasks/JobCreator;
.field private executor:Ljava/util/concurrent/Executor;
.field private final networkListener:Lcom/vungle/warren/utility/NetworkProvider$NetworkListener;
.field private final networkProvider:Lcom/vungle/warren/utility/NetworkProvider;
.field private nextCheck:J
.field private pendingJobs:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Lcom/vungle/warren/VungleJobRunner$PendingJob;",
">;"
}
.end annotation
.end field
.field private pendingRunnable:Ljava/lang/Runnable;
.field private final threadPriorityHelper:Lcom/vungle/warren/tasks/utility/ThreadPriorityHelper;
# direct methods
.method static constructor <clinit>()V
.registers 2
.line 1
new-instance v0, Landroid/os/Handler;
invoke-static {}, Landroid/os/Looper;->getMainLooper()Landroid/os/Looper;
move-result-object v1
invoke-direct {v0, v1}, Landroid/os/Handler;-><init>(Landroid/os/Looper;)V
sput-object v0, Lcom/vungle/warren/VungleJobRunner;->handler:Landroid/os/Handler;
.line 2
const-class v0, Lcom/vungle/warren/VungleJobRunner;
invoke-virtual {v0}, Ljava/lang/Class;->getSimpleName()Ljava/lang/String;
move-result-object v0
sput-object v0, Lcom/vungle/warren/VungleJobRunner;->TAG:Ljava/lang/String;
return-void
.end method
.method constructor <init>(Lcom/vungle/warren/tasks/JobCreator;Ljava/util/concurrent/Executor;Lcom/vungle/warren/tasks/utility/ThreadPriorityHelper;Lcom/vungle/warren/utility/NetworkProvider;)V
.registers 7
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const-wide v0, 0x7fffffffffffffffL
.line 2
iput-wide v0, p0, Lcom/vungle/warren/VungleJobRunner;->nextCheck:J
.line 3
new-instance v0, Lcom/vungle/warren/VungleJobRunner$1;
invoke-direct {v0, p0}, Lcom/vungle/warren/VungleJobRunner$1;-><init>(Lcom/vungle/warren/VungleJobRunner;)V
iput-object v0, p0, Lcom/vungle/warren/VungleJobRunner;->networkListener:Lcom/vungle/warren/utility/NetworkProvider$NetworkListener;
.line 4
iput-object p1, p0, Lcom/vungle/warren/VungleJobRunner;->creator:Lcom/vungle/warren/tasks/JobCreator;
.line 5
iput-object p2, p0, Lcom/vungle/warren/VungleJobRunner;->executor:Ljava/util/concurrent/Executor;
.line 6
iput-object p3, p0, Lcom/vungle/warren/VungleJobRunner;->threadPriorityHelper:Lcom/vungle/warren/tasks/utility/ThreadPriorityHelper;
.line 7
new-instance p1, Ljava/util/concurrent/CopyOnWriteArrayList;
invoke-direct {p1}, Ljava/util/concurrent/CopyOnWriteArrayList;-><init>()V
iput-object p1, p0, Lcom/vungle/warren/VungleJobRunner;->pendingJobs:Ljava/util/List;
.line 8
iput-object p4, p0, Lcom/vungle/warren/VungleJobRunner;->networkProvider:Lcom/vungle/warren/utility/NetworkProvider;
.line 9
new-instance p1, Lcom/vungle/warren/VungleJobRunner$PendingRunnable;
new-instance p2, Ljava/lang/ref/WeakReference;
invoke-direct {p2, p0}, Ljava/lang/ref/WeakReference;-><init>(Ljava/lang/Object;)V
invoke-direct {p1, p2}, Lcom/vungle/warren/VungleJobRunner$PendingRunnable;-><init>(Ljava/lang/ref/WeakReference;)V
iput-object p1, p0, Lcom/vungle/warren/VungleJobRunner;->pendingRunnable:Ljava/lang/Runnable;
return-void
.end method
.method static synthetic access$000(Lcom/vungle/warren/VungleJobRunner;)V
.registers 1
.line 1
invoke-direct {p0}, Lcom/vungle/warren/VungleJobRunner;->executePendingJobs()V
return-void
.end method
.method private declared-synchronized executePendingJobs()V
.registers 18
move-object/from16 v1, p0
monitor-enter p0
.line 1
:try_start_3
invoke-static {}, Landroid/os/SystemClock;->uptimeMillis()J
move-result-wide v2
.line 2
iget-object v0, v1, Lcom/vungle/warren/VungleJobRunner;->pendingJobs:Ljava/util/List;
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v0
const-wide v6, 0x7fffffffffffffffL
move-wide v8, v6
const-wide/16 v10, 0x0
:cond_15
:goto_15
invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z
move-result v12
if-eqz v12, :cond_61
invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v12
check-cast v12, Lcom/vungle/warren/VungleJobRunner$PendingJob;
.line 3
# getter for: Lcom/vungle/warren/VungleJobRunner$PendingJob;->uptimeMillis:J
invoke-static {v12}, Lcom/vungle/warren/VungleJobRunner$PendingJob;->access$100(Lcom/vungle/warren/VungleJobRunner$PendingJob;)J
move-result-wide v13
cmp-long v15, v2, v13
if-ltz v15, :cond_57
.line 4
iget-object v13, v12, Lcom/vungle/warren/VungleJobRunner$PendingJob;->info:Lcom/vungle/warren/tasks/JobInfo;
invoke-virtual {v13}, Lcom/vungle/warren/tasks/JobInfo;->getRequiredNetworkType()I
move-result v13
const/4 v14, 0x1
if-ne v13, v14, :cond_3f
iget-object v13, v1, Lcom/vungle/warren/VungleJobRunner;->networkProvider:Lcom/vungle/warren/utility/NetworkProvider;
.line 5
invoke-virtual {v13}, Lcom/vungle/warren/utility/NetworkProvider;->getCurrentNetworkType()I
move-result v13
const/4 v15, -0x1
if-ne v13, v15, :cond_3f
const/4 v14, 0x0
const-wide/16 v15, 0x1
add-long/2addr v10, v15
:cond_3f
if-eqz v14, :cond_15
.line 6
iget-object v13, v1, Lcom/vungle/warren/VungleJobRunner;->pendingJobs:Ljava/util/List;
invoke-interface {v13, v12}, Ljava/util/List;->remove(Ljava/lang/Object;)Z
.line 7
iget-object v13, v1, Lcom/vungle/warren/VungleJobRunner;->executor:Ljava/util/concurrent/Executor;
new-instance v14, Lcom/vungle/warren/tasks/runnable/JobRunnable;
iget-object v12, v12, Lcom/vungle/warren/VungleJobRunner$PendingJob;->info:Lcom/vungle/warren/tasks/JobInfo;
iget-object v15, v1, Lcom/vungle/warren/VungleJobRunner;->creator:Lcom/vungle/warren/tasks/JobCreator;
iget-object v4, v1, Lcom/vungle/warren/VungleJobRunner;->threadPriorityHelper:Lcom/vungle/warren/tasks/utility/ThreadPriorityHelper;
invoke-direct {v14, v12, v15, v1, v4}, Lcom/vungle/warren/tasks/runnable/JobRunnable;-><init>(Lcom/vungle/warren/tasks/JobInfo;Lcom/vungle/warren/tasks/JobCreator;Lcom/vungle/warren/tasks/JobRunner;Lcom/vungle/warren/tasks/utility/ThreadPriorityHelper;)V
invoke-interface {v13, v14}, Ljava/util/concurrent/Executor;->execute(Ljava/lang/Runnable;)V
goto :goto_15
.line 8
:cond_57
# getter for: Lcom/vungle/warren/VungleJobRunner$PendingJob;->uptimeMillis:J
invoke-static {v12}, Lcom/vungle/warren/VungleJobRunner$PendingJob;->access$100(Lcom/vungle/warren/VungleJobRunner$PendingJob;)J
move-result-wide v4
invoke-static {v8, v9, v4, v5}, Ljava/lang/Math;->min(JJ)J
move-result-wide v4
move-wide v8, v4
goto :goto_15
:cond_61
cmp-long v0, v8, v6
if-eqz v0, :cond_7b
.line 9
iget-wide v2, v1, Lcom/vungle/warren/VungleJobRunner;->nextCheck:J
cmp-long v0, v8, v2
if-eqz v0, :cond_7b
.line 10
sget-object v0, Lcom/vungle/warren/VungleJobRunner;->handler:Landroid/os/Handler;
iget-object v2, v1, Lcom/vungle/warren/VungleJobRunner;->pendingRunnable:Ljava/lang/Runnable;
invoke-virtual {v0, v2}, Landroid/os/Handler;->removeCallbacks(Ljava/lang/Runnable;)V
.line 11
sget-object v0, Lcom/vungle/warren/VungleJobRunner;->handler:Landroid/os/Handler;
iget-object v2, v1, Lcom/vungle/warren/VungleJobRunner;->pendingRunnable:Ljava/lang/Runnable;
sget-object v3, Lcom/vungle/warren/VungleJobRunner;->TAG:Ljava/lang/String;
invoke-virtual {v0, v2, v3, v8, v9}, Landroid/os/Handler;->postAtTime(Ljava/lang/Runnable;Ljava/lang/Object;J)Z
.line 12
:cond_7b
iput-wide v8, v1, Lcom/vungle/warren/VungleJobRunner;->nextCheck:J
const-wide/16 v2, 0x0
cmp-long v0, v10, v2
if-lez v0, :cond_8b
.line 13
iget-object v0, v1, Lcom/vungle/warren/VungleJobRunner;->networkProvider:Lcom/vungle/warren/utility/NetworkProvider;
iget-object v2, v1, Lcom/vungle/warren/VungleJobRunner;->networkListener:Lcom/vungle/warren/utility/NetworkProvider$NetworkListener;
invoke-virtual {v0, v2}, Lcom/vungle/warren/utility/NetworkProvider;->addListener(Lcom/vungle/warren/utility/NetworkProvider$NetworkListener;)V
goto :goto_92
.line 14
:cond_8b
iget-object v0, v1, Lcom/vungle/warren/VungleJobRunner;->networkProvider:Lcom/vungle/warren/utility/NetworkProvider;
iget-object v2, v1, Lcom/vungle/warren/VungleJobRunner;->networkListener:Lcom/vungle/warren/utility/NetworkProvider$NetworkListener;
invoke-virtual {v0, v2}, Lcom/vungle/warren/utility/NetworkProvider;->removeListener(Lcom/vungle/warren/utility/NetworkProvider$NetworkListener;)V
:try_end_92
.catchall {:try_start_3 .. :try_end_92} :catchall_94
.line 15
:goto_92
monitor-exit p0
return-void
:catchall_94
move-exception v0
monitor-exit p0
goto :goto_98
:goto_97
throw v0
:goto_98
goto :goto_97
.end method
# virtual methods
.method public declared-synchronized execute(Lcom/vungle/warren/tasks/JobInfo;)V
.registers 10
monitor-enter p0
.line 1
:try_start_1
invoke-virtual {p1}, Lcom/vungle/warren/tasks/JobInfo;->copy()Lcom/vungle/warren/tasks/JobInfo;
move-result-object p1
.line 2
invoke-virtual {p1}, Lcom/vungle/warren/tasks/JobInfo;->getJobTag()Ljava/lang/String;
move-result-object v0
.line 3
invoke-virtual {p1}, Lcom/vungle/warren/tasks/JobInfo;->getDelay()J
move-result-wide v1
const-wide/16 v3, 0x0
.line 4
invoke-virtual {p1, v3, v4}, Lcom/vungle/warren/tasks/JobInfo;->setDelay(J)Lcom/vungle/warren/tasks/JobInfo;
.line 5
invoke-virtual {p1}, Lcom/vungle/warren/tasks/JobInfo;->getUpdateCurrent()Z
move-result v3
if-eqz v3, :cond_52
.line 6
iget-object v3, p0, Lcom/vungle/warren/VungleJobRunner;->pendingJobs:Ljava/util/List;
invoke-interface {v3}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v3
:cond_1e
:goto_1e
invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z
move-result v4
if-eqz v4, :cond_52
invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v4
check-cast v4, Lcom/vungle/warren/VungleJobRunner$PendingJob;
.line 7
iget-object v5, v4, Lcom/vungle/warren/VungleJobRunner$PendingJob;->info:Lcom/vungle/warren/tasks/JobInfo;
invoke-virtual {v5}, Lcom/vungle/warren/tasks/JobInfo;->getJobTag()Ljava/lang/String;
move-result-object v5
invoke-virtual {v5, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v5
if-eqz v5, :cond_1e
.line 8
sget-object v5, Lcom/vungle/warren/VungleJobRunner;->TAG:Ljava/lang/String;
new-instance v6, Ljava/lang/StringBuilder;
invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V
const-string v7, "replacing pending job with new "
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v6, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v6}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v6
invoke-static {v5, v6}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 9
iget-object v5, p0, Lcom/vungle/warren/VungleJobRunner;->pendingJobs:Ljava/util/List;
invoke-interface {v5, v4}, Ljava/util/List;->remove(Ljava/lang/Object;)Z
goto :goto_1e
.line 10
:cond_52
iget-object v0, p0, Lcom/vungle/warren/VungleJobRunner;->pendingJobs:Ljava/util/List;
new-instance v3, Lcom/vungle/warren/VungleJobRunner$PendingJob;
invoke-static {}, Landroid/os/SystemClock;->uptimeMillis()J
move-result-wide v4
add-long/2addr v4, v1
invoke-direct {v3, v4, v5, p1}, Lcom/vungle/warren/VungleJobRunner$PendingJob;-><init>(JLcom/vungle/warren/tasks/JobInfo;)V
invoke-interface {v0, v3}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 11
invoke-direct {p0}, Lcom/vungle/warren/VungleJobRunner;->executePendingJobs()V
:try_end_64
.catchall {:try_start_1 .. :try_end_64} :catchall_66
.line 12
monitor-exit p0
return-void
:catchall_66
move-exception p1
monitor-exit p0
goto :goto_6a
:goto_69
throw p1
:goto_6a
goto :goto_69
.end method