[Android] Refactor the preference warning dialog to be generic

Nicolas Pomepuy git at videolan.org
Fri Feb 28 10:06:25 UTC 2025


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Thu Feb 27 09:52:06 2025 +0100| [a47d0ec59b2c11679f876c56b18aebc24fa026be] | committer: Nicolas Pomepuy

Refactor the preference warning dialog to be generic

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

 .../ui/preferences/PreferencesFragment.kt          |  6 ++--
 ...eDialog.kt => ConfirmPreferenceChangeDialog.kt} | 35 +++++++++++++++++--
 .../vlc/gui/preferences/PreferencesFragment.kt     | 39 ++++++++++++----------
 3 files changed, 56 insertions(+), 24 deletions(-)

diff --git a/application/television/src/main/java/org/videolan/television/ui/preferences/PreferencesFragment.kt b/application/television/src/main/java/org/videolan/television/ui/preferences/PreferencesFragment.kt
index d717073b97..adc4e5b423 100644
--- a/application/television/src/main/java/org/videolan/television/ui/preferences/PreferencesFragment.kt
+++ b/application/television/src/main/java/org/videolan/television/ui/preferences/PreferencesFragment.kt
@@ -42,7 +42,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.ConfirmAudioPlayQueueDialog
+import org.videolan.vlc.gui.dialogs.ConfirmPreferenceChangeDialog
 import org.videolan.vlc.gui.dialogs.PermissionListDialog
 
 @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@@ -109,8 +109,8 @@ class PreferencesFragment : BasePreferenceFragment(), SharedPreferences.OnShared
 
                 val audioResumePref = findPreference<CheckBoxPreference>(AUDIO_RESUME_PLAYBACK)
                 if (audioResumePref?.isChecked == false) {
-                    val dialog = ConfirmAudioPlayQueueDialog()
-                    dialog.show((activity as FragmentActivity).supportFragmentManager, ConfirmAudioPlayQueueDialog::class.simpleName)
+                    val dialog = ConfirmPreferenceChangeDialog()
+                    dialog.show((activity as FragmentActivity).supportFragmentManager, ConfirmPreferenceChangeDialog::class.simpleName)
                     dialog.setListener {
                         Settings.getInstance(activity).edit()
                                 .remove(KEY_AUDIO_LAST_PLAYLIST)
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/ConfirmAudioPlayQueueDialog.kt b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/ConfirmPreferenceChangeDialog.kt
similarity index 63%
rename from application/vlc-android/src/org/videolan/vlc/gui/dialogs/ConfirmAudioPlayQueueDialog.kt
rename to application/vlc-android/src/org/videolan/vlc/gui/dialogs/ConfirmPreferenceChangeDialog.kt
index 649d835aa2..9aaf042ac0 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/ConfirmAudioPlayQueueDialog.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/ConfirmPreferenceChangeDialog.kt
@@ -32,31 +32,49 @@ 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"
+const val CONFIRM_PREFERENCE_CHANGE_DIALOG_RESULT = "confirm_preference_change_dialog_result"
+const val PREFERENCE_KEY = "preference_key"
+const val WARNING_TITLE = "warning_title"
+const val WARNING_TEXT = "warning_text"
 
-class ConfirmAudioPlayQueueDialog : VLCBottomSheetDialogFragment() {
+class ConfirmPreferenceChangeDialog : VLCBottomSheetDialogFragment() {
 
     private lateinit var listener: () -> Unit
     private lateinit var title: TextView
+    private lateinit var warning: TextView
     private lateinit var acceptButton: Button
     private lateinit var cancelButton: Button
 
+    private lateinit var preferenceKey: String
+    private lateinit var titleText: String
+    private lateinit var warningText: String
+
 
     fun setListener(listener: () -> Unit) {
         this.listener = listener
     }
 
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        preferenceKey = arguments?.getString(PREFERENCE_KEY)!!
+        titleText = arguments?.getString(WARNING_TITLE)!!
+        warningText = arguments?.getString(WARNING_TEXT)!!
+    }
+
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
         val view = inflater.inflate(R.layout.dialog_confirm_audio_playqueue, container)
         title = view.findViewById(R.id.title)
+        warning = view.findViewById(R.id.message)
         acceptButton = view.findViewById(R.id.accept_button)
         cancelButton = view.findViewById(R.id.cancel_button)
         acceptButton.setOnClickListener {
             if (::listener.isInitialized) listener.invoke()
-            setFragmentResult(CONFIRM_AUDIO_PLAY_QUEUE_DIALOG_RESULT, bundleOf())
+            setFragmentResult(CONFIRM_PREFERENCE_CHANGE_DIALOG_RESULT, bundleOf(PREFERENCE_KEY to preferenceKey))
             dismiss()
         }
         cancelButton.setOnClickListener { dismiss() }
+        title.text = titleText
+        warning.text = warningText
         return view
     }
 
@@ -69,4 +87,15 @@ class ConfirmAudioPlayQueueDialog : VLCBottomSheetDialogFragment() {
     override fun needToManageOrientation(): Boolean {
         return true
     }
+    companion object {
+        fun newInstance(preferenceKey:String, title: String, warning: String) : ConfirmPreferenceChangeDialog {
+            return ConfirmPreferenceChangeDialog().apply {
+                val args = Bundle()
+                args.putString(PREFERENCE_KEY, preferenceKey)
+                args.putString(WARNING_TITLE, title)
+                args.putString(WARNING_TEXT, warning)
+                arguments = args
+            }
+        }
+    }
 }
\ No newline at end of file
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 24f0edb040..a89418e8b1 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,8 +57,9 @@ 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.CONFIRM_AUDIO_PLAY_QUEUE_DIALOG_RESULT
-import org.videolan.vlc.gui.dialogs.ConfirmAudioPlayQueueDialog
+import org.videolan.vlc.gui.dialogs.CONFIRM_PREFERENCE_CHANGE_DIALOG_RESULT
+import org.videolan.vlc.gui.dialogs.ConfirmPreferenceChangeDialog
+import org.videolan.vlc.gui.dialogs.PREFERENCE_KEY
 import org.videolan.vlc.gui.dialogs.PermissionListDialog
 import org.videolan.vlc.gui.helpers.UiTools
 import org.videolan.vlc.gui.preferences.search.PreferenceItem
@@ -122,20 +123,22 @@ 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
+        requireActivity().supportFragmentManager.setFragmentResultListener(CONFIRM_PREFERENCE_CHANGE_DIALOG_RESULT, viewLifecycleOwner) { requestKey, bundle ->
+            if (bundle.getString(PREFERENCE_KEY, "") == AUDIO_RESUME_PLAYBACK) {
+                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
+            }
         }
     }
 
@@ -180,8 +183,8 @@ class PreferencesFragment : BasePreferenceFragment(), SharedPreferences.OnShared
             }
             AUDIO_RESUME_PLAYBACK -> {
                 if (!audioResumePref.isChecked) {
-                    val dialog = ConfirmAudioPlayQueueDialog()
-                    dialog.show((activity as FragmentActivity).supportFragmentManager, ConfirmAudioPlayQueueDialog::class.simpleName)
+                    val dialog = ConfirmPreferenceChangeDialog.newInstance(AUDIO_RESUME_PLAYBACK,getString(R.string.audio_resume_playback_title),getString(R.string.audio_resume_playback_warning))
+                    dialog.show((activity as FragmentActivity).supportFragmentManager, ConfirmPreferenceChangeDialog::class.simpleName)
                     audioResumePref.isChecked = true
                 }
                 return true



More information about the Android mailing list