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