[Android] Equalizer settings: add option menu with show/hide all

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


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Wed Jun 18 13:43:52 2025 +0200| [5bc2711175d15018e7043f6a6f846f2f7da1475f] | committer: Nicolas Pomepuy

Equalizer settings: add option menu with show/hide all

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

 .../resources/src/main/res/drawable/ic_import.xml  | 12 +++++
 .../src/main/res/drawable/ic_options_equalizer.xml | 11 +++++
 .../resources/src/main/res/values/strings.xml      |  3 ++
 .../res/menu/equalizer_settings_option.xml         | 54 ++++++++++++++++++++++
 .../videolan/vlc/gui/EqualizerSettingsActivity.kt  | 25 +++++++++-
 5 files changed, 104 insertions(+), 1 deletion(-)

diff --git a/application/resources/src/main/res/drawable/ic_import.xml b/application/resources/src/main/res/drawable/ic_import.xml
new file mode 100644
index 0000000000..8adb3355cc
--- /dev/null
+++ b/application/resources/src/main/res/drawable/ic_import.xml
@@ -0,0 +1,12 @@
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="960"
+        android:viewportHeight="960">
+    <path
+            tools:fillColor="#ffffff"
+            android:fillColor="?attr/colorControlNormal"
+            android:pathData="m440,474 l-75,75q-12,12 -28.5,11.5T308,548q-11,-12 -11.5,-28t11.5,-28l144,-144q6,-6 13,-8.5t15,-2.5q8,0 15,2.5t13,8.5l144,144q12,12 11.5,28T652,548q-12,12 -28.5,12.5T595,549l-75,-75v286q0,17 -11.5,28.5T480,800q-17,0 -28.5,-11.5T440,760v-286ZM160,320v-80q0,-33 23.5,-56.5T240,160h480q33,0 56.5,23.5T800,240v80q0,17 -11.5,28.5T760,360q-17,0 -28.5,-11.5T720,320v-80L240,240v80q0,17 -11.5,28.5T200,360q-17,0 -28.5,-11.5T160,320Z" />
+</vector>
diff --git a/application/resources/src/main/res/drawable/ic_options_equalizer.xml b/application/resources/src/main/res/drawable/ic_options_equalizer.xml
new file mode 100644
index 0000000000..7923f5365e
--- /dev/null
+++ b/application/resources/src/main/res/drawable/ic_options_equalizer.xml
@@ -0,0 +1,11 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="960"
+        android:viewportHeight="960">
+    <path
+            tools:fillColor="#ffffff"
+            android:fillColor="?attr/colorControlNormal"
+            android:pathData="M240,800q-17,0 -28.5,-11.5T200,760v-240h-40q-17,0 -28.5,-11.5T120,480q0,-17 11.5,-28.5T160,440h160q17,0 28.5,11.5T360,480q0,17 -11.5,28.5T320,520h-40v240q0,17 -11.5,28.5T240,800ZM240,360q-17,0 -28.5,-11.5T200,320v-120q0,-17 11.5,-28.5T240,160q17,0 28.5,11.5T280,200v120q0,17 -11.5,28.5T240,360ZM400,360q-17,0 -28.5,-11.5T360,320q0,-17 11.5,-28.5T400,280h40v-80q0,-17 11.5,-28.5T480,160q17,0 28.5,11.5T520,200v80h40q17,0 28.5,11.5T600,320q0,17 -11.5,28.5T560,360L400,360ZM480,800q-17,0 -28.5,-11.5T440,760v-280q0,-17 11.5,-28.5T480,440q17,0 28.5,11.5T520,480v280q0,17 -11.5,28.5T480,800ZM720,800q-17,0 -28.5,-11.5T680,760v-80h-40q-17,0 -28.5,-11.5T600,640q0,-17 11.5,-28.5T640,600h160q17,0 28.5,11.5T840,640q0,17 -11.5,28.5T800,680h-40v80q0,17 -11.5,28.5T720,800ZM720,520q-17,0 -28.5,-11.5T680,480v-280q0,-17 11.5,-28.5T720,160q17,0 28.5,11.5T760,200v280q0,17 -11.5,28.5T720,520Z" />
+</vector>
diff --git a/application/resources/src/main/res/values/strings.xml b/application/resources/src/main/res/values/strings.xml
index c8e08a6afa..3a61c00f83 100644
--- a/application/resources/src/main/res/values/strings.xml
+++ b/application/resources/src/main/res/values/strings.xml
@@ -136,6 +136,9 @@
     <string name="video">Video</string>
     <string name="bookmarks">Bookmarks</string>
     <string name="equalizer">Equalizer</string>
+    <string name="import_equalizer">Import equalizer</string>
+    <string name="show_all">Show all</string>
+    <string name="hide_all">Hide all</string>
     <string name="all_albums">All albums</string>
     <string name="genres">Genres</string>
     <string name="playlists">Playlists</string>
diff --git a/application/vlc-android/res/menu/equalizer_settings_option.xml b/application/vlc-android/res/menu/equalizer_settings_option.xml
new file mode 100644
index 0000000000..01e77f01f4
--- /dev/null
+++ b/application/vlc-android/res/menu/equalizer_settings_option.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ *************************************************************************
+  ~  widget_configure_option.xml
+  ~ **************************************************************************
+  ~ Copyright © 2022 VLC authors and VideoLAN
+  ~ Author: Nicolas POMEPUY
+  ~ This program is free software; you can redistribute it and/or modify
+  ~ it under the terms of the GNU General Public License as published by
+  ~ the Free Software Foundation; either version 2 of the License, or
+  ~ (at your option) any later version.
+  ~
+  ~ This program is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  ~ GNU General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU General Public License
+  ~ along with this program; if not, write to the Free Software
+  ~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+  ~ ***************************************************************************
+  ~
+  ~
+  -->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+      xmlns:vlc="http://schemas.android.com/apk/res-auto">
+
+    <item
+            android:orderInCategory="1"
+            android:id="@+id/show_equalizer"
+            android:icon="@drawable/ic_options_equalizer"
+            android:title="@string/equalizer"
+            vlc:showAsAction="ifRoom"/>
+    <item
+            android:orderInCategory="2"
+            android:id="@+id/equalizer_import"
+            android:icon="@drawable/ic_import"
+            android:title="@string/import_equalizer"
+            vlc:showAsAction="ifRoom"/>
+
+    <item
+            android:orderInCategory="2"
+            android:id="@+id/equalizer_show_all"
+            android:title="@string/show_all"
+            vlc:showAsAction="never"/>
+    <item
+            android:orderInCategory="2"
+            android:id="@+id/equalizer_hide_all"
+            android:title="@string/hide_all"
+            vlc:showAsAction="never"/>
+
+
+</menu>
\ No newline at end of file
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/EqualizerSettingsActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/EqualizerSettingsActivity.kt
index f5527d4d1e..ca76a16bd5 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/EqualizerSettingsActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/EqualizerSettingsActivity.kt
@@ -11,6 +11,7 @@ import android.os.Bundle
 import android.util.Log
 import android.util.TypedValue
 import android.view.LayoutInflater
+import android.view.Menu
 import android.view.MenuItem
 import android.view.View
 import android.view.ViewGroup
@@ -38,6 +39,7 @@ import org.videolan.vlc.BuildConfig
 import org.videolan.vlc.R
 import org.videolan.vlc.databinding.EqualizerSettingItemBinding
 import org.videolan.vlc.databinding.EqualizerSettingsActivityBinding
+import org.videolan.vlc.gui.dialogs.EqualizerFragmentDialog
 import org.videolan.vlc.gui.helpers.SelectorViewHolder
 import org.videolan.vlc.gui.helpers.UiTools
 import org.videolan.vlc.mediadb.models.EqualizerWithBands
@@ -94,9 +96,17 @@ class EqualizerSettingsActivity : BaseActivity() {
 
     }
 
+    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
+        menuInflater.inflate(R.menu.equalizer_settings_option, menu)
+        return true
+    }
+
     override fun onOptionsItemSelected(item: MenuItem): Boolean {
         when (item.itemId) {
             android.R.id.home -> finish()
+            R.id.show_equalizer -> EqualizerFragmentDialog().show(supportFragmentManager, "equalizer")
+            R.id.equalizer_show_all -> model.showAll(this)
+            R.id.equalizer_hide_all -> model.hideAll(this)
         }
         return super.onOptionsItemSelected(item)
     }
@@ -105,6 +115,7 @@ class EqualizerSettingsActivity : BaseActivity() {
 
 class EqualizerSettingsModel(private val equalizerRepository: EqualizerRepository) : ViewModel() {
     private var oldEqualizer: EqualizerWithBands? = null
+    val equalizerEntries = equalizerRepository.equalizerEntriesUnfiltered.asLiveData()
 
     fun enable(context: Context, equalizer: EqualizerWithBands) = viewModelScope.launch(Dispatchers.IO) {
         equalizerRepository.addOrUpdateEqualizerWithBands(context, equalizer.copy(equalizerEntry = equalizer.equalizerEntry.copy(isDisabled = false).apply { id = equalizer.equalizerEntry.id }))
@@ -127,7 +138,19 @@ class EqualizerSettingsModel(private val equalizerRepository: EqualizerRepositor
 //todo add export
     }
 
-    val equalizerEntries = equalizerRepository.equalizerEntriesUnfiltered.asLiveData()
+    fun showAll(context: Context) = viewModelScope.launch(Dispatchers.IO) {
+        equalizerEntries.value?.forEach {
+            if (it.equalizerEntry.presetIndex != -1 && it.equalizerEntry.isDisabled)
+            equalizerRepository.addOrUpdateEqualizerWithBands(context, it.copy(equalizerEntry = it.equalizerEntry.copy(isDisabled = false).apply { id = it.equalizerEntry.id }))
+        }
+    }
+
+    fun hideAll(context: Context) = viewModelScope.launch(Dispatchers.IO) {
+        equalizerEntries.value?.forEach {
+            if (it.equalizerEntry.presetIndex != -1 && !it.equalizerEntry.isDisabled)
+            equalizerRepository.addOrUpdateEqualizerWithBands(context, it.copy(equalizerEntry = it.equalizerEntry.copy(isDisabled = true).apply { id = it.equalizerEntry.id }))
+        }
+    }
 }
 
 class EqualizerSettingsModelFactory(private val context: Context, private val repository: EqualizerRepository) : ViewModelProvider.Factory {



More information about the Android mailing list