[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