JobServiceConnection.smali

.class public Lcom/firebase/jobdispatcher/JobServiceConnection;
.super Ljava/lang/Object;
.source "JobServiceConnection.java"

# interfaces
.implements Landroid/content/ServiceConnection;


# annotations
.annotation build Landroidx/annotation/VisibleForTesting;
.end annotation


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

.field public final callback:Lcom/firebase/jobdispatcher/IJobCallback;

.field public final context:Landroid/content/Context;

.field public final jobStatuses:Ljava/util/Map;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/util/Map<",
            "Lcom/firebase/jobdispatcher/JobInvocation;",
            "Ljava/lang/Boolean;",
            ">;"
        }
    .end annotation
.end field

.field public wasUnbound:Z


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

    return-void
.end method

.method public constructor <init>(Lcom/firebase/jobdispatcher/IJobCallback;Landroid/content/Context;)V
    .registers 4

    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    new-instance v0, Ljava/util/HashMap;

    invoke-direct {v0}, Ljava/util/HashMap;-><init>()V

    iput-object v0, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->jobStatuses:Ljava/util/Map;

    const/4 v0, 0x0

    iput-boolean v0, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->wasUnbound:Z

    iput-object p1, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->callback:Lcom/firebase/jobdispatcher/IJobCallback;

    iput-object p2, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->context:Landroid/content/Context;

    return-void
.end method

.method public static encodeJob(Lcom/firebase/jobdispatcher/JobParameters;)Landroid/os/Bundle;
    .registers 3

    invoke-static {}, Lcom/firebase/jobdispatcher/GooglePlayReceiver;->getJobCoder()Lcom/firebase/jobdispatcher/JobCoder;

    move-result-object v0

    new-instance v1, Landroid/os/Bundle;

    invoke-direct {v1}, Landroid/os/Bundle;-><init>()V

    invoke-virtual {v0, p0, v1}, Lcom/firebase/jobdispatcher/JobCoder;->encode(Lcom/firebase/jobdispatcher/JobParameters;Landroid/os/Bundle;)Landroid/os/Bundle;

    move-result-object p0

    return-object p0
.end method

.method private declared-synchronized stopJob(ZLcom/firebase/jobdispatcher/JobInvocation;)V
    .registers 4

    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->binder:Lcom/firebase/jobdispatcher/IRemoteJobService;

    invoke-static {p2}, Lcom/firebase/jobdispatcher/JobServiceConnection;->encodeJob(Lcom/firebase/jobdispatcher/JobParameters;)Landroid/os/Bundle;

    move-result-object p2

    invoke-interface {v0, p2, p1}, Lcom/firebase/jobdispatcher/IRemoteJobService;->stop(Landroid/os/Bundle;Z)V
    :try_end_a
    .catch Landroid/os/RemoteException; {:try_start_1 .. :try_end_a} :catch_d
    .catchall {:try_start_1 .. :try_end_a} :catchall_b

    goto :goto_18

    :catchall_b
    move-exception p1

    goto :goto_1a

    :catch_d
    move-exception p1

    :try_start_e
    const-string p2, "FJD.ExternalReceiver"

    const-string v0, "Failed to stop a job"

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

    invoke-virtual {p0}, Lcom/firebase/jobdispatcher/JobServiceConnection;->unbind()V
    :try_end_18
    .catchall {:try_start_e .. :try_end_18} :catchall_b

    :goto_18
    monitor-exit p0

    return-void

    :goto_1a
    monitor-exit p0

    throw p1
.end method


# virtual methods
.method public declared-synchronized hasJobInvocation(Lcom/firebase/jobdispatcher/JobInvocation;)Z
    .registers 3
    .annotation build Landroidx/annotation/VisibleForTesting;
    .end annotation

    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->jobStatuses:Ljava/util/Map;

    invoke-interface {v0, p1}, Ljava/util/Map;->containsKey(Ljava/lang/Object;)Z

    move-result p1
    :try_end_7
    .catchall {:try_start_1 .. :try_end_7} :catchall_9

    monitor-exit p0

    return p1

    :catchall_9
    move-exception p1

    monitor-exit p0

    throw p1
.end method

.method public declared-synchronized isConnected()Z
    .registers 2

    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->binder:Lcom/firebase/jobdispatcher/IRemoteJobService;
    :try_end_3
    .catchall {:try_start_1 .. :try_end_3} :catchall_a

    if-eqz v0, :cond_7

    const/4 v0, 0x1

    goto :goto_8

    :cond_7
    const/4 v0, 0x0

    :goto_8
    monitor-exit p0

    return v0

    :catchall_a
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized onJobFinished(Lcom/firebase/jobdispatcher/JobInvocation;)V
    .registers 3

    monitor-enter p0

    :try_start_1
    iget-object v0, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->jobStatuses:Ljava/util/Map;

    invoke-interface {v0, p1}, Ljava/util/Map;->remove(Ljava/lang/Object;)Ljava/lang/Object;

    iget-object p1, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->jobStatuses:Ljava/util/Map;

    invoke-interface {p1}, Ljava/util/Map;->isEmpty()Z

    move-result p1

    if-eqz p1, :cond_11

    invoke-virtual {p0}, Lcom/firebase/jobdispatcher/JobServiceConnection;->unbind()V
    :try_end_11
    .catchall {:try_start_1 .. :try_end_11} :catchall_13

    :cond_11
    monitor-exit p0

    return-void

    :catchall_13
    move-exception p1

    monitor-exit p0

    throw p1
.end method

.method public declared-synchronized onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
    .registers 7

    monitor-enter p0

    :try_start_1
    invoke-virtual {p0}, Lcom/firebase/jobdispatcher/JobServiceConnection;->wasUnbound()Z

    move-result p1

    if-eqz p1, :cond_10

    const-string p1, "FJD.ExternalReceiver"

    const-string p2, "Connection have been used already."

    invoke-static {p1, p2}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
    :try_end_e
    .catchall {:try_start_1 .. :try_end_e} :catchall_93

    monitor-exit p0

    return-void

    :cond_10
    :try_start_10
    invoke-static {p2}, Lcom/firebase/jobdispatcher/IRemoteJobService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/firebase/jobdispatcher/IRemoteJobService;

    move-result-object p1

    iput-object p1, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->binder:Lcom/firebase/jobdispatcher/IRemoteJobService;

    new-instance p1, Ljava/util/HashSet;

    invoke-direct {p1}, Ljava/util/HashSet;-><init>()V

    iget-object p2, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->jobStatuses:Ljava/util/Map;

    invoke-interface {p2}, Ljava/util/Map;->entrySet()Ljava/util/Set;

    move-result-object p2

    invoke-interface {p2}, Ljava/util/Set;->iterator()Ljava/util/Iterator;

    move-result-object p2

    :cond_25
    :goto_25
    invoke-interface {p2}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_76

    invoke-interface {p2}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Ljava/util/Map$Entry;

    sget-object v1, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean;

    invoke-interface {v0}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object;

    move-result-object v2

    invoke-virtual {v1, v2}, Ljava/lang/Boolean;->equals(Ljava/lang/Object;)Z

    move-result v1
    :try_end_3b
    .catchall {:try_start_10 .. :try_end_3b} :catchall_93

    if-eqz v1, :cond_25

    :try_start_3d
    iget-object v1, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->binder:Lcom/firebase/jobdispatcher/IRemoteJobService;

    invoke-interface {v0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Lcom/firebase/jobdispatcher/JobParameters;

    invoke-static {v2}, Lcom/firebase/jobdispatcher/JobServiceConnection;->encodeJob(Lcom/firebase/jobdispatcher/JobParameters;)Landroid/os/Bundle;

    move-result-object v2

    iget-object v3, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->callback:Lcom/firebase/jobdispatcher/IJobCallback;

    invoke-interface {v1, v2, v3}, Lcom/firebase/jobdispatcher/IRemoteJobService;->start(Landroid/os/Bundle;Lcom/firebase/jobdispatcher/IJobCallback;)V

    invoke-interface {v0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;

    move-result-object v1

    invoke-interface {p1, v1}, Ljava/util/Set;->add(Ljava/lang/Object;)Z
    :try_end_55
    .catch Landroid/os/RemoteException; {:try_start_3d .. :try_end_55} :catch_56
    .catchall {:try_start_3d .. :try_end_55} :catchall_93

    goto :goto_25

    :catch_56
    move-exception p1

    :try_start_57
    const-string p2, "FJD.ExternalReceiver"

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    const-string v2, "Failed to start job "

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-interface {v0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;

    move-result-object v0

    invoke-virtual {v1, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

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

    invoke-virtual {p0}, Lcom/firebase/jobdispatcher/JobServiceConnection;->unbind()V
    :try_end_74
    .catchall {:try_start_57 .. :try_end_74} :catchall_93

    monitor-exit p0

    return-void

    :cond_76
    :try_start_76
    invoke-interface {p1}, Ljava/util/Set;->iterator()Ljava/util/Iterator;

    move-result-object p1

    :goto_7a
    invoke-interface {p1}, Ljava/util/Iterator;->hasNext()Z

    move-result p2

    if-eqz p2, :cond_91

    invoke-interface {p1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object p2

    check-cast p2, Lcom/firebase/jobdispatcher/JobInvocation;

    iget-object v0, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->jobStatuses:Ljava/util/Map;

    const/4 v1, 0x1

    invoke-static {v1}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;

    move-result-object v1

    invoke-interface {v0, p2, v1}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    :try_end_90
    .catchall {:try_start_76 .. :try_end_90} :catchall_93

    goto :goto_7a

    :cond_91
    monitor-exit p0

    return-void

    :catchall_93
    move-exception p1

    monitor-exit p0

    goto :goto_97

    :goto_96
    throw p1

    :goto_97
    goto :goto_96
.end method

.method public declared-synchronized onServiceDisconnected(Landroid/content/ComponentName;)V
    .registers 2

    monitor-enter p0

    :try_start_1
    invoke-virtual {p0}, Lcom/firebase/jobdispatcher/JobServiceConnection;->unbind()V
    :try_end_4
    .catchall {:try_start_1 .. :try_end_4} :catchall_6

    monitor-exit p0

    return-void

    :catchall_6
    move-exception p1

    monitor-exit p0

    throw p1
.end method

.method public declared-synchronized onStop(Lcom/firebase/jobdispatcher/JobInvocation;Z)V
    .registers 5

    monitor-enter p0

    :try_start_1
    invoke-virtual {p0}, Lcom/firebase/jobdispatcher/JobServiceConnection;->wasUnbound()Z

    move-result v0

    if-nez v0, :cond_2c

    sget-object v0, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean;

    iget-object v1, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->jobStatuses:Ljava/util/Map;

    invoke-interface {v1, p1}, Ljava/util/Map;->remove(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/lang/Boolean;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_1e

    invoke-virtual {p0}, Lcom/firebase/jobdispatcher/JobServiceConnection;->isConnected()Z

    move-result v0

    if-eqz v0, :cond_1e

    invoke-direct {p0, p2, p1}, Lcom/firebase/jobdispatcher/JobServiceConnection;->stopJob(ZLcom/firebase/jobdispatcher/JobInvocation;)V

    :cond_1e
    if-nez p2, :cond_33

    iget-object p1, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->jobStatuses:Ljava/util/Map;

    invoke-interface {p1}, Ljava/util/Map;->isEmpty()Z

    move-result p1

    if-eqz p1, :cond_33

    invoke-virtual {p0}, Lcom/firebase/jobdispatcher/JobServiceConnection;->unbind()V

    goto :goto_33

    :cond_2c
    const-string p1, "FJD.ExternalReceiver"

    const-string p2, "Can\'t send stop request because service was unbound."

    invoke-static {p1, p2}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
    :try_end_33
    .catchall {:try_start_1 .. :try_end_33} :catchall_35

    :cond_33
    :goto_33
    monitor-exit p0

    return-void

    :catchall_35
    move-exception p1

    monitor-exit p0

    throw p1
.end method

.method public declared-synchronized startJob(Lcom/firebase/jobdispatcher/JobInvocation;)Z
    .registers 7

    monitor-enter p0

    :try_start_1
    invoke-virtual {p0}, Lcom/firebase/jobdispatcher/JobServiceConnection;->isConnected()Z

    move-result v0

    if-eqz v0, :cond_59

    iget-object v1, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->jobStatuses:Ljava/util/Map;

    invoke-interface {v1, p1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v1

    check-cast v1, Ljava/lang/Boolean;

    sget-object v2, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean;

    invoke-virtual {v2, v1}, Ljava/lang/Boolean;->equals(Ljava/lang/Object;)Z

    move-result v1

    const/4 v2, 0x0

    if-eqz v1, :cond_31

    const-string v1, "FJD.ExternalReceiver"

    new-instance v3, Ljava/lang/StringBuilder;

    invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V

    const-string v4, "Received an execution request for already running job "

    invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v3, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v3

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

    invoke-direct {p0, v2, p1}, Lcom/firebase/jobdispatcher/JobServiceConnection;->stopJob(ZLcom/firebase/jobdispatcher/JobInvocation;)V
    :try_end_31
    .catchall {:try_start_1 .. :try_end_31} :catchall_64

    :cond_31
    :try_start_31
    iget-object v1, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->binder:Lcom/firebase/jobdispatcher/IRemoteJobService;

    invoke-static {p1}, Lcom/firebase/jobdispatcher/JobServiceConnection;->encodeJob(Lcom/firebase/jobdispatcher/JobParameters;)Landroid/os/Bundle;

    move-result-object v3

    iget-object v4, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->callback:Lcom/firebase/jobdispatcher/IJobCallback;

    invoke-interface {v1, v3, v4}, Lcom/firebase/jobdispatcher/IRemoteJobService;->start(Landroid/os/Bundle;Lcom/firebase/jobdispatcher/IJobCallback;)V
    :try_end_3c
    .catch Landroid/os/RemoteException; {:try_start_31 .. :try_end_3c} :catch_3d
    .catchall {:try_start_31 .. :try_end_3c} :catchall_64

    goto :goto_59

    :catch_3d
    move-exception v0

    :try_start_3e
    const-string v1, "FJD.ExternalReceiver"

    new-instance v3, Ljava/lang/StringBuilder;

    invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V

    const-string v4, "Failed to start the job "

    invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v3, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object p1

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

    invoke-virtual {p0}, Lcom/firebase/jobdispatcher/JobServiceConnection;->unbind()V
    :try_end_57
    .catchall {:try_start_3e .. :try_end_57} :catchall_64

    monitor-exit p0

    return v2

    :cond_59
    :goto_59
    :try_start_59
    iget-object v1, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->jobStatuses:Ljava/util/Map;

    invoke-static {v0}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;

    move-result-object v2

    invoke-interface {v1, p1, v2}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    :try_end_62
    .catchall {:try_start_59 .. :try_end_62} :catchall_64

    monitor-exit p0

    return v0

    :catchall_64
    move-exception p1

    monitor-exit p0

    throw p1
.end method

.method public declared-synchronized unbind()V
    .registers 5

    monitor-enter p0

    :try_start_1
    invoke-virtual {p0}, Lcom/firebase/jobdispatcher/JobServiceConnection;->wasUnbound()Z

    move-result v0

    if-nez v0, :cond_2e

    const/4 v0, 0x0

    iput-object v0, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->binder:Lcom/firebase/jobdispatcher/IRemoteJobService;

    const/4 v0, 0x1

    iput-boolean v0, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->wasUnbound:Z
    :try_end_d
    .catchall {:try_start_1 .. :try_end_d} :catchall_30

    :try_start_d
    iget-object v0, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->context:Landroid/content/Context;

    invoke-virtual {v0, p0}, Landroid/content/Context;->unbindService(Landroid/content/ServiceConnection;)V
    :try_end_12
    .catch Ljava/lang/IllegalArgumentException; {:try_start_d .. :try_end_12} :catch_13
    .catchall {:try_start_d .. :try_end_12} :catchall_30

    goto :goto_2e

    :catch_13
    move-exception v0

    :try_start_14
    const-string v1, "FJD.ExternalReceiver"

    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "Error unbinding service: "

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v0}, Ljava/lang/IllegalArgumentException;->getMessage()Ljava/lang/String;

    move-result-object v0

    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static {v1, v0}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
    :try_end_2e
    .catchall {:try_start_14 .. :try_end_2e} :catchall_30

    :cond_2e
    :goto_2e
    monitor-exit p0

    return-void

    :catchall_30
    move-exception v0

    monitor-exit p0

    throw v0
.end method

.method public declared-synchronized wasUnbound()Z
    .registers 2

    monitor-enter p0

    :try_start_1
    iget-boolean v0, p0, Lcom/firebase/jobdispatcher/JobServiceConnection;->wasUnbound:Z
    :try_end_3
    .catchall {:try_start_1 .. :try_end_3} :catchall_5

    monitor-exit p0

    return v0

    :catchall_5
    move-exception v0

    monitor-exit p0

    throw v0
.end method