Primer paso de la investigacion. Se aportan el .apk, las carpetas con el apk extraido y el apk descompilado. El archivo API_DOCUMENTATION.md es un archivo donde se anotaran los descubrimientos del funcionamiento de la API, y los .py son scripts para probar la funcionalidad de la API con los métodos que vayamos encontrando. Finalmente, los archivos .js son scripts de Frida para extraer informacion de la APP durante la ejecucion.

This commit is contained in:
2025-12-04 13:59:54 +01:00
parent f2fd1c3bf5
commit e0133d2ca2
10432 changed files with 1019085 additions and 1 deletions

View File

@@ -0,0 +1,100 @@
package com.google.firebase.crashlytics.internal.settings;
import W1.l;
import com.google.firebase.crashlytics.internal.Logger;
import com.google.firebase.crashlytics.internal.common.CommonUtils;
import com.google.firebase.crashlytics.internal.persistence.FileStore;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import org.json.JSONObject;
/* loaded from: classes3.dex */
public class CachedSettingsIo {
private static final String SETTINGS_CACHE_FILENAME = "com.crashlytics.settings.json";
private final File cachedSettingsFile;
public CachedSettingsIo(FileStore fileStore) {
this.cachedSettingsFile = fileStore.getCommonFile(SETTINGS_CACHE_FILENAME);
}
private File getSettingsFile() {
return this.cachedSettingsFile;
}
/* JADX WARN: Multi-variable type inference failed */
public JSONObject readCachedSettings() {
FileInputStream fileInputStream;
JSONObject jSONObject;
Logger.getLogger().d("Checking for cached settings...");
l lVar = 0;
FileInputStream fileInputStream2 = null;
try {
try {
File settingsFile = getSettingsFile();
if (settingsFile.exists()) {
fileInputStream = new FileInputStream(settingsFile);
try {
jSONObject = new JSONObject(CommonUtils.streamToString(fileInputStream));
fileInputStream2 = fileInputStream;
} catch (Exception e4) {
e = e4;
Logger.getLogger().e("Failed to fetch cached settings", e);
CommonUtils.closeOrLog(fileInputStream, "Error while closing settings cache file.");
return null;
}
} else {
Logger.getLogger().v("Settings file does not exist.");
jSONObject = null;
}
CommonUtils.closeOrLog(fileInputStream2, "Error while closing settings cache file.");
return jSONObject;
} catch (Throwable th) {
th = th;
lVar = "Checking for cached settings...";
CommonUtils.closeOrLog(lVar, "Error while closing settings cache file.");
throw th;
}
} catch (Exception e5) {
e = e5;
fileInputStream = null;
} catch (Throwable th2) {
th = th2;
CommonUtils.closeOrLog(lVar, "Error while closing settings cache file.");
throw th;
}
}
public void writeCachedSettings(long j4, JSONObject jSONObject) {
FileWriter fileWriter;
Logger.getLogger().v("Writing settings to cache file...");
if (jSONObject != null) {
FileWriter fileWriter2 = null;
try {
try {
jSONObject.put("expires_at", j4);
fileWriter = new FileWriter(getSettingsFile());
} catch (Throwable th) {
th = th;
}
} catch (Exception e4) {
e = e4;
}
try {
fileWriter.write(jSONObject.toString());
fileWriter.flush();
CommonUtils.closeOrLog(fileWriter, "Failed to close settings writer.");
} catch (Exception e5) {
e = e5;
fileWriter2 = fileWriter;
Logger.getLogger().e("Failed to cache settings", e);
CommonUtils.closeOrLog(fileWriter2, "Failed to close settings writer.");
} catch (Throwable th2) {
th = th2;
fileWriter2 = fileWriter;
CommonUtils.closeOrLog(fileWriter2, "Failed to close settings writer.");
throw th;
}
}
}
}

View File

@@ -0,0 +1,17 @@
package com.google.firebase.crashlytics.internal.settings;
import com.google.firebase.crashlytics.internal.common.CurrentTimeProvider;
import com.google.firebase.crashlytics.internal.settings.Settings;
import org.json.JSONObject;
/* loaded from: classes3.dex */
class DefaultSettingsJsonTransform implements SettingsJsonTransform {
public static Settings defaultSettings(CurrentTimeProvider currentTimeProvider) {
return new Settings(currentTimeProvider.getCurrentTimeMillis() + 3600000, new Settings.SessionData(8, 4), new Settings.FeatureFlagData(true, false, false), 0, 3600, 10.0d, 1.2d, 60);
}
@Override // com.google.firebase.crashlytics.internal.settings.SettingsJsonTransform
public Settings buildFromJson(CurrentTimeProvider currentTimeProvider, JSONObject jSONObject) {
return defaultSettings(currentTimeProvider);
}
}

View File

@@ -0,0 +1,129 @@
package com.google.firebase.crashlytics.internal.settings;
import C.w;
import android.text.TextUtils;
import com.google.firebase.crashlytics.internal.Logger;
import com.google.firebase.crashlytics.internal.common.CrashlyticsCore;
import com.google.firebase.crashlytics.internal.network.HttpGetRequest;
import com.google.firebase.crashlytics.internal.network.HttpRequestFactory;
import com.google.firebase.crashlytics.internal.network.HttpResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONObject;
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes3.dex */
public class DefaultSettingsSpiCall implements SettingsSpiCall {
static final String ACCEPT_JSON_VALUE = "application/json";
static final String ANDROID_CLIENT_TYPE = "android";
static final String BUILD_VERSION_PARAM = "build_version";
static final String CRASHLYTICS_USER_AGENT = "Crashlytics Android SDK/";
static final String DISPLAY_VERSION_PARAM = "display_version";
static final String HEADER_ACCEPT = "Accept";
static final String HEADER_CLIENT_TYPE = "X-CRASHLYTICS-API-CLIENT-TYPE";
static final String HEADER_CLIENT_VERSION = "X-CRASHLYTICS-API-CLIENT-VERSION";
static final String HEADER_DEVICE_MODEL = "X-CRASHLYTICS-DEVICE-MODEL";
static final String HEADER_GOOGLE_APP_ID = "X-CRASHLYTICS-GOOGLE-APP-ID";
static final String HEADER_INSTALLATION_ID = "X-CRASHLYTICS-INSTALLATION-ID";
static final String HEADER_OS_BUILD_VERSION = "X-CRASHLYTICS-OS-BUILD-VERSION";
static final String HEADER_OS_DISPLAY_VERSION = "X-CRASHLYTICS-OS-DISPLAY-VERSION";
static final String HEADER_USER_AGENT = "User-Agent";
static final String INSTANCE_PARAM = "instance";
static final String SOURCE_PARAM = "source";
private final Logger logger;
private final HttpRequestFactory requestFactory;
private final String url;
public DefaultSettingsSpiCall(String str, HttpRequestFactory httpRequestFactory) {
this(str, httpRequestFactory, Logger.getLogger());
}
private HttpGetRequest applyHeadersTo(HttpGetRequest httpGetRequest, SettingsRequest settingsRequest) {
applyNonNullHeader(httpGetRequest, HEADER_GOOGLE_APP_ID, settingsRequest.googleAppId);
applyNonNullHeader(httpGetRequest, HEADER_CLIENT_TYPE, ANDROID_CLIENT_TYPE);
applyNonNullHeader(httpGetRequest, HEADER_CLIENT_VERSION, CrashlyticsCore.getVersion());
applyNonNullHeader(httpGetRequest, HEADER_ACCEPT, ACCEPT_JSON_VALUE);
applyNonNullHeader(httpGetRequest, HEADER_DEVICE_MODEL, settingsRequest.deviceModel);
applyNonNullHeader(httpGetRequest, HEADER_OS_BUILD_VERSION, settingsRequest.osBuildVersion);
applyNonNullHeader(httpGetRequest, HEADER_OS_DISPLAY_VERSION, settingsRequest.osDisplayVersion);
applyNonNullHeader(httpGetRequest, HEADER_INSTALLATION_ID, settingsRequest.installIdProvider.getInstallIds().getCrashlyticsInstallId());
return httpGetRequest;
}
private void applyNonNullHeader(HttpGetRequest httpGetRequest, String str, String str2) {
if (str2 != null) {
httpGetRequest.header(str, str2);
}
}
private JSONObject getJsonObjectFrom(String str) {
try {
return new JSONObject(str);
} catch (Exception e4) {
this.logger.w("Failed to parse settings JSON from " + this.url, e4);
this.logger.w("Settings response " + str);
return null;
}
}
private Map<String, String> getQueryParamsFor(SettingsRequest settingsRequest) {
HashMap hashMap = new HashMap();
hashMap.put(BUILD_VERSION_PARAM, settingsRequest.buildVersion);
hashMap.put(DISPLAY_VERSION_PARAM, settingsRequest.displayVersion);
hashMap.put("source", Integer.toString(settingsRequest.source));
String str = settingsRequest.instanceId;
if (!TextUtils.isEmpty(str)) {
hashMap.put(INSTANCE_PARAM, str);
}
return hashMap;
}
public HttpGetRequest createHttpGetRequest(Map<String, String> map) {
return this.requestFactory.buildHttpGetRequest(this.url, map).header(HEADER_USER_AGENT, CRASHLYTICS_USER_AGENT + CrashlyticsCore.getVersion()).header("X-CRASHLYTICS-DEVELOPER-TOKEN", "470fa2b4ae81cd56ecbcda9735803434cec591fa");
}
public JSONObject handleResponse(HttpResponse httpResponse) {
int code = httpResponse.code();
this.logger.v("Settings response code was: " + code);
if (requestWasSuccessful(code)) {
return getJsonObjectFrom(httpResponse.body());
}
Logger logger = this.logger;
StringBuilder t2 = w.t(code, "Settings request failed; (status: ", ") from ");
t2.append(this.url);
logger.e(t2.toString());
return null;
}
@Override // com.google.firebase.crashlytics.internal.settings.SettingsSpiCall
public JSONObject invoke(SettingsRequest settingsRequest, boolean z3) {
if (!z3) {
throw new RuntimeException("An invalid data collection token was used.");
}
try {
Map<String, String> queryParamsFor = getQueryParamsFor(settingsRequest);
HttpGetRequest applyHeadersTo = applyHeadersTo(createHttpGetRequest(queryParamsFor), settingsRequest);
this.logger.d("Requesting settings from " + this.url);
this.logger.v("Settings query params were: " + queryParamsFor);
return handleResponse(applyHeadersTo.execute());
} catch (IOException e4) {
this.logger.e("Settings request failed.", e4);
return null;
}
}
public boolean requestWasSuccessful(int i) {
return i == 200 || i == 201 || i == 202 || i == 203;
}
public DefaultSettingsSpiCall(String str, HttpRequestFactory httpRequestFactory, Logger logger) {
if (str != null) {
this.logger = logger;
this.requestFactory = httpRequestFactory;
this.url = str;
return;
}
throw new IllegalArgumentException("url must not be null.");
}
}

View File

@@ -0,0 +1,52 @@
package com.google.firebase.crashlytics.internal.settings;
/* loaded from: classes3.dex */
public class Settings {
public final int cacheDuration;
public final long expiresAtMillis;
public final FeatureFlagData featureFlagData;
public final double onDemandBackoffBase;
public final int onDemandBackoffStepDurationSeconds;
public final double onDemandUploadRatePerMinute;
public final SessionData sessionData;
public final int settingsVersion;
/* loaded from: classes3.dex */
public static class FeatureFlagData {
public final boolean collectAnrs;
public final boolean collectBuildIds;
public final boolean collectReports;
public FeatureFlagData(boolean z3, boolean z4, boolean z5) {
this.collectReports = z3;
this.collectAnrs = z4;
this.collectBuildIds = z5;
}
}
/* loaded from: classes3.dex */
public static class SessionData {
public final int maxCompleteSessionsCount;
public final int maxCustomExceptionEvents;
public SessionData(int i, int i4) {
this.maxCustomExceptionEvents = i;
this.maxCompleteSessionsCount = i4;
}
}
public Settings(long j4, SessionData sessionData, FeatureFlagData featureFlagData, int i, int i4, double d4, double d5, int i5) {
this.expiresAtMillis = j4;
this.sessionData = sessionData;
this.featureFlagData = featureFlagData;
this.settingsVersion = i;
this.cacheDuration = i4;
this.onDemandUploadRatePerMinute = d4;
this.onDemandBackoffBase = d5;
this.onDemandBackoffStepDurationSeconds = i5;
}
public boolean isExpired(long j4) {
return this.expiresAtMillis < j4;
}
}

View File

@@ -0,0 +1,8 @@
package com.google.firebase.crashlytics.internal.settings;
/* loaded from: classes3.dex */
enum SettingsCacheBehavior {
USE_CACHE,
SKIP_CACHE_LOOKUP,
IGNORE_CACHE_EXPIRATION
}

View File

@@ -0,0 +1,167 @@
package com.google.firebase.crashlytics.internal.settings;
import C.w;
import android.annotation.SuppressLint;
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.JSONException;
import org.json.JSONObject;
import u.AbstractC0629f;
/* loaded from: classes3.dex */
public class SettingsController implements SettingsProvider {
private static final String PREFS_BUILD_INSTANCE_IDENTIFIER = "existing_instance_identifier";
private static final String SETTINGS_URL_FORMAT = "https://firebase-settings.crashlytics.com/spi/v2/platforms/android/gmp/%s/settings";
private final CachedSettingsIo cachedSettingsIo;
private final Context context;
private final CurrentTimeProvider currentTimeProvider;
private final DataCollectionArbiter dataCollectionArbiter;
private final AtomicReference<Settings> settings;
private final SettingsJsonParser settingsJsonParser;
private final SettingsRequest settingsRequest;
private final SettingsSpiCall settingsSpiCall;
private final AtomicReference<TaskCompletionSource<Settings>> settingsTask;
public SettingsController(Context context, SettingsRequest settingsRequest, CurrentTimeProvider currentTimeProvider, SettingsJsonParser settingsJsonParser, CachedSettingsIo cachedSettingsIo, SettingsSpiCall settingsSpiCall, DataCollectionArbiter dataCollectionArbiter) {
AtomicReference<Settings> 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();
SettingsJsonParser settingsJsonParser = new SettingsJsonParser(systemCurrentTimeProvider);
CachedSettingsIo cachedSettingsIo = new CachedSettingsIo(fileStore);
Locale locale = Locale.US;
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, settingsJsonParser, cachedSettingsIo, new DefaultSettingsSpiCall(w.o("https://firebase-settings.crashlytics.com/spi/v2/platforms/android/gmp/", str, "/settings"), httpRequestFactory), dataCollectionArbiter);
}
private 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) {
Logger.getLogger().e("Failed to parse cached settings data.", null);
return 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.");
return null;
}
try {
Logger.getLogger().v("Returning cached settings.");
return parseSettingsJson;
} catch (Exception e4) {
e = e4;
settings = parseSettingsJson;
Logger.getLogger().e("Failed to get cached settings", e);
return settings;
}
}
Logger.getLogger().d("No cached settings data found.");
}
return null;
} catch (Exception e5) {
e = e5;
}
}
private String getStoredBuildInstanceIdentifier() {
return CommonUtils.getSharedPrefs(this.context).getString(PREFS_BUILD_INSTANCE_IDENTIFIER, "");
}
/* JADX INFO: Access modifiers changed from: private */
public void logSettings(JSONObject jSONObject, String str) throws JSONException {
Logger logger = Logger.getLogger();
StringBuilder a2 = AbstractC0629f.a(str);
a2.append(jSONObject.toString());
logger.d(a2.toString());
}
/* JADX INFO: Access modifiers changed from: private */
@SuppressLint({"CommitPrefEdits"})
public boolean setStoredBuildInstanceIdentifier(String str) {
SharedPreferences.Editor edit = CommonUtils.getSharedPrefs(this.context).edit();
edit.putString(PREFS_BUILD_INSTANCE_IDENTIFIER, str);
edit.apply();
return true;
}
public boolean buildInstanceIdentifierChanged() {
return !getStoredBuildInstanceIdentifier().equals(this.settingsRequest.instanceId);
}
@Override // com.google.firebase.crashlytics.internal.settings.SettingsProvider
public Task<Settings> getSettingsAsync() {
return this.settingsTask.get().getTask();
}
@Override // com.google.firebase.crashlytics.internal.settings.SettingsProvider
public Settings getSettingsSync() {
return this.settings.get();
}
public Task<Void> loadSettingsData(Executor executor) {
return loadSettingsData(SettingsCacheBehavior.USE_CACHE, executor);
}
public Task<Void> loadSettingsData(SettingsCacheBehavior settingsCacheBehavior, Executor executor) {
Settings cachedSettingsData;
if (!buildInstanceIdentifierChanged() && (cachedSettingsData = getCachedSettingsData(settingsCacheBehavior)) != null) {
this.settings.set(cachedSettingsData);
this.settingsTask.get().trySetResult(cachedSettingsData);
return Tasks.forResult(null);
}
Settings cachedSettingsData2 = getCachedSettingsData(SettingsCacheBehavior.IGNORE_CACHE_EXPIRATION);
if (cachedSettingsData2 != null) {
this.settings.set(cachedSettingsData2);
this.settingsTask.get().trySetResult(cachedSettingsData2);
}
return this.dataCollectionArbiter.waitForDataCollectionPermission(executor).onSuccessTask(executor, new SuccessContinuation<Void, Void>() { // from class: com.google.firebase.crashlytics.internal.settings.SettingsController.1
@Override // com.google.android.gms.tasks.SuccessContinuation
public Task<Void> then(Void r5) throws Exception {
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);
}
});
}
}

View File

@@ -0,0 +1,29 @@
package com.google.firebase.crashlytics.internal.settings;
/* loaded from: classes3.dex */
class SettingsJsonConstants {
static final String APP_STATUS_KEY = "status";
static final String CACHE_DURATION_KEY = "cache_duration";
static final String EXPIRES_AT_KEY = "expires_at";
static final boolean FEATURES_COLLECT_ANRS_DEFAULT = false;
static final String FEATURES_COLLECT_ANRS_KEY = "collect_anrs";
static final boolean FEATURES_COLLECT_BUILD_IDS_DEFAULT = false;
static final String FEATURES_COLLECT_BUILD_IDS_KEY = "collect_build_ids";
static final boolean FEATURES_COLLECT_REPORTS_DEFAULT = true;
static final String FEATURES_COLLECT_REPORTS_KEY = "collect_reports";
static final String FEATURES_KEY = "features";
static final String ON_DEMAND_BACKOFF_BASE_KEY = "on_demand_backoff_base";
static final String ON_DEMAND_BACKOFF_STEP_DURATION_SECONDS_KEY = "on_demand_backoff_step_duration_seconds";
static final String ON_DEMAND_UPLOAD_RATE_PER_MINUTE_KEY = "on_demand_upload_rate_per_minute";
static final String SESSION_KEY = "session";
static final int SETTINGS_CACHE_DURATION_DEFAULT = 3600;
static final int SETTINGS_MAX_COMPLETE_SESSIONS_COUNT_DEFAULT = 4;
static final String SETTINGS_MAX_COMPLETE_SESSIONS_COUNT_KEY = "max_complete_sessions_count";
static final int SETTINGS_MAX_CUSTOM_EXCEPTION_EVENTS_DEFAULT = 8;
static final String SETTINGS_MAX_CUSTOM_EXCEPTION_EVENTS_KEY = "max_custom_exception_events";
static final double SETTINGS_ON_DEMAND_BACKOFF_BASE_DEFAULT = 1.2d;
static final int SETTINGS_ON_DEMAND_BACKOFF_STEP_DURATION_SECONDS_DEFAULT = 60;
static final double SETTINGS_ON_DEMAND_UPLOAD_RATE_PER_MINUTE_DEFAULT = 10.0d;
static final String SETTINGS_VERSION = "settings_version";
static final int SETTINGS_VERSION_DEFAULT = 0;
}

View File

@@ -0,0 +1,27 @@
package com.google.firebase.crashlytics.internal.settings;
import com.google.firebase.crashlytics.internal.Logger;
import com.google.firebase.crashlytics.internal.common.CurrentTimeProvider;
import org.json.JSONException;
import org.json.JSONObject;
/* loaded from: classes3.dex */
public class SettingsJsonParser {
private final CurrentTimeProvider currentTimeProvider;
public SettingsJsonParser(CurrentTimeProvider currentTimeProvider) {
this.currentTimeProvider = currentTimeProvider;
}
private static SettingsJsonTransform getJsonTransformForVersion(int i) {
if (i == 3) {
return new SettingsV3JsonTransform();
}
Logger.getLogger().e("Could not determine SettingsJsonTransform for settings version " + i + ". Using default settings values.");
return new DefaultSettingsJsonTransform();
}
public Settings parseSettingsJson(JSONObject jSONObject) throws JSONException {
return getJsonTransformForVersion(jSONObject.getInt("settings_version")).buildFromJson(this.currentTimeProvider, jSONObject);
}
}

View File

@@ -0,0 +1,10 @@
package com.google.firebase.crashlytics.internal.settings;
import com.google.firebase.crashlytics.internal.common.CurrentTimeProvider;
import org.json.JSONException;
import org.json.JSONObject;
/* loaded from: classes3.dex */
interface SettingsJsonTransform {
Settings buildFromJson(CurrentTimeProvider currentTimeProvider, JSONObject jSONObject) throws JSONException;
}

View File

@@ -0,0 +1,10 @@
package com.google.firebase.crashlytics.internal.settings;
import com.google.android.gms.tasks.Task;
/* loaded from: classes3.dex */
public interface SettingsProvider {
Task<Settings> getSettingsAsync();
Settings getSettingsSync();
}

View File

@@ -0,0 +1,29 @@
package com.google.firebase.crashlytics.internal.settings;
import com.google.firebase.crashlytics.internal.common.InstallIdProvider;
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes3.dex */
public class SettingsRequest {
public final String buildVersion;
public final String deviceModel;
public final String displayVersion;
public final String googleAppId;
public final InstallIdProvider installIdProvider;
public final String instanceId;
public final String osBuildVersion;
public final String osDisplayVersion;
public final int source;
public SettingsRequest(String str, String str2, String str3, String str4, InstallIdProvider installIdProvider, String str5, String str6, String str7, int i) {
this.googleAppId = str;
this.deviceModel = str2;
this.osBuildVersion = str3;
this.osDisplayVersion = str4;
this.installIdProvider = installIdProvider;
this.instanceId = str5;
this.displayVersion = str6;
this.buildVersion = str7;
this.source = i;
}
}

View File

@@ -0,0 +1,9 @@
package com.google.firebase.crashlytics.internal.settings;
import org.json.JSONObject;
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes3.dex */
public interface SettingsSpiCall {
JSONObject invoke(SettingsRequest settingsRequest, boolean z3);
}

View File

@@ -0,0 +1,31 @@
package com.google.firebase.crashlytics.internal.settings;
import com.google.firebase.crashlytics.internal.common.CurrentTimeProvider;
import com.google.firebase.crashlytics.internal.settings.Settings;
import org.json.JSONException;
import org.json.JSONObject;
/* loaded from: classes3.dex */
class SettingsV3JsonTransform implements SettingsJsonTransform {
private static Settings.FeatureFlagData buildFeatureFlagDataFrom(JSONObject jSONObject) {
return new Settings.FeatureFlagData(jSONObject.optBoolean("collect_reports", true), jSONObject.optBoolean("collect_anrs", false), jSONObject.optBoolean("collect_build_ids", false));
}
private static Settings.SessionData buildSessionDataFrom(JSONObject jSONObject) {
return new Settings.SessionData(jSONObject.optInt("max_custom_exception_events", 8), 4);
}
private static long getExpiresAtFrom(CurrentTimeProvider currentTimeProvider, long j4, JSONObject jSONObject) {
if (jSONObject.has("expires_at")) {
return jSONObject.optLong("expires_at");
}
return (j4 * 1000) + currentTimeProvider.getCurrentTimeMillis();
}
@Override // com.google.firebase.crashlytics.internal.settings.SettingsJsonTransform
public Settings buildFromJson(CurrentTimeProvider currentTimeProvider, JSONObject jSONObject) throws JSONException {
int optInt = jSONObject.optInt("settings_version", 0);
int optInt2 = jSONObject.optInt("cache_duration", 3600);
return new Settings(getExpiresAtFrom(currentTimeProvider, optInt2, jSONObject), jSONObject.has("session") ? buildSessionDataFrom(jSONObject.getJSONObject("session")) : buildSessionDataFrom(new JSONObject()), buildFeatureFlagDataFrom(jSONObject.getJSONObject("features")), optInt, optInt2, jSONObject.optDouble("on_demand_upload_rate_per_minute", 10.0d), jSONObject.optDouble("on_demand_backoff_base", 1.2d), jSONObject.optInt("on_demand_backoff_step_duration_seconds", 60));
}
}