[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