package com.google.firebase.crashlytics.ndk; import android.app.ActivityManager; import android.app.ApplicationExitInfo; import android.content.Context; import android.os.Build; import androidx.work.impl.utils.ForceStopRunnable$$ExternalSyntheticApiModelOutline1; import com.google.firebase.crashlytics.internal.Logger; import com.google.firebase.crashlytics.internal.common.CommonUtils; import com.google.firebase.crashlytics.internal.model.CrashlyticsReport; import com.google.firebase.crashlytics.internal.model.StaticSessionData; import com.google.firebase.crashlytics.internal.persistence.FileStore; import com.google.firebase.crashlytics.ndk.SessionFiles; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Base64; import java.util.Iterator; import java.util.List; import java.util.zip.GZIPOutputStream; /* loaded from: classes3.dex */ public class CrashpadController { public static final Charset UTF_8 = Charset.forName("UTF-8"); public final Context context; public final FileStore fileStore; public final NativeApi nativeApi; public CrashpadController(Context context, NativeApi nativeApi, FileStore fileStore) { this.context = context; this.nativeApi = nativeApi; this.fileStore = fileStore; } public boolean initialize(String str, String str2, long j, StaticSessionData staticSessionData) { File nativeSessionDir = this.fileStore.getNativeSessionDir(str); if (nativeSessionDir == null) { return false; } try { if (!this.nativeApi.initialize(nativeSessionDir.getCanonicalPath(), this.context.getAssets())) { return false; } writeBeginSession(str, str2, j); writeSessionApp(str, staticSessionData.appData()); writeSessionOs(str, staticSessionData.osData()); writeSessionDevice(str, staticSessionData.deviceData()); return true; } catch (IOException e) { Logger.getLogger().e("Error initializing Crashlytics NDK", e); return false; } } public boolean hasCrashDataForSession(String str) { SessionFiles.NativeCore nativeCore = getFilesForSession(str).nativeCore; return nativeCore != null && nativeCore.hasCore(); } public SessionFiles getFilesForSession(String str) { File nativeSessionDir = this.fileStore.getNativeSessionDir(str); File file = new File(nativeSessionDir, "pending"); Logger.getLogger().v("Minidump directory: " + file.getAbsolutePath()); File singleFileWithExtension = getSingleFileWithExtension(file, ".dmp"); Logger logger = Logger.getLogger(); StringBuilder sb = new StringBuilder(); sb.append("Minidump file "); sb.append((singleFileWithExtension == null || !singleFileWithExtension.exists()) ? "does not exist" : "exists"); logger.v(sb.toString()); SessionFiles.Builder builder = new SessionFiles.Builder(); if (nativeSessionDir != null && nativeSessionDir.exists() && file.exists()) { builder.nativeCore(getNativeCore(str, file)).metadataFile(getSingleFileWithExtension(nativeSessionDir, ".device_info")).sessionFile(new File(nativeSessionDir, "session.json")).appFile(new File(nativeSessionDir, "app.json")).deviceFile(new File(nativeSessionDir, "device.json")).osFile(new File(nativeSessionDir, "os.json")); } return builder.build(); } public final SessionFiles.NativeCore getNativeCore(String str, File file) { return new SessionFiles.NativeCore(getSingleFileWithExtension(file, ".dmp"), getApplicationExitInfo(str)); } public final CrashlyticsReport.ApplicationExitInfo getApplicationExitInfo(String str) { if (Build.VERSION.SDK_INT >= 31) { return getNativeCrashApplicationExitInfo(str); } return null; } public final CrashlyticsReport.ApplicationExitInfo getNativeCrashApplicationExitInfo(String str) { List historicalProcessExitReasons; historicalProcessExitReasons = ((ActivityManager) this.context.getSystemService("activity")).getHistoricalProcessExitReasons(null, 0, 0); File sessionFile = this.fileStore.getSessionFile(str, "start-time"); return getRelevantApplicationExitInfo(sessionFile == null ? System.currentTimeMillis() : sessionFile.lastModified(), historicalProcessExitReasons); } public final CrashlyticsReport.ApplicationExitInfo getRelevantApplicationExitInfo(long j, List list) { int reason; long timestamp; ArrayList arrayList = new ArrayList(); Iterator it = list.iterator(); while (it.hasNext()) { ApplicationExitInfo m = ForceStopRunnable$$ExternalSyntheticApiModelOutline1.m(it.next()); reason = m.getReason(); if (reason == 5) { timestamp = m.getTimestamp(); if (timestamp >= j) { arrayList.add(m); } } } if (arrayList.isEmpty()) { return null; } return convertApplicationExitInfoToModel(ForceStopRunnable$$ExternalSyntheticApiModelOutline1.m(arrayList.get(0))); } public void writeBeginSession(String str, String str2, long j) { writeSessionJsonFile(this.fileStore, str, SessionMetadataJsonSerializer.serializeBeginSession(str, str2, j), "session.json"); } public void writeSessionApp(String str, StaticSessionData.AppData appData) { writeSessionJsonFile(this.fileStore, str, SessionMetadataJsonSerializer.serializeSessionApp(appData.appIdentifier(), appData.versionCode(), appData.versionName(), appData.installUuid(), appData.deliveryMechanism(), appData.developmentPlatformProvider().getDevelopmentPlatform(), appData.developmentPlatformProvider().getDevelopmentPlatformVersion()), "app.json"); } public void writeSessionOs(String str, StaticSessionData.OsData osData) { writeSessionJsonFile(this.fileStore, str, SessionMetadataJsonSerializer.serializeSessionOs(osData.osRelease(), osData.osCodeName(), osData.isRooted()), "os.json"); } public void writeSessionDevice(String str, StaticSessionData.DeviceData deviceData) { writeSessionJsonFile(this.fileStore, str, SessionMetadataJsonSerializer.serializeSessionDevice(deviceData.arch(), deviceData.model(), deviceData.availableProcessors(), deviceData.totalRam(), deviceData.diskSpace(), deviceData.isEmulator(), deviceData.state(), deviceData.manufacturer(), deviceData.modelClass()), "device.json"); } public static void writeSessionJsonFile(FileStore fileStore, String str, String str2, String str3) { writeTextFile(new File(fileStore.getNativeSessionDir(str), str3), str2); } public static void writeTextFile(File file, String str) { BufferedWriter bufferedWriter; BufferedWriter bufferedWriter2 = null; try { bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), UTF_8)); } catch (IOException unused) { } catch (Throwable th) { th = th; } try { bufferedWriter.write(str); CommonUtils.closeOrLog(bufferedWriter, "Failed to close " + file); } catch (IOException unused2) { bufferedWriter2 = bufferedWriter; CommonUtils.closeOrLog(bufferedWriter2, "Failed to close " + file); } catch (Throwable th2) { th = th2; bufferedWriter2 = bufferedWriter; CommonUtils.closeOrLog(bufferedWriter2, "Failed to close " + file); throw th; } } public static File getSingleFileWithExtension(File file, String str) { File[] listFiles = file.listFiles(); if (listFiles == null) { return null; } for (File file2 : listFiles) { if (file2.getName().endsWith(str)) { return file2; } } return null; } public static CrashlyticsReport.ApplicationExitInfo convertApplicationExitInfoToModel(ApplicationExitInfo applicationExitInfo) { int importance; String processName; int reason; long timestamp; int pid; long pss; long rss; CrashlyticsReport.ApplicationExitInfo.Builder builder = CrashlyticsReport.ApplicationExitInfo.builder(); importance = applicationExitInfo.getImportance(); CrashlyticsReport.ApplicationExitInfo.Builder importance2 = builder.setImportance(importance); processName = applicationExitInfo.getProcessName(); CrashlyticsReport.ApplicationExitInfo.Builder processName2 = importance2.setProcessName(processName); reason = applicationExitInfo.getReason(); CrashlyticsReport.ApplicationExitInfo.Builder reasonCode = processName2.setReasonCode(reason); timestamp = applicationExitInfo.getTimestamp(); CrashlyticsReport.ApplicationExitInfo.Builder timestamp2 = reasonCode.setTimestamp(timestamp); pid = applicationExitInfo.getPid(); CrashlyticsReport.ApplicationExitInfo.Builder pid2 = timestamp2.setPid(pid); pss = applicationExitInfo.getPss(); CrashlyticsReport.ApplicationExitInfo.Builder pss2 = pid2.setPss(pss); rss = applicationExitInfo.getRss(); return pss2.setRss(rss).setTraceFile(getTraceFileFromApplicationExitInfo(applicationExitInfo)).build(); } public static String getTraceFileFromApplicationExitInfo(ApplicationExitInfo applicationExitInfo) { InputStream traceInputStream; try { traceInputStream = applicationExitInfo.getTraceInputStream(); return convertInputStreamToString(traceInputStream); } catch (IOException unused) { Logger.getLogger().w("Failed to get input stream from ApplicationExitInfo"); return null; } } public static String convertInputStreamToString(InputStream inputStream) { if (inputStream == null) { return null; } ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] bArr = new byte[8192]; while (true) { int read = inputStream.read(bArr); if (read != -1) { byteArrayOutputStream.write(bArr, 0, read); } else { return zipAndEncode(byteArrayOutputStream.toByteArray()); } } } public static String zipAndEncode(byte[] bArr) { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try { GZIPOutputStream gZIPOutputStream = new GZIPOutputStream(byteArrayOutputStream); try { gZIPOutputStream.write(bArr); gZIPOutputStream.finish(); String encodeToString = Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray()); gZIPOutputStream.close(); byteArrayOutputStream.close(); return encodeToString; } finally { } } catch (Throwable th) { try { byteArrayOutputStream.close(); } catch (Throwable th2) { th.addSuppressed(th2); } throw th; } } }