- Added realracing3-community.apk (71.57 MB) - Removed 32-bit support (armeabi-v7a) - Only includes arm64-v8a libraries - Decompiled source code included - Added README-community.md with analysis
153 lines
8.6 KiB
Java
153 lines
8.6 KiB
Java
package com.google.firebase.crashlytics.internal.settings;
|
|
|
|
import android.content.Context;
|
|
import android.content.SharedPreferences;
|
|
import com.google.android.gms.tasks.SuccessContinuation;
|
|
import com.google.android.gms.tasks.Task;
|
|
import com.google.android.gms.tasks.TaskCompletionSource;
|
|
import com.google.android.gms.tasks.Tasks;
|
|
import com.google.firebase.crashlytics.internal.Logger;
|
|
import com.google.firebase.crashlytics.internal.common.CommonUtils;
|
|
import com.google.firebase.crashlytics.internal.common.CurrentTimeProvider;
|
|
import com.google.firebase.crashlytics.internal.common.DataCollectionArbiter;
|
|
import com.google.firebase.crashlytics.internal.common.DeliveryMechanism;
|
|
import com.google.firebase.crashlytics.internal.common.IdManager;
|
|
import com.google.firebase.crashlytics.internal.common.SystemCurrentTimeProvider;
|
|
import com.google.firebase.crashlytics.internal.network.HttpRequestFactory;
|
|
import com.google.firebase.crashlytics.internal.persistence.FileStore;
|
|
import java.util.Locale;
|
|
import java.util.concurrent.Executor;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
import org.json.JSONObject;
|
|
|
|
/* loaded from: classes3.dex */
|
|
public class SettingsController implements SettingsProvider {
|
|
public final CachedSettingsIo cachedSettingsIo;
|
|
public final Context context;
|
|
public final CurrentTimeProvider currentTimeProvider;
|
|
public final DataCollectionArbiter dataCollectionArbiter;
|
|
public final AtomicReference settings;
|
|
public final SettingsJsonParser settingsJsonParser;
|
|
public final SettingsRequest settingsRequest;
|
|
public final SettingsSpiCall settingsSpiCall;
|
|
public final AtomicReference settingsTask;
|
|
|
|
public SettingsController(Context context, SettingsRequest settingsRequest, CurrentTimeProvider currentTimeProvider, SettingsJsonParser settingsJsonParser, CachedSettingsIo cachedSettingsIo, SettingsSpiCall settingsSpiCall, DataCollectionArbiter dataCollectionArbiter) {
|
|
AtomicReference atomicReference = new AtomicReference();
|
|
this.settings = atomicReference;
|
|
this.settingsTask = new AtomicReference(new TaskCompletionSource());
|
|
this.context = context;
|
|
this.settingsRequest = settingsRequest;
|
|
this.currentTimeProvider = currentTimeProvider;
|
|
this.settingsJsonParser = settingsJsonParser;
|
|
this.cachedSettingsIo = cachedSettingsIo;
|
|
this.settingsSpiCall = settingsSpiCall;
|
|
this.dataCollectionArbiter = dataCollectionArbiter;
|
|
atomicReference.set(DefaultSettingsJsonTransform.defaultSettings(currentTimeProvider));
|
|
}
|
|
|
|
public static SettingsController create(Context context, String str, IdManager idManager, HttpRequestFactory httpRequestFactory, String str2, String str3, FileStore fileStore, DataCollectionArbiter dataCollectionArbiter) {
|
|
String installerPackageName = idManager.getInstallerPackageName();
|
|
SystemCurrentTimeProvider systemCurrentTimeProvider = new SystemCurrentTimeProvider();
|
|
return new SettingsController(context, new SettingsRequest(str, idManager.getModelName(), idManager.getOsBuildVersionString(), idManager.getOsDisplayVersionString(), idManager, CommonUtils.createInstanceIdFrom(CommonUtils.getMappingFileId(context), str, str3, str2), str3, str2, DeliveryMechanism.determineFrom(installerPackageName).getId()), systemCurrentTimeProvider, new SettingsJsonParser(systemCurrentTimeProvider), new CachedSettingsIo(fileStore), new DefaultSettingsSpiCall(String.format(Locale.US, "https://firebase-settings.crashlytics.com/spi/v2/platforms/android/gmp/%s/settings", str), httpRequestFactory), dataCollectionArbiter);
|
|
}
|
|
|
|
@Override // com.google.firebase.crashlytics.internal.settings.SettingsProvider
|
|
public Task getSettingsAsync() {
|
|
return ((TaskCompletionSource) this.settingsTask.get()).getTask();
|
|
}
|
|
|
|
@Override // com.google.firebase.crashlytics.internal.settings.SettingsProvider
|
|
public Settings getSettingsSync() {
|
|
return (Settings) this.settings.get();
|
|
}
|
|
|
|
public Task loadSettingsData(Executor executor) {
|
|
return loadSettingsData(SettingsCacheBehavior.USE_CACHE, executor);
|
|
}
|
|
|
|
public Task loadSettingsData(SettingsCacheBehavior settingsCacheBehavior, Executor executor) {
|
|
Settings cachedSettingsData;
|
|
if (!buildInstanceIdentifierChanged() && (cachedSettingsData = getCachedSettingsData(settingsCacheBehavior)) != null) {
|
|
this.settings.set(cachedSettingsData);
|
|
((TaskCompletionSource) this.settingsTask.get()).trySetResult(cachedSettingsData);
|
|
return Tasks.forResult(null);
|
|
}
|
|
Settings cachedSettingsData2 = getCachedSettingsData(SettingsCacheBehavior.IGNORE_CACHE_EXPIRATION);
|
|
if (cachedSettingsData2 != null) {
|
|
this.settings.set(cachedSettingsData2);
|
|
((TaskCompletionSource) this.settingsTask.get()).trySetResult(cachedSettingsData2);
|
|
}
|
|
return this.dataCollectionArbiter.waitForDataCollectionPermission(executor).onSuccessTask(executor, new SuccessContinuation() { // from class: com.google.firebase.crashlytics.internal.settings.SettingsController.1
|
|
@Override // com.google.android.gms.tasks.SuccessContinuation
|
|
public Task then(Void r5) {
|
|
JSONObject invoke = SettingsController.this.settingsSpiCall.invoke(SettingsController.this.settingsRequest, true);
|
|
if (invoke != null) {
|
|
Settings parseSettingsJson = SettingsController.this.settingsJsonParser.parseSettingsJson(invoke);
|
|
SettingsController.this.cachedSettingsIo.writeCachedSettings(parseSettingsJson.expiresAtMillis, invoke);
|
|
SettingsController.this.logSettings(invoke, "Loaded settings: ");
|
|
SettingsController settingsController = SettingsController.this;
|
|
settingsController.setStoredBuildInstanceIdentifier(settingsController.settingsRequest.instanceId);
|
|
SettingsController.this.settings.set(parseSettingsJson);
|
|
((TaskCompletionSource) SettingsController.this.settingsTask.get()).trySetResult(parseSettingsJson);
|
|
}
|
|
return Tasks.forResult(null);
|
|
}
|
|
});
|
|
}
|
|
|
|
public final Settings getCachedSettingsData(SettingsCacheBehavior settingsCacheBehavior) {
|
|
Settings settings = null;
|
|
try {
|
|
if (!SettingsCacheBehavior.SKIP_CACHE_LOOKUP.equals(settingsCacheBehavior)) {
|
|
JSONObject readCachedSettings = this.cachedSettingsIo.readCachedSettings();
|
|
if (readCachedSettings != null) {
|
|
Settings parseSettingsJson = this.settingsJsonParser.parseSettingsJson(readCachedSettings);
|
|
if (parseSettingsJson != null) {
|
|
logSettings(readCachedSettings, "Loaded cached settings: ");
|
|
long currentTimeMillis = this.currentTimeProvider.getCurrentTimeMillis();
|
|
if (!SettingsCacheBehavior.IGNORE_CACHE_EXPIRATION.equals(settingsCacheBehavior) && parseSettingsJson.isExpired(currentTimeMillis)) {
|
|
Logger.getLogger().v("Cached settings have expired.");
|
|
}
|
|
try {
|
|
Logger.getLogger().v("Returning cached settings.");
|
|
settings = parseSettingsJson;
|
|
} catch (Exception e) {
|
|
e = e;
|
|
settings = parseSettingsJson;
|
|
Logger.getLogger().e("Failed to get cached settings", e);
|
|
return settings;
|
|
}
|
|
} else {
|
|
Logger.getLogger().e("Failed to parse cached settings data.", null);
|
|
}
|
|
} else {
|
|
Logger.getLogger().d("No cached settings data found.");
|
|
}
|
|
}
|
|
} catch (Exception e2) {
|
|
e = e2;
|
|
}
|
|
return settings;
|
|
}
|
|
|
|
public final void logSettings(JSONObject jSONObject, String str) {
|
|
Logger.getLogger().d(str + jSONObject.toString());
|
|
}
|
|
|
|
public final String getStoredBuildInstanceIdentifier() {
|
|
return CommonUtils.getSharedPrefs(this.context).getString("existing_instance_identifier", "");
|
|
}
|
|
|
|
public final boolean setStoredBuildInstanceIdentifier(String str) {
|
|
SharedPreferences.Editor edit = CommonUtils.getSharedPrefs(this.context).edit();
|
|
edit.putString("existing_instance_identifier", str);
|
|
edit.apply();
|
|
return true;
|
|
}
|
|
|
|
public boolean buildInstanceIdentifierChanged() {
|
|
return !getStoredBuildInstanceIdentifier().equals(this.settingsRequest.instanceId);
|
|
}
|
|
}
|