From 254ea82a411e283c521fdedb70f0aa3b3d41047b Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 13 Jun 2024 09:04:17 +0200 Subject: [PATCH] Fixed forced crash reports --- app/src/main/java/eu/faircode/email/DB.java | 9 +++------ app/src/main/java/eu/faircode/email/Log.java | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/DB.java b/app/src/main/java/eu/faircode/email/DB.java index 26efbef60c..08086037f6 100644 --- a/app/src/main/java/eu/faircode/email/DB.java +++ b/app/src/main/java/eu/faircode/email/DB.java @@ -420,8 +420,7 @@ public abstract class DB extends RoomDatabase { Log.i("Disabled view invalidation"); } catch (ReflectiveOperationException ex) { // Should never happen - Log.forceCrashReporting(); - Log.e(ex); + Log.forceCrashReport(context, ex); } sInstance.getInvalidationTracker().addObserver(new InvalidationTracker.Observer(DB_TABLES) { @@ -462,8 +461,7 @@ public abstract class DB extends RoomDatabase { } } catch (Throwable ex) { // Should never happen - Log.forceCrashReporting(); - Log.e(ex); + Log.forceCrashReport(context, ex); } Log.i("DB critical section end"); } @@ -589,8 +587,7 @@ public abstract class DB extends RoomDatabase { at androidx.room.RoomDatabase.inTransaction(RoomDatabase.java:706) */ // Should never happen - Log.forceCrashReporting(); - Log.e(ex); + Log.forceCrashReport(context, ex); // FrameworkSQLiteOpenHelper.innerGetDatabase will delete the database throw ex; } diff --git a/app/src/main/java/eu/faircode/email/Log.java b/app/src/main/java/eu/faircode/email/Log.java index a4bde5d760..545fb4c4dc 100644 --- a/app/src/main/java/eu/faircode/email/Log.java +++ b/app/src/main/java/eu/faircode/email/Log.java @@ -312,14 +312,25 @@ public class Log { static void setCrashReporting(boolean enabled) { try { if (enabled) - Bugsnag.startSession(); + Bugsnag.resumeSession(); + else + Bugsnag.pauseSession(); } catch (Throwable ex) { Log.i(ex); } } - static void forceCrashReporting() { - Bugsnag.resumeSession(); + static void forceCrashReport(Context context, Throwable fatal) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean crash_reports = prefs.getBoolean("crash_reports", false); + try { + prefs.edit().putBoolean("crash_reports", true).apply(); + setCrashReporting(true); + Log.e(fatal); + } finally { + prefs.edit().putBoolean("crash_reports", crash_reports).apply(); + setCrashReporting(crash_reports); + } } public static void breadcrumb(String name, Bundle args) {