ConfigFetchHandler.smali
.class public Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;
.super Ljava/lang/Object;
.source "com.google.firebase:firebase-config@@19.1.0"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;
}
.end annotation
# static fields
.field static final BACKOFF_TIME_DURATIONS_IN_MINUTES:[I
.field public static final DEFAULT_MINIMUM_FETCH_INTERVAL_IN_SECONDS:J
.field static final HTTP_TOO_MANY_REQUESTS:I = 0x1ad
# instance fields
.field private final analyticsConnector:Lcom/google/firebase/analytics/connector/AnalyticsConnector;
.field private final clock:Lcom/google/android/gms/common/util/Clock;
.field private final customHttpHeaders:Ljava/util/Map;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Map<",
"Ljava/lang/String;",
"Ljava/lang/String;",
">;"
}
.end annotation
.end field
.field private final executor:Ljava/util/concurrent/Executor;
.field private final fetchedConfigsCache:Lcom/google/firebase/remoteconfig/internal/ConfigCacheClient;
.field private final firebaseInstanceId:Lcom/google/firebase/iid/FirebaseInstanceId;
.field private final frcBackendApiClient:Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;
.field private final frcMetadata:Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
.field private final randomGenerator:Ljava/util/Random;
# direct methods
.method static constructor <clinit>()V
.registers 3
.line 63
sget-object v0, Ljava/util/concurrent/TimeUnit;->HOURS:Ljava/util/concurrent/TimeUnit;
const-wide/16 v1, 0xc
invoke-virtual {v0, v1, v2}, Ljava/util/concurrent/TimeUnit;->toSeconds(J)J
move-result-wide v0
sput-wide v0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->DEFAULT_MINIMUM_FETCH_INTERVAL_IN_SECONDS:J
.line 71
const/16 v0, 0x8
new-array v0, v0, [I
fill-array-data v0, :array_14
sput-object v0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->BACKOFF_TIME_DURATIONS_IN_MINUTES:[I
return-void
:array_14
.array-data 4
0x2
0x4
0x8
0x10
0x20
0x40
0x80
0x100
.end array-data
.end method
.method public constructor <init>(Lcom/google/firebase/iid/FirebaseInstanceId;Lcom/google/firebase/analytics/connector/AnalyticsConnector;Ljava/util/concurrent/Executor;Lcom/google/android/gms/common/util/Clock;Ljava/util/Random;Lcom/google/firebase/remoteconfig/internal/ConfigCacheClient;Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;Ljava/util/Map;)V
.registers 10
.param p1, "firebaseInstanceId" # Lcom/google/firebase/iid/FirebaseInstanceId;
.param p2, "analyticsConnector" # Lcom/google/firebase/analytics/connector/AnalyticsConnector;
.param p3, "executor" # Ljava/util/concurrent/Executor;
.param p4, "clock" # Lcom/google/android/gms/common/util/Clock;
.param p5, "randomGenerator" # Ljava/util/Random;
.param p6, "fetchedConfigsCache" # Lcom/google/firebase/remoteconfig/internal/ConfigCacheClient;
.param p7, "frcBackendApiClient" # Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;
.param p8, "frcMetadata" # Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/firebase/iid/FirebaseInstanceId;",
"Lcom/google/firebase/analytics/connector/AnalyticsConnector;",
"Ljava/util/concurrent/Executor;",
"Lcom/google/android/gms/common/util/Clock;",
"Ljava/util/Random;",
"Lcom/google/firebase/remoteconfig/internal/ConfigCacheClient;",
"Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;",
"Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;",
"Ljava/util/Map<",
"Ljava/lang/String;",
"Ljava/lang/String;",
">;)V"
}
.end annotation
.line 102
.local p9, "customHttpHeaders":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 103
iput-object p1, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->firebaseInstanceId:Lcom/google/firebase/iid/FirebaseInstanceId;
.line 104
iput-object p2, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->analyticsConnector:Lcom/google/firebase/analytics/connector/AnalyticsConnector;
.line 105
iput-object p3, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->executor:Ljava/util/concurrent/Executor;
.line 106
iput-object p4, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->clock:Lcom/google/android/gms/common/util/Clock;
.line 107
iput-object p5, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->randomGenerator:Ljava/util/Random;
.line 108
iput-object p6, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->fetchedConfigsCache:Lcom/google/firebase/remoteconfig/internal/ConfigCacheClient;
.line 109
iput-object p7, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcBackendApiClient:Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;
.line 110
iput-object p8, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcMetadata:Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
.line 112
iput-object p9, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->customHttpHeaders:Ljava/util/Map;
.line 113
return-void
.end method
.method private areCachedFetchConfigsValid(JLjava/util/Date;)Z
.registers 10
.param p1, "cacheExpirationInSeconds" # J
.param p3, "newFetchTime" # Ljava/util/Date;
.line 207
iget-object v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcMetadata:Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;->getLastSuccessfulFetchTime()Ljava/util/Date;
move-result-object v0
.line 210
.local v0, "lastSuccessfulFetchTime":Ljava/util/Date;
sget-object v1, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;->LAST_FETCH_TIME_NO_FETCH_YET:Ljava/util/Date;
invoke-virtual {v0, v1}, Ljava/util/Date;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_10
.line 211
const/4 v1, 0x0
return v1
.line 214
:cond_10
new-instance v1, Ljava/util/Date;
.line 215
invoke-virtual {v0}, Ljava/util/Date;->getTime()J
move-result-wide v2
sget-object v4, Ljava/util/concurrent/TimeUnit;->SECONDS:Ljava/util/concurrent/TimeUnit;
invoke-virtual {v4, p1, p2}, Ljava/util/concurrent/TimeUnit;->toMillis(J)J
move-result-wide v4
add-long/2addr v2, v4
invoke-direct {v1, v2, v3}, Ljava/util/Date;-><init>(J)V
.line 217
.local v1, "cacheExpirationTime":Ljava/util/Date;
invoke-virtual {p3, v1}, Ljava/util/Date;->before(Ljava/util/Date;)Z
move-result v2
return v2
.end method
.method private createExceptionWithGenericMessage(Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigServerException;)Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigServerException;
.registers 7
.param p1, "httpError" # Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigServerException;
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigClientException;
}
.end annotation
.line 319
invoke-virtual {p1}, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigServerException;->getHttpStatusCode()I
move-result v0
const/16 v1, 0x191
if-eq v0, v1, :cond_2b
const/16 v1, 0x193
if-eq v0, v1, :cond_28
const/16 v1, 0x1ad
if-eq v0, v1, :cond_20
const/16 v1, 0x1f4
if-eq v0, v1, :cond_1d
packed-switch v0, :pswitch_data_4a
.line 346
const-string v0, "The server returned an unexpected error."
.local v0, "errorMessage":Ljava/lang/String;
goto :goto_2e
.line 338
.end local v0 # "errorMessage":Ljava/lang/String;
:pswitch_1a
const-string v0, "The server is unavailable. Please try again later."
.line 339
.restart local v0 # "errorMessage":Ljava/lang/String;
goto :goto_2e
.line 332
.end local v0 # "errorMessage":Ljava/lang/String;
:cond_1d
const-string v0, "There was an internal server error."
.line 333
.restart local v0 # "errorMessage":Ljava/lang/String;
goto :goto_2e
.line 343
.end local v0 # "errorMessage":Ljava/lang/String;
:cond_20
new-instance v0, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigClientException;
const-string v1, "The throttled response from the server was not handled correctly by the FRC SDK."
invoke-direct {v0, v1}, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigClientException;-><init>(Ljava/lang/String;)V
throw v0
.line 327
:cond_28
const-string v0, "The user is not authorized to access the project. Please make sure you are using the API key that corresponds to your Firebase project."
.line 330
.restart local v0 # "errorMessage":Ljava/lang/String;
goto :goto_2e
.line 322
.end local v0 # "errorMessage":Ljava/lang/String;
:cond_2b
const-string v0, "The request did not have the required credentials. Please make sure your google-services.json is valid."
.line 325
.restart local v0 # "errorMessage":Ljava/lang/String;
nop
.line 350
:goto_2e
new-instance v1, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigServerException;
.line 351
invoke-virtual {p1}, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigServerException;->getHttpStatusCode()I
move-result v2
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
const-string v4, "Fetch failed: "
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
invoke-direct {v1, v2, v3, p1}, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigServerException;-><init>(ILjava/lang/String;Ljava/lang/Throwable;)V
.line 350
return-object v1
nop
:pswitch_data_4a
.packed-switch 0x1f6
:pswitch_1a
:pswitch_1a
:pswitch_1a
.end packed-switch
.end method
.method private createThrottledMessage(J)Ljava/lang/String;
.registers 6
.param p1, "throttledDurationInMillis" # J
.line 240
const/4 v0, 0x1
new-array v0, v0, [Ljava/lang/Object;
sget-object v1, Ljava/util/concurrent/TimeUnit;->MILLISECONDS:Ljava/util/concurrent/TimeUnit;
.line 242
invoke-virtual {v1, p1, p2}, Ljava/util/concurrent/TimeUnit;->toSeconds(J)J
move-result-wide v1
invoke-static {v1, v2}, Landroid/text/format/DateUtils;->formatElapsedTime(J)Ljava/lang/String;
move-result-object v1
const/4 v2, 0x0
aput-object v1, v0, v2
.line 240
const-string v1, "Fetch is throttled. Please wait before calling fetch again: %s"
invoke-static {v1, v0}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method private fetchFromBackend(Ljava/util/Date;)Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;
.registers 11
.param p1, "currentTime" # Ljava/util/Date;
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigException;
}
.end annotation
.line 275
:try_start_0
iget-object v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcBackendApiClient:Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->createHttpURLConnection()Ljava/net/HttpURLConnection;
move-result-object v2
.line 277
.local v2, "urlConnection":Ljava/net/HttpURLConnection;
iget-object v1, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcBackendApiClient:Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;
iget-object v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->firebaseInstanceId:Lcom/google/firebase/iid/FirebaseInstanceId;
.line 280
invoke-virtual {v0}, Lcom/google/firebase/iid/FirebaseInstanceId;->getId()Ljava/lang/String;
move-result-object v3
iget-object v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->firebaseInstanceId:Lcom/google/firebase/iid/FirebaseInstanceId;
.line 281
invoke-virtual {v0}, Lcom/google/firebase/iid/FirebaseInstanceId;->getToken()Ljava/lang/String;
move-result-object v4
.line 282
invoke-direct {p0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->getUserProperties()Ljava/util/Map;
move-result-object v5
iget-object v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcMetadata:Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
.line 283
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;->getLastFetchETag()Ljava/lang/String;
move-result-object v6
iget-object v7, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->customHttpHeaders:Ljava/util/Map;
.line 278
move-object v8, p1
invoke-virtual/range {v1 .. v8}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->fetch(Ljava/net/HttpURLConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;Ljava/util/Map;Ljava/util/Date;)Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;
move-result-object v0
.line 287
.local v0, "response":Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;->getLastFetchETag()Ljava/lang/String;
move-result-object v1
if-eqz v1, :cond_34
.line 288
iget-object v1, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcMetadata:Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;->getLastFetchETag()Ljava/lang/String;
move-result-object v3
invoke-virtual {v1, v3}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;->setLastFetchETag(Ljava/lang/String;)V
.line 292
:cond_34
iget-object v1, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcMetadata:Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
invoke-virtual {v1}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;->resetBackoff()V
:try_end_39
.catch Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigServerException; {:try_start_0 .. :try_end_39} :catch_3a
.line 294
return-object v0
.line 295
.end local v0 # "response":Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;
.end local v2 # "urlConnection":Ljava/net/HttpURLConnection;
:catch_3a
move-exception v0
.line 296
.local v0, "serverHttpError":Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigServerException;
nop
.line 297
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigServerException;->getHttpStatusCode()I
move-result v1
invoke-direct {p0, v1, p1}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->updateAndReturnBackoffMetadata(ILjava/util/Date;)Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient$BackoffMetadata;
move-result-object v1
.line 299
.local v1, "backoffMetadata":Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient$BackoffMetadata;
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigServerException;->getHttpStatusCode()I
move-result v2
invoke-direct {p0, v1, v2}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->shouldThrottle(Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient$BackoffMetadata;I)Z
move-result v2
if-eqz v2, :cond_5c
.line 300
new-instance v2, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigFetchThrottledException;
.line 301
invoke-virtual {v1}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient$BackoffMetadata;->getBackoffEndTime()Ljava/util/Date;
move-result-object v3
invoke-virtual {v3}, Ljava/util/Date;->getTime()J
move-result-wide v3
invoke-direct {v2, v3, v4}, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigFetchThrottledException;-><init>(J)V
throw v2
.line 304
:cond_5c
invoke-direct {p0, v0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->createExceptionWithGenericMessage(Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigServerException;)Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigServerException;
move-result-object v2
throw v2
.end method
.method private fetchFromBackendAndCacheResponse(Ljava/util/Date;)Lcom/google/android/gms/tasks/Task;
.registers 6
.param p1, "fetchTime" # Ljava/util/Date;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/Date;",
")",
"Lcom/google/android/gms/tasks/Task<",
"Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;",
">;"
}
.end annotation
.line 251
:try_start_0
invoke-direct {p0, p1}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->fetchFromBackend(Ljava/util/Date;)Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;
move-result-object v0
.line 252
.local v0, "fetchResponse":Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;->getStatus()I
move-result v1
if-eqz v1, :cond_f
.line 253
invoke-static {v0}, Lcom/google/android/gms/tasks/Tasks;->forResult(Ljava/lang/Object;)Lcom/google/android/gms/tasks/Task;
move-result-object v1
return-object v1
.line 255
:cond_f
iget-object v1, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->fetchedConfigsCache:Lcom/google/firebase/remoteconfig/internal/ConfigCacheClient;
.line 256
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;->getFetchedConfigs()Lcom/google/firebase/remoteconfig/internal/ConfigContainer;
move-result-object v2
invoke-virtual {v1, v2}, Lcom/google/firebase/remoteconfig/internal/ConfigCacheClient;->put(Lcom/google/firebase/remoteconfig/internal/ConfigContainer;)Lcom/google/android/gms/tasks/Task;
move-result-object v1
iget-object v2, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->executor:Ljava/util/concurrent/Executor;
invoke-static {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$$Lambda$3;->lambdaFactory$(Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;)Lcom/google/android/gms/tasks/SuccessContinuation;
move-result-object v3
.line 257
invoke-virtual {v1, v2, v3}, Lcom/google/android/gms/tasks/Task;->onSuccessTask(Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/SuccessContinuation;)Lcom/google/android/gms/tasks/Task;
move-result-object v1
:try_end_23
.catch Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigException; {:try_start_0 .. :try_end_23} :catch_24
.line 255
return-object v1
.line 258
.end local v0 # "fetchResponse":Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;
:catch_24
move-exception v0
.line 259
.local v0, "frce":Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigException;
invoke-static {v0}, Lcom/google/android/gms/tasks/Tasks;->forException(Ljava/lang/Exception;)Lcom/google/android/gms/tasks/Task;
move-result-object v1
return-object v1
.end method
.method private fetchIfCacheExpiredAndNotThrottled(Lcom/google/android/gms/tasks/Task;J)Lcom/google/android/gms/tasks/Task;
.registers 11
.param p2, "minimumFetchIntervalInSeconds" # J
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/android/gms/tasks/Task<",
"Lcom/google/firebase/remoteconfig/internal/ConfigContainer;",
">;J)",
"Lcom/google/android/gms/tasks/Task<",
"Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;",
">;"
}
.end annotation
.line 172
.local p1, "cachedFetchConfigsTask":Lcom/google/android/gms/tasks/Task;, "Lcom/google/android/gms/tasks/Task<Lcom/google/firebase/remoteconfig/internal/ConfigContainer;>;"
new-instance v0, Ljava/util/Date;
iget-object v1, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->clock:Lcom/google/android/gms/common/util/Clock;
invoke-interface {v1}, Lcom/google/android/gms/common/util/Clock;->currentTimeMillis()J
move-result-wide v1
invoke-direct {v0, v1, v2}, Ljava/util/Date;-><init>(J)V
.line 173
.local v0, "currentTime":Ljava/util/Date;
invoke-virtual {p1}, Lcom/google/android/gms/tasks/Task;->isSuccessful()Z
move-result v1
if-eqz v1, :cond_20
.line 174
invoke-direct {p0, p2, p3, v0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->areCachedFetchConfigsValid(JLjava/util/Date;)Z
move-result v1
if-eqz v1, :cond_20
.line 176
invoke-static {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;->forLocalStorageUsed(Ljava/util/Date;)Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;
move-result-object v1
invoke-static {v1}, Lcom/google/android/gms/tasks/Tasks;->forResult(Ljava/lang/Object;)Lcom/google/android/gms/tasks/Task;
move-result-object v1
return-object v1
.line 181
:cond_20
invoke-direct {p0, v0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->getBackoffEndTimeInMillis(Ljava/util/Date;)Ljava/util/Date;
move-result-object v1
.line 182
.local v1, "backoffEndTime":Ljava/util/Date;
if-eqz v1, :cond_41
.line 185
new-instance v2, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigFetchThrottledException;
.line 188
invoke-virtual {v1}, Ljava/util/Date;->getTime()J
move-result-wide v3
invoke-virtual {v0}, Ljava/util/Date;->getTime()J
move-result-wide v5
sub-long/2addr v3, v5
invoke-direct {p0, v3, v4}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->createThrottledMessage(J)Ljava/lang/String;
move-result-object v3
.line 189
invoke-virtual {v1}, Ljava/util/Date;->getTime()J
move-result-wide v4
invoke-direct {v2, v3, v4, v5}, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigFetchThrottledException;-><init>(Ljava/lang/String;J)V
.line 186
invoke-static {v2}, Lcom/google/android/gms/tasks/Tasks;->forException(Ljava/lang/Exception;)Lcom/google/android/gms/tasks/Task;
move-result-object v2
.local v2, "fetchResponseTask":Lcom/google/android/gms/tasks/Task;, "Lcom/google/android/gms/tasks/Task<Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;>;"
goto :goto_45
.line 191
.end local v2 # "fetchResponseTask":Lcom/google/android/gms/tasks/Task;, "Lcom/google/android/gms/tasks/Task<Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;>;"
:cond_41
invoke-direct {p0, v0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->fetchFromBackendAndCacheResponse(Ljava/util/Date;)Lcom/google/android/gms/tasks/Task;
move-result-object v2
.line 194
.restart local v2 # "fetchResponseTask":Lcom/google/android/gms/tasks/Task;, "Lcom/google/android/gms/tasks/Task<Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;>;"
:goto_45
iget-object v3, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->executor:Ljava/util/concurrent/Executor;
invoke-static {p0, v0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$$Lambda$2;->lambdaFactory$(Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;Ljava/util/Date;)Lcom/google/android/gms/tasks/Continuation;
move-result-object v4
invoke-virtual {v2, v3, v4}, Lcom/google/android/gms/tasks/Task;->continueWithTask(Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/Continuation;)Lcom/google/android/gms/tasks/Task;
move-result-object v3
return-object v3
.end method
.method private getBackoffEndTimeInMillis(Ljava/util/Date;)Ljava/util/Date;
.registers 4
.param p1, "currentTime" # Ljava/util/Date;
.line 227
iget-object v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcMetadata:Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;->getBackoffMetadata()Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient$BackoffMetadata;
move-result-object v0
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient$BackoffMetadata;->getBackoffEndTime()Ljava/util/Date;
move-result-object v0
.line 228
.local v0, "backoffEndTime":Ljava/util/Date;
invoke-virtual {p1, v0}, Ljava/util/Date;->before(Ljava/util/Date;)Z
move-result v1
if-eqz v1, :cond_11
.line 229
return-object v0
.line 232
:cond_11
const/4 v1, 0x0
return-object v1
.end method
.method private getRandomizedBackoffDurationInMillis(I)J
.registers 8
.param p1, "numFailedFetches" # I
.line 411
sget-object v0, Ljava/util/concurrent/TimeUnit;->MINUTES:Ljava/util/concurrent/TimeUnit;
sget-object v1, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->BACKOFF_TIME_DURATIONS_IN_MINUTES:[I
array-length v2, v1
.line 414
invoke-static {p1, v2}, Ljava/lang/Math;->min(II)I
move-result v2
add-int/lit8 v2, v2, -0x1
aget v1, v1, v2
int-to-long v1, v1
.line 412
invoke-virtual {v0, v1, v2}, Ljava/util/concurrent/TimeUnit;->toMillis(J)J
move-result-wide v0
.line 417
.local v0, "timeOutDurationInMillis":J
const-wide/16 v2, 0x2
div-long v2, v0, v2
iget-object v4, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->randomGenerator:Ljava/util/Random;
long-to-int v5, v0
invoke-virtual {v4, v5}, Ljava/util/Random;->nextInt(I)I
move-result v4
int-to-long v4, v4
add-long/2addr v2, v4
return-wide v2
.end method
.method private getUserProperties()Ljava/util/Map;
.registers 6
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/Map<",
"Ljava/lang/String;",
"Ljava/lang/String;",
">;"
}
.end annotation
.line 471
new-instance v0, Ljava/util/HashMap;
invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
.line 472
.local v0, "userPropertiesMap":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
iget-object v1, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->analyticsConnector:Lcom/google/firebase/analytics/connector/AnalyticsConnector;
if-nez v1, :cond_a
.line 473
return-object v0
.line 477
:cond_a
const/4 v2, 0x0
invoke-interface {v1, v2}, Lcom/google/firebase/analytics/connector/AnalyticsConnector;->getUserProperties(Z)Ljava/util/Map;
move-result-object v1
invoke-interface {v1}, Ljava/util/Map;->entrySet()Ljava/util/Set;
move-result-object v1
invoke-interface {v1}, Ljava/util/Set;->iterator()Ljava/util/Iterator;
move-result-object v1
:goto_17
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v2
if-eqz v2, :cond_35
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v2
check-cast v2, Ljava/util/Map$Entry;
.line 478
.local v2, "userPropertyEntry":Ljava/util/Map$Entry;, "Ljava/util/Map$Entry<Ljava/lang/String;Ljava/lang/Object;>;"
invoke-interface {v2}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;
move-result-object v3
check-cast v3, Ljava/lang/String;
invoke-interface {v2}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object;
move-result-object v4
invoke-virtual {v4}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v4
invoke-interface {v0, v3, v4}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 479
.end local v2 # "userPropertyEntry":Ljava/util/Map$Entry;, "Ljava/util/Map$Entry<Ljava/lang/String;Ljava/lang/Object;>;"
goto :goto_17
.line 480
:cond_35
return-object v0
.end method
.method private isThrottleableServerError(I)Z
.registers 3
.param p1, "httpStatusCode" # I
.line 380
const/16 v0, 0x1ad
if-eq p1, v0, :cond_13
const/16 v0, 0x1f6
if-eq p1, v0, :cond_13
const/16 v0, 0x1f7
if-eq p1, v0, :cond_13
const/16 v0, 0x1f8
if-ne p1, v0, :cond_11
goto :goto_13
:cond_11
const/4 v0, 0x0
goto :goto_14
:cond_13
:goto_13
const/4 v0, 0x1
:goto_14
return v0
.end method
.method static synthetic lambda$fetch$0(Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;JLcom/google/android/gms/tasks/Task;)Lcom/google/android/gms/tasks/Task;
.registers 5
.param p0, "this" # Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;
.param p1, "fetchIntervalInSeconds" # J
.param p3, "cachedFetchConfigsTask" # Lcom/google/android/gms/tasks/Task;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
.line 160
invoke-direct {p0, p3, p1, p2}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->fetchIfCacheExpiredAndNotThrottled(Lcom/google/android/gms/tasks/Task;J)Lcom/google/android/gms/tasks/Task;
move-result-object v0
return-object v0
.end method
.method static synthetic lambda$fetchFromBackendAndCacheResponse$2(Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;Lcom/google/firebase/remoteconfig/internal/ConfigContainer;)Lcom/google/android/gms/tasks/Task;
.registers 3
.param p0, "fetchResponse" # Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;
.param p1, "putContainer" # Lcom/google/firebase/remoteconfig/internal/ConfigContainer;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
.line 257
invoke-static {p0}, Lcom/google/android/gms/tasks/Tasks;->forResult(Ljava/lang/Object;)Lcom/google/android/gms/tasks/Task;
move-result-object v0
return-object v0
.end method
.method static synthetic lambda$fetchIfCacheExpiredAndNotThrottled$1(Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;Ljava/util/Date;Lcom/google/android/gms/tasks/Task;)Lcom/google/android/gms/tasks/Task;
.registers 3
.param p0, "this" # Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;
.param p1, "currentTime" # Ljava/util/Date;
.param p2, "completedFetchTask" # Lcom/google/android/gms/tasks/Task;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
.line 197
invoke-direct {p0, p2, p1}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->updateLastFetchStatusAndTime(Lcom/google/android/gms/tasks/Task;Ljava/util/Date;)V
.line 198
return-object p2
.end method
.method private shouldThrottle(Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient$BackoffMetadata;I)Z
.registers 5
.param p1, "backoffMetadata" # Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient$BackoffMetadata;
.param p2, "httpStatusCode" # I
.line 438
invoke-virtual {p1}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient$BackoffMetadata;->getNumFailedFetches()I
move-result v0
const/4 v1, 0x1
if-gt v0, v1, :cond_d
const/16 v0, 0x1ad
if-ne p2, v0, :cond_c
goto :goto_d
:cond_c
const/4 v1, 0x0
:cond_d
:goto_d
return v1
.end method
.method private updateAndReturnBackoffMetadata(ILjava/util/Date;)Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient$BackoffMetadata;
.registers 4
.param p1, "statusCode" # I
.param p2, "currentTime" # Ljava/util/Date;
.line 367
invoke-direct {p0, p1}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->isThrottleableServerError(I)Z
move-result v0
if-eqz v0, :cond_9
.line 368
invoke-direct {p0, p2}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->updateBackoffMetadataWithLastFailedFetchTime(Ljava/util/Date;)V
.line 370
:cond_9
iget-object v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcMetadata:Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;->getBackoffMetadata()Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient$BackoffMetadata;
move-result-object v0
return-object v0
.end method
.method private updateBackoffMetadataWithLastFailedFetchTime(Ljava/util/Date;)V
.registers 8
.param p1, "lastFailedFetchTime" # Ljava/util/Date;
.line 394
iget-object v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcMetadata:Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;->getBackoffMetadata()Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient$BackoffMetadata;
move-result-object v0
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient$BackoffMetadata;->getNumFailedFetches()I
move-result v0
.line 396
.local v0, "numFailedFetches":I
add-int/lit8 v0, v0, 0x1
.line 398
invoke-direct {p0, v0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->getRandomizedBackoffDurationInMillis(I)J
move-result-wide v1
.line 399
.local v1, "backoffDurationInMillis":J
new-instance v3, Ljava/util/Date;
invoke-virtual {p1}, Ljava/util/Date;->getTime()J
move-result-wide v4
add-long/2addr v4, v1
invoke-direct {v3, v4, v5}, Ljava/util/Date;-><init>(J)V
.line 401
.local v3, "backoffEndTime":Ljava/util/Date;
iget-object v4, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcMetadata:Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
invoke-virtual {v4, v0, v3}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;->setBackoffMetadata(ILjava/util/Date;)V
.line 402
return-void
.end method
.method private updateLastFetchStatusAndTime(Lcom/google/android/gms/tasks/Task;Ljava/util/Date;)V
.registers 5
.param p2, "fetchTime" # Ljava/util/Date;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/android/gms/tasks/Task<",
"Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;",
">;",
"Ljava/util/Date;",
")V"
}
.end annotation
.line 447
.local p1, "completedFetchTask":Lcom/google/android/gms/tasks/Task;, "Lcom/google/android/gms/tasks/Task<Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;>;"
invoke-virtual {p1}, Lcom/google/android/gms/tasks/Task;->isSuccessful()Z
move-result v0
if-eqz v0, :cond_c
.line 448
iget-object v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcMetadata:Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
invoke-virtual {v0, p2}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;->updateLastFetchAsSuccessfulAt(Ljava/util/Date;)V
.line 449
return-void
.line 452
:cond_c
invoke-virtual {p1}, Lcom/google/android/gms/tasks/Task;->getException()Ljava/lang/Exception;
move-result-object v0
.line 453
.local v0, "fetchException":Ljava/lang/Exception;
if-nez v0, :cond_13
.line 455
return-void
.line 458
:cond_13
instance-of v1, v0, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigFetchThrottledException;
if-eqz v1, :cond_1d
.line 459
iget-object v1, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcMetadata:Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
invoke-virtual {v1}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;->updateLastFetchAsThrottled()V
goto :goto_22
.line 461
:cond_1d
iget-object v1, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcMetadata:Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
invoke-virtual {v1}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;->updateLastFetchAsFailed()V
.line 463
:goto_22
return-void
.end method
# virtual methods
.method public fetch()Lcom/google/android/gms/tasks/Task;
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Lcom/google/android/gms/tasks/Task<",
"Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;",
">;"
}
.end annotation
.line 120
iget-object v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcMetadata:Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;->getMinimumFetchIntervalInSeconds()J
move-result-wide v0
invoke-virtual {p0, v0, v1}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->fetch(J)Lcom/google/android/gms/tasks/Task;
move-result-object v0
return-object v0
.end method
.method public fetch(J)Lcom/google/android/gms/tasks/Task;
.registers 8
.param p1, "minimumFetchIntervalInSeconds" # J
.annotation system Ldalvik/annotation/Signature;
value = {
"(J)",
"Lcom/google/android/gms/tasks/Task<",
"Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;",
">;"
}
.end annotation
.line 153
iget-object v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->frcMetadata:Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigMetadataClient;->isDeveloperModeEnabled()Z
move-result v0
if-eqz v0, :cond_b
const-wide/16 v0, 0x0
goto :goto_c
:cond_b
move-wide v0, p1
.line 155
.local v0, "fetchIntervalInSeconds":J
:goto_c
iget-object v2, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->fetchedConfigsCache:Lcom/google/firebase/remoteconfig/internal/ConfigCacheClient;
.line 156
invoke-virtual {v2}, Lcom/google/firebase/remoteconfig/internal/ConfigCacheClient;->get()Lcom/google/android/gms/tasks/Task;
move-result-object v2
iget-object v3, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->executor:Ljava/util/concurrent/Executor;
invoke-static {p0, v0, v1}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$$Lambda$1;->lambdaFactory$(Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;J)Lcom/google/android/gms/tasks/Continuation;
move-result-object v4
.line 157
invoke-virtual {v2, v3, v4}, Lcom/google/android/gms/tasks/Task;->continueWithTask(Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/Continuation;)Lcom/google/android/gms/tasks/Task;
move-result-object v2
.line 155
return-object v2
.end method
.method public getAnalyticsConnector()Lcom/google/firebase/analytics/connector/AnalyticsConnector;
.registers 2
.line 487
iget-object v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler;->analyticsConnector:Lcom/google/firebase/analytics/connector/AnalyticsConnector;
return-object v0
.end method