summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/RxJavaErrorHandlerSetup.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/RxJavaErrorHandlerSetup.java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/RxJavaErrorHandlerSetup.java35
1 files changed, 35 insertions, 0 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/RxJavaErrorHandlerSetup.java b/app/src/main/java/de/danoeh/antennapod/RxJavaErrorHandlerSetup.java
new file mode 100644
index 000000000..e909702ce
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/RxJavaErrorHandlerSetup.java
@@ -0,0 +1,35 @@
+package de.danoeh.antennapod;
+
+import android.util.Log;
+import io.reactivex.exceptions.UndeliverableException;
+import io.reactivex.plugins.RxJavaPlugins;
+
+public class RxJavaErrorHandlerSetup {
+ private static final String TAG = "RxJavaErrorHandler";
+
+ private RxJavaErrorHandlerSetup() {
+
+ }
+
+ public static void setupRxJavaErrorHandler() {
+ RxJavaPlugins.setErrorHandler(exception -> {
+ if (exception instanceof UndeliverableException) {
+ // Probably just disposed because the fragment was left
+ Log.d(TAG, "Ignored exception: " + Log.getStackTraceString(exception));
+ return;
+ }
+
+ // Usually, undeliverable exceptions are wrapped in an UndeliverableException.
+ // If an undeliverable exception is a NPE (or some others), wrapping does not happen.
+ // AntennaPod threads might throw NPEs after disposing because we set controllers to null.
+ // Just swallow all exceptions here.
+ Log.e(TAG, Log.getStackTraceString(exception));
+ CrashReportWriter.write(exception);
+
+ if (BuildConfig.DEBUG) {
+ Thread.currentThread().getUncaughtExceptionHandler()
+ .uncaughtException(Thread.currentThread(), exception);
+ }
+ });
+ }
+}