[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