[Android] Prevent crash loop in the browser in release builds

Nicolas Pomepuy git at videolan.org
Fri Jan 31 09:23:02 UTC 2025


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Tue Jan 28 07:59:14 2025 +0100| [b7f605650f18040095363da3c94f1a49df0feadc] | committer: Nicolas Pomepuy

Prevent crash loop in the browser in release builds

Fixes #3132

> https://code.videolan.org/videolan/vlc-android/commit/b7f605650f18040095363da3c94f1a49df0feadc
---

 .../vlc-android/src/org/videolan/vlc/StartActivity.kt     | 15 +++++++++++++++
 .../org/videolan/vlc/gui/browser/MainBrowserFragment.kt   | 11 +++++++++++
 2 files changed, 26 insertions(+)

diff --git a/application/vlc-android/src/org/videolan/vlc/StartActivity.kt b/application/vlc-android/src/org/videolan/vlc/StartActivity.kt
index 6d13f85efd..e3b3af974d 100644
--- a/application/vlc-android/src/org/videolan/vlc/StartActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/StartActivity.kt
@@ -31,6 +31,7 @@ import android.os.Build
 import android.os.Bundle
 import android.provider.MediaStore
 import android.util.Log
+import androidx.core.content.edit
 import androidx.core.net.toUri
 import androidx.fragment.app.FragmentActivity
 import androidx.lifecycle.lifecycleScope
@@ -128,6 +129,20 @@ class StartActivity : FragmentActivity() {
     }
 
     private fun resume() {
+        // if browse screen is unstable, revert back to the video screen
+
+        val preferences = Settings.getInstance(this)
+        if (preferences.getBoolean("navigator_screen_unstable", false)) {
+            Log.w(TAG, "Crash found in the browser!!!")
+            if (!BuildConfig.DEBUG) {
+                Log.w(TAG, "Reverting to the default screen")
+                preferences.edit(true) {
+                    remove("fragment_id")
+                    remove("navigator_screen_unstable")
+                }
+            }
+        }
+
         val intent = intent
         val action = intent?.action
 
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/browser/MainBrowserFragment.kt b/application/vlc-android/src/org/videolan/vlc/gui/browser/MainBrowserFragment.kt
index cca0ef5f53..6740d3736a 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/browser/MainBrowserFragment.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/browser/MainBrowserFragment.kt
@@ -28,6 +28,7 @@ import android.content.Intent
 import android.os.Bundle
 import android.view.*
 import androidx.appcompat.view.ActionMode
+import androidx.core.content.edit
 import androidx.core.net.toUri
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.lifecycleScope
@@ -160,6 +161,9 @@ class MainBrowserFragment : BaseFragment(), View.OnClickListener, CtxActionRecei
     override fun getTitle() = getString(R.string.browse)
 
     override fun onCreate(savedInstanceState: Bundle?) {
+        Settings.getInstance(requireActivity()).edit {
+            putBoolean("navigator_screen_unstable", true)
+        }
         browserFavRepository = BrowserFavRepository.getInstance(requireContext())
         networkMonitor = NetworkMonitor.getInstance(requireContext())
         super.onCreate(savedInstanceState)
@@ -168,6 +172,13 @@ class MainBrowserFragment : BaseFragment(), View.OnClickListener, CtxActionRecei
         networkViewModel = getBrowserModel(category = TYPE_NETWORK, url = null, mocked = arguments?.parcelableList(EXTRA_FOR_ESPRESSO))
     }
 
+    override fun onPause() {
+        super.onPause()
+        Settings.getInstance(requireActivity()).edit {
+            putBoolean("navigator_screen_unstable", false)
+        }
+    }
+
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
 



More information about the Android mailing list