diff options
Diffstat (limited to 'app/src/main/java')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/PodcastApp.java | 3 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/activity/BugReportActivity.java | 2 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java | 1 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/error/CrashReportWriter.java (renamed from app/src/main/java/de/danoeh/antennapod/CrashReportWriter.java) | 11 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/error/RxJavaErrorHandlerSetup.java | 36 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java | 1 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/preferences/PreferenceUpgrader.java | 3 |
7 files changed, 51 insertions, 6 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java index ed3f4e8f1..534d48479 100644 --- a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java +++ b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java @@ -12,6 +12,8 @@ import com.joanzapata.iconify.fonts.MaterialModule; import de.danoeh.antennapod.activity.SplashActivity; import de.danoeh.antennapod.core.ApCoreEventBusIndex; import de.danoeh.antennapod.core.ClientConfig; +import de.danoeh.antennapod.error.CrashReportWriter; +import de.danoeh.antennapod.error.RxJavaErrorHandlerSetup; import de.danoeh.antennapod.spa.SPAUtil; import org.greenrobot.eventbus.EventBus; @@ -38,6 +40,7 @@ public class PodcastApp extends Application { super.onCreate(); Thread.setDefaultUncaughtExceptionHandler(new CrashReportWriter()); + RxJavaErrorHandlerSetup.setupRxJavaErrorHandler(); if (BuildConfig.DEBUG) { StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder() diff --git a/app/src/main/java/de/danoeh/antennapod/activity/BugReportActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/BugReportActivity.java index b1a0ba2a2..d2618eb08 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/BugReportActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/BugReportActivity.java @@ -7,7 +7,7 @@ import android.os.Bundle; import com.google.android.material.snackbar.Snackbar; import androidx.appcompat.app.AppCompatActivity; import android.widget.TextView; -import de.danoeh.antennapod.CrashReportWriter; +import de.danoeh.antennapod.error.CrashReportWriter; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.util.IntentUtils; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java index a0ad99e7d..c3cb6b0ba 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java @@ -102,6 +102,7 @@ public class VideoplayerActivity extends MediaplayerActivity { if (!PictureInPictureUtil.isInPictureInPictureMode(this)) { videoControlsHider.stop(); } + progressIndicator.setVisibility(View.GONE); // Controller released; we will not receive buffering updates } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/CrashReportWriter.java b/app/src/main/java/de/danoeh/antennapod/error/CrashReportWriter.java index b5d0f6945..dc62863f9 100644 --- a/app/src/main/java/de/danoeh/antennapod/CrashReportWriter.java +++ b/app/src/main/java/de/danoeh/antennapod/error/CrashReportWriter.java @@ -1,8 +1,9 @@ -package de.danoeh.antennapod; +package de.danoeh.antennapod.error; import android.os.Build; import android.util.Log; +import de.danoeh.antennapod.BuildConfig; import org.apache.commons.io.IOUtils; import java.io.File; @@ -31,6 +32,11 @@ public class CrashReportWriter implements Thread.UncaughtExceptionHandler { @Override public void uncaughtException(Thread thread, Throwable ex) { + write(ex); + defaultHandler.uncaughtException(thread, ex); + } + + public static void write(Throwable exception) { File path = getFile(); PrintWriter out = null; try { @@ -41,14 +47,13 @@ public class CrashReportWriter implements Thread.UncaughtExceptionHandler { out.println(); out.println("## StackTrace"); out.println("```"); - ex.printStackTrace(out); + exception.printStackTrace(out); out.println("```"); } catch (IOException e) { Log.e(TAG, Log.getStackTraceString(e)); } finally { IOUtils.closeQuietly(out); } - defaultHandler.uncaughtException(thread, ex); } public static String getSystemInfo() { diff --git a/app/src/main/java/de/danoeh/antennapod/error/RxJavaErrorHandlerSetup.java b/app/src/main/java/de/danoeh/antennapod/error/RxJavaErrorHandlerSetup.java new file mode 100644 index 000000000..1c7f5f0b4 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/error/RxJavaErrorHandlerSetup.java @@ -0,0 +1,36 @@ +package de.danoeh.antennapod.error; + +import android.util.Log; +import de.danoeh.antennapod.BuildConfig; +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); + } + }); + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java index 9999b0b37..3129aa43c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java @@ -383,6 +383,7 @@ public class AudioPlayerFragment extends Fragment implements super.onStop(); controller.release(); controller = null; + progressIndicator.setVisibility(View.GONE); // Controller released; we will not receive buffering updates EventBus.getDefault().unregister(this); if (disposable != null) { disposable.dispose(); diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceUpgrader.java b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceUpgrader.java index 2a157c23b..64dd03b00 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceUpgrader.java +++ b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceUpgrader.java @@ -5,12 +5,11 @@ import android.content.SharedPreferences; import androidx.preference.PreferenceManager; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.CrashReportWriter; +import de.danoeh.antennapod.error.CrashReportWriter; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.preferences.UserPreferences.EnqueueLocation; import de.danoeh.antennapod.core.util.download.AutoUpdateManager; -import de.danoeh.antennapod.core.util.gui.NotificationUtils; public class PreferenceUpgrader { private static final String PREF_CONFIGURED_VERSION = "version_code"; |