[Android] Fix crash when rotating while ConfirmAudioPlayQueueDialog is opened

Nicolas Pomepuy git at videolan.org
Mon Feb 10 14:09:43 UTC 2025


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Mon Jan 27 12:04:09 2025 +0100| [d7a30095622e32a597285417906f1c06bac8115a] | committer: Nicolas Pomepuy

Fix crash when rotating while ConfirmAudioPlayQueueDialog is opened

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

 .../vlc/gui/dialogs/ConfirmAudioPlayQueueDialog.kt |  6 +++-
 .../vlc/gui/preferences/PreferencesFragment.kt     | 39 +++++++++++-----------
 2 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/ConfirmAudioPlayQueueDialog.kt b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/ConfirmAudioPlayQueueDialog.kt
index 9df48c814c..649d835aa2 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/ConfirmAudioPlayQueueDialog.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/ConfirmAudioPlayQueueDialog.kt
@@ -27,9 +27,12 @@ import android.view.View
 import android.view.ViewGroup
 import android.widget.Button
 import android.widget.TextView
+import androidx.core.os.bundleOf
+import androidx.fragment.app.setFragmentResult
 import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED
 import org.videolan.vlc.R
 
+const val CONFIRM_AUDIO_PLAY_QUEUE_DIALOG_RESULT = "CONFIRM_AUDIO_PLAY_QUEUE_DIALOG_RESULT"
 
 class ConfirmAudioPlayQueueDialog : VLCBottomSheetDialogFragment() {
 
@@ -49,7 +52,8 @@ class ConfirmAudioPlayQueueDialog : VLCBottomSheetDialogFragment() {
         acceptButton = view.findViewById(R.id.accept_button)
         cancelButton = view.findViewById(R.id.cancel_button)
         acceptButton.setOnClickListener {
-            listener.invoke()
+            if (::listener.isInitialized) listener.invoke()
+            setFragmentResult(CONFIRM_AUDIO_PLAY_QUEUE_DIALOG_RESULT, bundleOf())
             dismiss()
         }
         cancelButton.setOnClickListener { dismiss() }
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesFragment.kt b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesFragment.kt
index ebf5e5c453..24f0edb040 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesFragment.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesFragment.kt
@@ -57,7 +57,7 @@ import org.videolan.vlc.R
 import org.videolan.vlc.gui.PinCodeActivity
 import org.videolan.vlc.gui.PinCodeReason
 import org.videolan.vlc.gui.SecondaryActivity
-import org.videolan.vlc.gui.dialogs.AboutVersionDialog
+import org.videolan.vlc.gui.dialogs.CONFIRM_AUDIO_PLAY_QUEUE_DIALOG_RESULT
 import org.videolan.vlc.gui.dialogs.ConfirmAudioPlayQueueDialog
 import org.videolan.vlc.gui.dialogs.PermissionListDialog
 import org.videolan.vlc.gui.helpers.UiTools
@@ -66,6 +66,7 @@ import org.videolan.vlc.util.Permissions
 
 class PreferencesFragment : BasePreferenceFragment(), SharedPreferences.OnSharedPreferenceChangeListener {
 
+    private lateinit var audioResumePref: CheckBoxPreference
     var pinCodeResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
         if (result.resultCode == Activity.RESULT_OK) {
             loadFragment(PreferencesParentalControl())
@@ -90,6 +91,7 @@ class PreferencesFragment : BasePreferenceFragment(), SharedPreferences.OnShared
         super.onCreate(savedInstanceState)
         findPreference<Preference>("remote_access_category")?.isVisible = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1
         findPreference<Preference>("permissions_title")?.isVisible = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1
+        audioResumePref = findPreference(AUDIO_RESUME_PLAYBACK)!!
     }
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -120,6 +122,21 @@ class PreferencesFragment : BasePreferenceFragment(), SharedPreferences.OnShared
             }
             arguments = null
         }
+        requireActivity().supportFragmentManager.setFragmentResultListener(CONFIRM_AUDIO_PLAY_QUEUE_DIALOG_RESULT, viewLifecycleOwner) { requestKey, bundle ->
+            Settings.getInstance(requireActivity()).edit()
+                .remove(KEY_AUDIO_LAST_PLAYLIST)
+                .remove(KEY_MEDIA_LAST_PLAYLIST_RESUME)
+                .remove(KEY_CURRENT_AUDIO_RESUME_TITLE)
+                .remove(KEY_CURRENT_AUDIO_RESUME_ARTIST)
+                .remove(KEY_CURRENT_AUDIO_RESUME_THUMB)
+                .remove(KEY_CURRENT_AUDIO)
+                .remove(KEY_CURRENT_MEDIA)
+                .remove(KEY_CURRENT_MEDIA_RESUME)
+                .apply()
+            val activity = activity
+            activity?.setResult(RESULT_RESTART)
+            audioResumePref.isChecked = false
+        }
     }
 
     override fun onPreferenceTreeClick(preference: Preference): Boolean {
@@ -162,27 +179,9 @@ class PreferencesFragment : BasePreferenceFragment(), SharedPreferences.OnShared
                 return true
             }
             AUDIO_RESUME_PLAYBACK -> {
-
-                val audioResumePref = findPreference<CheckBoxPreference>(AUDIO_RESUME_PLAYBACK)
-                if (audioResumePref?.isChecked == false) {
+                if (!audioResumePref.isChecked) {
                     val dialog = ConfirmAudioPlayQueueDialog()
                     dialog.show((activity as FragmentActivity).supportFragmentManager, ConfirmAudioPlayQueueDialog::class.simpleName)
-                    dialog.setListener {
-                        Settings.getInstance(requireActivity()).edit()
-                                .remove(KEY_AUDIO_LAST_PLAYLIST)
-                                .remove(KEY_MEDIA_LAST_PLAYLIST_RESUME)
-                                .remove(KEY_CURRENT_AUDIO_RESUME_TITLE)
-                                .remove(KEY_CURRENT_AUDIO_RESUME_ARTIST)
-                                .remove(KEY_CURRENT_AUDIO_RESUME_THUMB)
-                                .remove(KEY_CURRENT_AUDIO)
-                                .remove(KEY_CURRENT_MEDIA)
-                                .remove(KEY_CURRENT_MEDIA_RESUME)
-                                .apply()
-                        val activity = activity
-                        activity?.setResult(RESULT_RESTART)
-                        audioResumePref.isChecked = false
-                    }
-
                     audioResumePref.isChecked = true
                 }
                 return true



More information about the Android mailing list