[Android] Add a "new equalizer" button in the equalizer dialog

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


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Thu Jun 19 15:12:29 2025 +0200| [8cb65a585f43869c9917fed97aa57f2129f95884] | committer: Nicolas Pomepuy

Add a "new equalizer" button in the equalizer dialog

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

 .../resources/src/main/res/values/strings.xml      |  2 ++
 .../vlc-android/res/layout/dialog_equalizer.xml    | 19 ++++++++++++++++-
 .../vlc/gui/dialogs/EqualizerFragmentDialog.kt     |  4 ++++
 .../videolan/vlc/viewmodels/EqualizerViewModel.kt  | 24 +++++++++++++++++++---
 4 files changed, 45 insertions(+), 4 deletions(-)

diff --git a/application/resources/src/main/res/values/strings.xml b/application/resources/src/main/res/values/strings.xml
index ddfcb50adb..410dec9f0b 100644
--- a/application/resources/src/main/res/values/strings.xml
+++ b/application/resources/src/main/res/values/strings.xml
@@ -144,6 +144,8 @@
     <string name="equalizer">Equalizer</string>
     <string name="import_equalizer">Import equalizer</string>
     <string name="equalizer_exported">Equalizer exported to %s</string>
+    <string name="equalizer_copy_template">(copy%s)</string>
+    <string name="new_equalizer_copy_template">New equalizer%s</string>
     <string name="show_all">Show all</string>
     <string name="hide_all">Hide all</string>
     <string name="all_albums">All albums</string>
diff --git a/application/vlc-android/res/layout/dialog_equalizer.xml b/application/vlc-android/res/layout/dialog_equalizer.xml
index af7375a5d7..bc1ff22354 100644
--- a/application/vlc-android/res/layout/dialog_equalizer.xml
+++ b/application/vlc-android/res/layout/dialog_equalizer.xml
@@ -64,7 +64,7 @@
                     android:layout_marginTop="8dp"
                     android:layout_marginEnd="8dp"
                     android:text="@string/equalizer"
-                    app:layout_constraintEnd_toStartOf="@+id/equalizer_settings"
+                    app:layout_constraintEnd_toStartOf="@+id/equalizer_add"
                     app:layout_constraintStart_toStartOf="parent"
                     app:layout_constraintTop_toTopOf="parent" />
 
@@ -99,6 +99,23 @@
                     app:srcCompat="@drawable/ic_settings"
                     app:tint="?attr/colorControlNormal" />
 
+            <androidx.appcompat.widget.AppCompatImageView
+                    android:id="@+id/equalizer_add"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginEnd="8dp"
+                    android:background="?attr/actionBarItemBackground"
+                    android:clickable="true"
+                    android:contentDescription="@string/preferences"
+                    android:focusable="true"
+                    android:padding="12dp"
+                    app:layout_constraintBottom_toBottomOf="@+id/eq_title"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintEnd_toStartOf="@+id/equalizer_settings"
+                    app:layout_constraintTop_toTopOf="@+id/eq_title"
+                    app:srcCompat="@drawable/ic_add"
+                    app:tint="?attr/colorControlNormal" />
+
             <HorizontalScrollView
                     android:id="@+id/equalizer_presets_container"
                     android:layout_width="0dp"
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 ce85a94480..2a328cf314 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
@@ -165,6 +165,10 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
                 startActivity(Intent(requireActivity(), EqualizerSettingsActivity::class.java))
         }
 
+        binding.equalizerAdd.setOnClickListener {
+            viewModel.createCustomEqualizer(requireActivity(), true)
+        }
+
         binding.undo.setOnClickListener {
             viewModel.undoFromHistory(requireActivity())
             updateBars()
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 41f3ca66d8..edc07ca37b 100644
--- a/application/vlc-android/src/org/videolan/vlc/viewmodels/EqualizerViewModel.kt
+++ b/application/vlc-android/src/org/videolan/vlc/viewmodels/EqualizerViewModel.kt
@@ -47,6 +47,7 @@ import org.videolan.vlc.gui.dialogs.EqualizerFragmentDialog
 import org.videolan.vlc.gui.helpers.UiTools
 import org.videolan.vlc.gui.helpers.hf.StoragePermissionsDelegate.Companion.getWritePermission
 import org.videolan.vlc.mediadb.models.EqualizerBand
+import org.videolan.vlc.mediadb.models.EqualizerEntry
 import org.videolan.vlc.mediadb.models.EqualizerWithBands
 import org.videolan.vlc.repository.EqualizerRepository
 import org.videolan.vlc.util.JsonUtil
@@ -143,9 +144,26 @@ class EqualizerViewModel(context: Context, private val equalizerRepository: Equa
         equalizerRepository.addOrUpdateEqualizerWithBands(context, getCurrentEqualizer().copy(bands = bands.sortedBy { it.index }))
     }
 
-    fun createCustomEqualizer(context: Context) = viewModelScope.launch(Dispatchers.IO) {
-        val currentEqualizer = getCurrentEqualizer()
-        val newEq = currentEqualizer.copy(equalizerEntry = currentEqualizer.equalizerEntry.copy(presetIndex = -1, name = currentEqualizer.equalizerEntry.name + " (copy)").apply { id = 0 })
+    fun createCustomEqualizer(context: Context, fromScratch: Boolean = false) = viewModelScope.launch(Dispatchers.IO) {
+        val currentEqualizer = if (fromScratch)
+                EqualizerWithBands(EqualizerEntry("", 0F, -1, false), buildList { for (i in 0 until bandCount) add(EqualizerBand(i, 0F)) })
+            else
+                getCurrentEqualizer()
+
+        var newNameTemplate = if (fromScratch)
+            context.getString(R.string.new_equalizer_copy_template, "")
+        else
+            currentEqualizer.equalizerEntry.name + " " + context.getString(R.string.equalizer_copy_template, "")
+
+        var i = 0
+        while (!isNameAllowed(newNameTemplate)) {
+            ++i
+            newNameTemplate = if (fromScratch)
+                context.getString(R.string.new_equalizer_copy_template, " $i")
+            else
+                currentEqualizer.equalizerEntry.name + " " + context.getString(R.string.equalizer_copy_template, " $i")
+        }
+        val newEq = currentEqualizer.copy(equalizerEntry = currentEqualizer.equalizerEntry.copy(presetIndex = -1, name = newNameTemplate).apply { id = 0 })
         currentEqualizerId = equalizerRepository.addOrUpdateEqualizerWithBands(context, newEq)
     }
 



More information about the Android mailing list