JobService.smali

.class public abstract Lcom/firebase/jobdispatcher/JobService;
.super Landroid/app/Service;
.source "JobService.java"


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lcom/firebase/jobdispatcher/JobService$JobCallback;,
        Lcom/firebase/jobdispatcher/JobService$JobResult;
    }
.end annotation


# static fields
.field public static final ACTION_EXECUTE:Ljava/lang/String; = "com.firebase.jobdispatcher.ACTION_EXECUTE"
    .annotation build Landroidx/annotation/VisibleForTesting;
    .end annotation
.end field

.field public static final RESULT_FAIL_NORETRY:I = 0x2

.field public static final RESULT_FAIL_RETRY:I = 0x1

.field public static final RESULT_SUCCESS:I = 0x0

.field public static final TAG:Ljava/lang/String; = "FJD.JobService"

.field public static final mainHandler:Landroid/os/Handler;


# instance fields
.field public final binder:Lcom/firebase/jobdispatcher/IRemoteJobService$Stub;

.field public final runningJobs:Landroidx/collection/SimpleArrayMap;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Landroidx/collection/SimpleArrayMap<",
            "Ljava/lang/String;",
            "Lcom/firebase/jobdispatcher/JobService$JobCallback;",
            ">;"
        }
    .end annotation
.end field


# direct methods
.method public static constructor <clinit>()V
    .registers 2

    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/firebase/jobdispatcher/JobService;->mainHandler:Landroid/os/Handler;

    return-void
.end method

.method public constructor <init>()V
    .registers 3

    invoke-direct {p0}, Landroid/app/Service;-><init>()V

    new-instance v0, Landroidx/collection/SimpleArrayMap;

    const/4 v1, 0x1

    invoke-direct {v0, v1}, Landroidx/collection/SimpleArrayMap;-><init>(I)V

    iput-object v0, p0, Lcom/firebase/jobdispatcher/JobService;->runningJobs:Landroidx/collection/SimpleArrayMap;

    new-instance v0, Lcom/firebase/jobdispatcher/JobService$1;

    invoke-direct {v0, p0}, Lcom/firebase/jobdispatcher/JobService$1;-><init>(Lcom/firebase/jobdispatcher/JobService;)V

    iput-object v0, p0, Lcom/firebase/jobdispatcher/JobService;->binder:Lcom/firebase/jobdispatcher/IRemoteJobService$Stub;

    return-void
.end method

.method public static synthetic access$100(Lcom/firebase/jobdispatcher/JobService;)Landroidx/collection/SimpleArrayMap;
    .registers 1

    iget-object p0, p0, Lcom/firebase/jobdispatcher/JobService;->runningJobs:Landroidx/collection/SimpleArrayMap;

    return-object p0
.end method


# virtual methods
.method public final dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
    .registers 4

    invoke-super {p0, p1, p2, p3}, Landroid/app/Service;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V

    return-void
.end method

.method public final jobFinished(Lcom/firebase/jobdispatcher/JobParameters;Z)V
    .registers 5
    .param p1    # Lcom/firebase/jobdispatcher/JobParameters;
        .annotation build Landroidx/annotation/NonNull;
        .end annotation
    .end param

    if-nez p1, :cond_a

    const-string p1, "FJD.JobService"

    const-string p2, "jobFinished called with a null JobParameters"

    invoke-static {p1, p2}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I

    return-void

    :cond_a
    iget-object v0, p0, Lcom/firebase/jobdispatcher/JobService;->runningJobs:Landroidx/collection/SimpleArrayMap;

    monitor-enter v0

    :try_start_d
    iget-object v1, p0, Lcom/firebase/jobdispatcher/JobService;->runningJobs:Landroidx/collection/SimpleArrayMap;

    invoke-interface {p1}, Lcom/firebase/jobdispatcher/JobParameters;->getTag()Ljava/lang/String;

    move-result-object p1

    invoke-virtual {v1, p1}, Landroidx/collection/SimpleArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object p1

    check-cast p1, Lcom/firebase/jobdispatcher/JobService$JobCallback;

    if-eqz p1, :cond_23

    if-eqz p2, :cond_1f

    const/4 p2, 0x1

    goto :goto_20

    :cond_1f
    const/4 p2, 0x0

    :goto_20
    invoke-virtual {p1, p2}, Lcom/firebase/jobdispatcher/JobService$JobCallback;->sendResult(I)V

    :cond_23
    monitor-exit v0

    return-void

    :catchall_25
    move-exception p1

    monitor-exit v0
    :try_end_27
    .catchall {:try_start_d .. :try_end_27} :catchall_25

    throw p1
.end method

.method public final onBind(Landroid/content/Intent;)Landroid/os/IBinder;
    .registers 2
    .annotation build Landroidx/annotation/Nullable;
    .end annotation

    iget-object p1, p0, Lcom/firebase/jobdispatcher/JobService;->binder:Lcom/firebase/jobdispatcher/IRemoteJobService$Stub;

    return-object p1
.end method

.method public final onConfigurationChanged(Landroid/content/res/Configuration;)V
    .registers 2

    invoke-super {p0, p1}, Landroid/app/Service;->onConfigurationChanged(Landroid/content/res/Configuration;)V

    return-void
.end method

.method public final onRebind(Landroid/content/Intent;)V
    .registers 2

    invoke-super {p0, p1}, Landroid/app/Service;->onRebind(Landroid/content/Intent;)V

    return-void
.end method

.method public final onStart(Landroid/content/Intent;I)V
    .registers 3

    return-void
.end method

.method public final onStartCommand(Landroid/content/Intent;II)I
    .registers 4

    invoke-virtual {p0, p3}, Landroid/app/Service;->stopSelf(I)V

    const/4 p1, 0x2

    return p1
.end method

.method public abstract onStartJob(Lcom/firebase/jobdispatcher/JobParameters;)Z
    .annotation build Landroidx/annotation/MainThread;
    .end annotation
.end method

.method public abstract onStopJob(Lcom/firebase/jobdispatcher/JobParameters;)Z
    .annotation build Landroidx/annotation/MainThread;
    .end annotation
.end method

.method public final onTaskRemoved(Landroid/content/Intent;)V
    .registers 2

    invoke-super {p0, p1}, Landroid/app/Service;->onTaskRemoved(Landroid/content/Intent;)V

    return-void
.end method

.method public final onUnbind(Landroid/content/Intent;)Z
    .registers 7
    .annotation build Landroidx/annotation/MainThread;
    .end annotation

    iget-object v0, p0, Lcom/firebase/jobdispatcher/JobService;->runningJobs:Landroidx/collection/SimpleArrayMap;

    monitor-enter v0

    :try_start_3
    iget-object v1, p0, Lcom/firebase/jobdispatcher/JobService;->runningJobs:Landroidx/collection/SimpleArrayMap;

    invoke-virtual {v1}, Landroidx/collection/SimpleArrayMap;->size()I

    move-result v1

    const/4 v2, 0x1

    sub-int/2addr v1, v2

    :goto_b
    if-ltz v1, :cond_2e

    iget-object v3, p0, Lcom/firebase/jobdispatcher/JobService;->runningJobs:Landroidx/collection/SimpleArrayMap;

    iget-object v4, p0, Lcom/firebase/jobdispatcher/JobService;->runningJobs:Landroidx/collection/SimpleArrayMap;

    invoke-virtual {v4, v1}, Landroidx/collection/SimpleArrayMap;->keyAt(I)Ljava/lang/Object;

    move-result-object v4

    invoke-virtual {v3, v4}, Landroidx/collection/SimpleArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v3

    check-cast v3, Lcom/firebase/jobdispatcher/JobService$JobCallback;

    if-eqz v3, :cond_2b

    iget-object v4, v3, Lcom/firebase/jobdispatcher/JobService$JobCallback;->job:Lcom/firebase/jobdispatcher/JobParameters;

    invoke-virtual {p0, v4}, Lcom/firebase/jobdispatcher/JobService;->onStopJob(Lcom/firebase/jobdispatcher/JobParameters;)Z

    move-result v4

    if-eqz v4, :cond_27

    const/4 v4, 0x1

    goto :goto_28

    :cond_27
    const/4 v4, 0x2

    :goto_28
    invoke-virtual {v3, v4}, Lcom/firebase/jobdispatcher/JobService$JobCallback;->sendResult(I)V

    :cond_2b
    add-int/lit8 v1, v1, -0x1

    goto :goto_b

    :cond_2e
    monitor-exit v0
    :try_end_2f
    .catchall {:try_start_3 .. :try_end_2f} :catchall_34

    invoke-super {p0, p1}, Landroid/app/Service;->onUnbind(Landroid/content/Intent;)Z

    move-result p1

    return p1

    :catchall_34
    move-exception p1

    :try_start_35
    monitor-exit v0
    :try_end_36
    .catchall {:try_start_35 .. :try_end_36} :catchall_34

    goto :goto_38

    :goto_37
    throw p1

    :goto_38
    goto :goto_37
.end method

.method public start(Lcom/firebase/jobdispatcher/JobParameters;Lcom/firebase/jobdispatcher/IJobCallback;)V
    .registers 8

    iget-object v0, p0, Lcom/firebase/jobdispatcher/JobService;->runningJobs:Landroidx/collection/SimpleArrayMap;

    monitor-enter v0

    :try_start_3
    iget-object v1, p0, Lcom/firebase/jobdispatcher/JobService;->runningJobs:Landroidx/collection/SimpleArrayMap;

    invoke-interface {p1}, Lcom/firebase/jobdispatcher/JobParameters;->getTag()Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v1, v2}, Landroidx/collection/SimpleArrayMap;->containsKey(Ljava/lang/Object;)Z

    move-result v1

    if-eqz v1, :cond_28

    const-string p2, "FJD.JobService"

    sget-object v1, Ljava/util/Locale;->US:Ljava/util/Locale;

    const-string v2, "Job with tag = %s was already running."

    const/4 v3, 0x1

    new-array v3, v3, [Ljava/lang/Object;

    const/4 v4, 0x0

    invoke-interface {p1}, Lcom/firebase/jobdispatcher/JobParameters;->getTag()Ljava/lang/String;

    move-result-object p1

    aput-object p1, v3, v4

    invoke-static {v1, v2, v3}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;

    move-result-object p1

    invoke-static {p2, p1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I

    monitor-exit v0

    return-void

    :cond_28
    iget-object v1, p0, Lcom/firebase/jobdispatcher/JobService;->runningJobs:Landroidx/collection/SimpleArrayMap;

    invoke-interface {p1}, Lcom/firebase/jobdispatcher/JobParameters;->getTag()Ljava/lang/String;

    move-result-object v2

    new-instance v3, Lcom/firebase/jobdispatcher/JobService$JobCallback;

    const/4 v4, 0x0

    invoke-direct {v3, p1, p2, v4}, Lcom/firebase/jobdispatcher/JobService$JobCallback;-><init>(Lcom/firebase/jobdispatcher/JobParameters;Lcom/firebase/jobdispatcher/IJobCallback;Lcom/firebase/jobdispatcher/JobService$1;)V

    invoke-virtual {v1, v2, v3}, Landroidx/collection/SimpleArrayMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    sget-object p2, Lcom/firebase/jobdispatcher/JobService;->mainHandler:Landroid/os/Handler;

    new-instance v1, Lcom/firebase/jobdispatcher/JobService$2;

    invoke-direct {v1, p0, p1}, Lcom/firebase/jobdispatcher/JobService$2;-><init>(Lcom/firebase/jobdispatcher/JobService;Lcom/firebase/jobdispatcher/JobParameters;)V

    invoke-virtual {p2, v1}, Landroid/os/Handler;->post(Ljava/lang/Runnable;)Z

    monitor-exit v0

    return-void

    :catchall_43
    move-exception p1

    monitor-exit v0
    :try_end_45
    .catchall {:try_start_3 .. :try_end_45} :catchall_43

    throw p1
.end method

.method public stop(Lcom/firebase/jobdispatcher/JobParameters;Z)V
    .registers 7

    iget-object v0, p0, Lcom/firebase/jobdispatcher/JobService;->runningJobs:Landroidx/collection/SimpleArrayMap;

    monitor-enter v0

    :try_start_3
    iget-object v1, p0, Lcom/firebase/jobdispatcher/JobService;->runningJobs:Landroidx/collection/SimpleArrayMap;

    invoke-interface {p1}, Lcom/firebase/jobdispatcher/JobParameters;->getTag()Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v1, v2}, Landroidx/collection/SimpleArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v1

    check-cast v1, Lcom/firebase/jobdispatcher/JobService$JobCallback;

    if-nez v1, :cond_23

    const-string p1, "FJD.JobService"

    const/4 p2, 0x3

    invoke-static {p1, p2}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z

    move-result p1

    if-eqz p1, :cond_21

    const-string p1, "FJD.JobService"

    const-string p2, "Provided job has already been executed."

    invoke-static {p1, p2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    :cond_21
    monitor-exit v0

    return-void

    :cond_23
    sget-object v2, Lcom/firebase/jobdispatcher/JobService;->mainHandler:Landroid/os/Handler;

    new-instance v3, Lcom/firebase/jobdispatcher/JobService$3;

    invoke-direct {v3, p0, p1, p2, v1}, Lcom/firebase/jobdispatcher/JobService$3;-><init>(Lcom/firebase/jobdispatcher/JobService;Lcom/firebase/jobdispatcher/JobParameters;ZLcom/firebase/jobdispatcher/JobService$JobCallback;)V

    invoke-virtual {v2, v3}, Landroid/os/Handler;->post(Ljava/lang/Runnable;)Z

    monitor-exit v0

    return-void

    :catchall_2f
    move-exception p1

    monitor-exit v0
    :try_end_31
    .catchall {:try_start_3 .. :try_end_31} :catchall_2f

    throw p1
.end method