[Android] New equalizer: implement the title edit

Nicolas Pomepuy git at videolan.org
Fri Jul 25 11:46:43 UTC 2025


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Tue Jun 17 08:07:51 2025 +0200| [32cfd726de193648629352ed98e549cef9429bc8] | committer: Nicolas Pomepuy

New equalizer: implement the title edit

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

 .../resources/src/main/res/values/strings.xml      |  1 +
 .../vlc/gui/dialogs/EqualizerFragmentDialog.kt     | 19 ++++++++++++++++++-
 .../videolan/vlc/viewmodels/EqualizerViewModel.kt  | 22 ++++++++++++++++++++++
 3 files changed, 41 insertions(+), 1 deletion(-)

diff --git a/application/resources/src/main/res/values/strings.xml b/application/resources/src/main/res/values/strings.xml
index abfc093ae8..da62d324b7 100644
--- a/application/resources/src/main/res/values/strings.xml
+++ b/application/resources/src/main/res/values/strings.xml
@@ -1147,6 +1147,7 @@
     <string name="remove_from_playlist">Remove from playlist</string>
     <string name="play_media">Play %s</string>
     <string name="edit_eq_preset">Edit equalizer preset</string>
+    <string name="edit_eq_name_not_allowed">This name is not allowed</string>
 
     <!-- Duplication Warning Dialog -->
     <string name="message_primary_default">Add duplicated item(s)?</string>
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/EqualizerFragmentDialog.kt b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/EqualizerFragmentDialog.kt
index 255e661e51..16bddc14d5 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/EqualizerFragmentDialog.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/EqualizerFragmentDialog.kt
@@ -25,6 +25,8 @@ package org.videolan.vlc.gui.dialogs
 
 import android.animation.LayoutTransition
 import android.os.Bundle
+import android.text.Editable
+import android.text.TextWatcher
 import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
@@ -167,6 +169,20 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
         binding.edit.setOnClickListener {
             viewModel.createCustomEqualizer(requireActivity())
         }
+
+        binding.presetTitleEdit.addTextChangedListener(object : TextWatcher {
+            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { }
+            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
+                if (s.toString() == viewModel.getCurrentEqualizer().equalizerEntry.name) return
+                if (!viewModel.isNameAllowed(s.toString())) {
+                    binding.presetTitleEdit.error = getString(R.string.edit_eq_name_not_allowed)
+                } else {
+                    viewModel.updateEqualizerName(requireActivity(), s.toString())
+                    binding.presetTitleEdit.error = null
+                }
+            }
+            override fun afterTextChanged(s: Editable?) { }
+        })
         updateEnabledState()
 
     }
@@ -191,6 +207,7 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
                 viewModel.clearHistory()
                 binding.undo.isEnabled = false
                 viewModel.currentEqualizerId = it.tag as Long
+                binding.presetTitleEdit.clearFocus()
                 fillPreamp()
                 fillBands()
                 selectPreset()
@@ -259,7 +276,7 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
      */
     fun selectPreset() {
         updateEqualizer()
-        binding.name = viewModel.getCurrentEqualizer().equalizerEntry.name
+        if (!binding.presetTitleEdit.hasFocus()) binding.name = viewModel.getCurrentEqualizer().equalizerEntry.name
         binding.custom = getEqualizerType() == TYPE_CUSTOM
         val selectedChip = binding.equalizerPresets.findViewWithTag<Chip>(viewModel.getCurrentEqualizer().equalizerEntry.id)
         binding.equalizerPresets.check(selectedChip.id)
diff --git a/application/vlc-android/src/org/videolan/vlc/viewmodels/EqualizerViewModel.kt b/application/vlc-android/src/org/videolan/vlc/viewmodels/EqualizerViewModel.kt
index dcbb509e9a..314c75b4bb 100644
--- a/application/vlc-android/src/org/videolan/vlc/viewmodels/EqualizerViewModel.kt
+++ b/application/vlc-android/src/org/videolan/vlc/viewmodels/EqualizerViewModel.kt
@@ -134,6 +134,28 @@ class EqualizerViewModel(context: Context, private val equalizerRepository: Equa
             presetToDelete = null
         }
     }
+
+    /**
+     * Is name allowed
+     *
+     * @param name the name to check
+     * @return true if name is not empty and not already used
+     */
+    fun isNameAllowed(name: String): Boolean {
+        return name.isNotBlank() && !equalizerEntries.value!!.any { it.equalizerEntry.name == name }
+    }
+
+    /**
+     * Update equalizer name
+     *
+     * @param context the context
+     * @param name the new name
+     */
+    fun updateEqualizerName(context: Context, name: String) = viewModelScope.launch(Dispatchers.IO) {
+        val currentEqualizer = getCurrentEqualizer()
+        val newEq = currentEqualizer.copy(equalizerEntry = currentEqualizer.equalizerEntry.copy(name = name).apply { id = currentEqualizer.equalizerEntry.id })
+        equalizerRepository.addOrUpdateEqualizerWithBands(context, newEq)
+    }
 }
 
 class EqualizerViewModelFactory(private val context: Context, private val repository: EqualizerRepository) : ViewModelProvider.Factory {



More information about the Android mailing list