[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