[Android] Open a dialog when the app is in beta and a crash occurred during the last session
Nicolas Pomepuy
git at videolan.org
Mon Mar 17 06:15:49 UTC 2025
vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Tue Mar 11 14:26:36 2025 +0100| [ec827e318bd2d6a023e477e9eef2dc689113ae68] | committer: Nicolas Pomepuy
Open a dialog when the app is in beta and a crash occurred during the last session
> https://code.videolan.org/videolan/vlc-android/commit/ec827e318bd2d6a023e477e9eef2dc689113ae68
---
.../org/videolan/resources/util/VLCCrashHandler.kt | 12 ++++++++++-
.../src/main/java/org/videolan/tools/Settings.kt | 3 +++
.../src/org/videolan/vlc/gui/MainActivity.kt | 24 ++++++++++++++++++++++
3 files changed, 38 insertions(+), 1 deletion(-)
diff --git a/application/resources/src/main/java/org/videolan/resources/util/VLCCrashHandler.kt b/application/resources/src/main/java/org/videolan/resources/util/VLCCrashHandler.kt
index c89a78a35e..77bdce9f5c 100644
--- a/application/resources/src/main/java/org/videolan/resources/util/VLCCrashHandler.kt
+++ b/application/resources/src/main/java/org/videolan/resources/util/VLCCrashHandler.kt
@@ -27,8 +27,17 @@ import android.text.format.DateFormat
import android.util.Log
import org.videolan.resources.AppContextProvider
import org.videolan.tools.CloseableUtils
+import org.videolan.tools.KEY_LAST_SESSION_CRASHED
import org.videolan.tools.Logcat
-import java.io.*
+import org.videolan.tools.Settings
+import org.videolan.tools.putSingle
+import java.io.BufferedWriter
+import java.io.FileNotFoundException
+import java.io.FileOutputStream
+import java.io.IOException
+import java.io.OutputStreamWriter
+import java.io.PrintWriter
+import java.io.StringWriter
import java.lang.Thread.UncaughtExceptionHandler
private const val TAG = "VLC/VlcCrashHandler"
@@ -70,6 +79,7 @@ class VLCCrashHandler : UncaughtExceptionHandler {
val stacktrace = result.toString()
printWriter.close()
Log.e(TAG, stacktrace)
+ Settings.getInstance(AppContextProvider.appContext).putSingle(KEY_LAST_SESSION_CRASHED, true)
// Save the log on SD card if available
if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) {
diff --git a/application/tools/src/main/java/org/videolan/tools/Settings.kt b/application/tools/src/main/java/org/videolan/tools/Settings.kt
index 506b801797..ba0b4479c2 100644
--- a/application/tools/src/main/java/org/videolan/tools/Settings.kt
+++ b/application/tools/src/main/java/org/videolan/tools/Settings.kt
@@ -265,6 +265,9 @@ const val KEY_SAFE_MODE_PIN = "safe_mode_pin"
const val KEY_RESTRICT_SETTINGS = "restrict_settings"
const val KEY_SAFE_MODE = "safe_mode"
+
+const val KEY_LAST_SESSION_CRASHED = "last_session_crashed"
+
const val ENABLE_ANDROID_AUTO_SPEED_BUTTONS = "enable_android_auto_speed_buttons"
const val ENABLE_ANDROID_AUTO_SEEK_BUTTONS = "enable_android_auto_seek_buttons"
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt
index 16f9d2a7f7..f1db4dcd8d 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/MainActivity.kt
@@ -44,8 +44,10 @@ import org.videolan.medialibrary.interfaces.Medialibrary
import org.videolan.resources.ACTIVITY_RESULT_OPEN
import org.videolan.resources.ACTIVITY_RESULT_PREFERENCES
import org.videolan.resources.ACTIVITY_RESULT_SECONDARY
+import org.videolan.resources.CRASH_HAPPENED
import org.videolan.resources.EXTRA_TARGET
import org.videolan.tools.KEY_INCOGNITO
+import org.videolan.tools.KEY_LAST_SESSION_CRASHED
import org.videolan.tools.KEY_MEDIALIBRARY_AUTO_RESCAN
import org.videolan.tools.KEY_SHOW_UPDATE
import org.videolan.tools.PERMISSION_NEVER_ASK
@@ -147,6 +149,28 @@ class MainActivity : ContentActivity(),
updateDialog.show(supportFragmentManager, "fragment_update")
}
}
+ if (settings.getBoolean(KEY_LAST_SESSION_CRASHED, false)) {
+ settings.putSingle(KEY_LAST_SESSION_CRASHED, false)
+ if (BuildConfig.BETA) {
+ AlertDialog.Builder(this at MainActivity)
+ .setTitle(resources.getString(R.string.report_crash))
+ .setMessage(resources.getString(R.string.serious_crash))
+ .setPositiveButton(R.string.send_log) { _, _ ->
+ startActivity(
+ Intent(applicationContext, FeedbackActivity::class.java)
+ .apply {
+ putExtra(CRASH_HAPPENED, true)
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ }
+ )
+ }
+ .setNegativeButton(R.string.cancel) { _, _ ->
+
+ }
+ .show()
+
+ }
+ }
}
More information about the Android
mailing list