From c5aa421d2f59664d71882cc3ba97ac51f67581d9 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 10 Feb 2023 08:34:31 +0100 Subject: [PATCH] Prevent crash --- .../eu/faircode/email/FragmentCompose.java | 4 +-- .../email/FragmentDialogForwardRaw.java | 2 +- .../eu/faircode/email/FragmentMessages.java | 2 +- .../faircode/email/FragmentOptionsBackup.java | 4 +-- .../email/FragmentOptionsNotifications.java | 2 +- .../java/eu/faircode/email/FragmentRule.java | 4 +-- app/src/main/java/eu/faircode/email/Log.java | 28 +++++++++++++++++++ 7 files changed, 37 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 5e703d069a..e2f158b28e 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -2801,7 +2801,7 @@ public class FragmentCompose extends FragmentBase { .setGestureInsetBottomIgnored(true).show(); else { Log.e(ex); - Log.unexpectedError(getParentFragmentManager(), ex); + Log.unexpectedError(FragmentCompose.this, ex); } } } @@ -5877,7 +5877,7 @@ public class FragmentCompose extends FragmentBase { if (ex instanceof SecurityException) ex = new Throwable(getString(R.string.title_no_permissions), ex); - Log.unexpectedError(getParentFragmentManager(), ex, + Log.unexpectedError(FragmentCompose.this, ex, !(ex instanceof IOException || ex.getCause() instanceof IOException)); /* java.lang.IllegalStateException: java.io.IOException: Failed to redact /storage/emulated/0/Download/97203830-piston-vecteur-icĂ´ne-simple-symbole-plat-sur-fond-blanc.jpg diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogForwardRaw.java b/app/src/main/java/eu/faircode/email/FragmentDialogForwardRaw.java index 4b0d12c18e..7284751f71 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogForwardRaw.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogForwardRaw.java @@ -304,7 +304,7 @@ public class FragmentDialogForwardRaw extends FragmentDialogBase { startActivity(send); } catch (Throwable ex) { // java.lang.IllegalArgumentException: Failed to resolve canonical path for ... - Log.unexpectedError(getParentFragmentManager(), ex); + Log.unexpectedError(FragmentDialogForwardRaw.this, ex); } } diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 66ce699129..e463995ef2 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -9151,7 +9151,7 @@ public class FragmentMessages extends FragmentBase } }.execute(FragmentMessages.this, args, "certificate:store"); } catch (Throwable ex) { - Log.unexpectedError(getParentFragmentManager(), ex); + Log.unexpectedError(FragmentMessages.this, ex); } } }); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsBackup.java b/app/src/main/java/eu/faircode/email/FragmentOptionsBackup.java index fa0188a2c2..8f61dddbc7 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsBackup.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsBackup.java @@ -1475,7 +1475,7 @@ public class FragmentOptionsBackup extends FragmentBase implements SharedPrefere fragment.setTargetFragment(this, export ? REQUEST_EXPORT_SELECT : REQUEST_IMPORT_SELECT); fragment.show(getParentFragmentManager(), "password"); } catch (Throwable ex) { - Log.unexpectedError(getParentFragmentManager(), ex); + Log.unexpectedError(FragmentOptionsBackup.this, ex); } } @@ -1543,7 +1543,7 @@ public class FragmentOptionsBackup extends FragmentBase implements SharedPrefere .putExtra(Intent.EXTRA_TEXT, "Activate"); startActivity(intent); } catch (Throwable ex) { - Log.unexpectedError(getParentFragmentManager(), ex); + Log.unexpectedError(FragmentOptionsBackup.this, ex); } } diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsNotifications.java b/app/src/main/java/eu/faircode/email/FragmentOptionsNotifications.java index e6540c7f1a..d6a8541db7 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsNotifications.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsNotifications.java @@ -871,7 +871,7 @@ public class FragmentOptionsNotifications extends FragmentBase implements Shared try { getContext().getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION); if (!Helper.isPersisted(getContext(), uri, true, false)) - Log.unexpectedError(getParentFragmentManager(), + Log.unexpectedError(FragmentOptionsNotifications.this, new IllegalStateException("No permission granted to access selected sound " + uri)); } catch (Throwable ex) { Log.w(ex); diff --git a/app/src/main/java/eu/faircode/email/FragmentRule.java b/app/src/main/java/eu/faircode/email/FragmentRule.java index 28569fc3e8..7d440b8fd5 100644 --- a/app/src/main/java/eu/faircode/email/FragmentRule.java +++ b/app/src/main/java/eu/faircode/email/FragmentRule.java @@ -998,10 +998,10 @@ public class FragmentRule extends FragmentBase { String permission = android.Manifest.permission.READ_CONTACTS; requestPermissions(new String[]{permission}, REQUEST_PERMISSIONS); } catch (Throwable ex1) { - Log.unexpectedError(getParentFragmentManager(), ex1); + Log.unexpectedError(FragmentRule.this, ex1); } else - Log.unexpectedError(getParentFragmentManager(), ex); + Log.unexpectedError(FragmentRule.this, ex); } } diff --git a/app/src/main/java/eu/faircode/email/Log.java b/app/src/main/java/eu/faircode/email/Log.java index d197f1f21c..d75c0e841e 100644 --- a/app/src/main/java/eu/faircode/email/Log.java +++ b/app/src/main/java/eu/faircode/email/Log.java @@ -85,6 +85,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.preference.PreferenceManager; import androidx.webkit.WebViewCompat; @@ -1854,6 +1855,33 @@ public class Log { return draft; } + static void unexpectedError(Fragment fragment, Throwable ex) { + unexpectedError(fragment, ex, true); + } + + static void unexpectedError(Fragment fragment, Throwable ex, boolean report) { + try { + unexpectedError(fragment.getParentFragmentManager(), ex, report); + } catch (Throwable exex) { + Log.w(exex); + /* + Exception java.lang.IllegalStateException: + at androidx.fragment.app.Fragment.getParentFragmentManager (Fragment.java:1107) + at eu.faircode.email.FragmentDialogForwardRaw.send (FragmentDialogForwardRaw.java:307) + at eu.faircode.email.FragmentDialogForwardRaw.access$200 (FragmentDialogForwardRaw.java:56) + at eu.faircode.email.FragmentDialogForwardRaw$4.onClick (FragmentDialogForwardRaw.java:239) + at androidx.appcompat.app.AlertController$ButtonHandler.handleMessage (AlertController.java:167) + at android.os.Handler.dispatchMessage (Handler.java:106) + at android.os.Looper.loopOnce (Looper.java:210) + at android.os.Looper.loop (Looper.java:299) + at android.app.ActivityThread.main (ActivityThread.java:8168) + at java.lang.reflect.Method.invoke (Method.java) + at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:556) + at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1037) + */ + } + } + static void unexpectedError(FragmentManager manager, Throwable ex) { unexpectedError(manager, ex, true); }