[Android] Fix the equalizer migration

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


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Mon Jun 30 14:50:48 2025 +0200| [14d42e2b77d70e439d8d3f8c93ce9370c1cbca44] | committer: Nicolas Pomepuy

Fix the equalizer migration

Make sure all the previous custom eq are re-imported as well as the
possible unsaved current one. Also properly set the current equalizer
and remove all the obsolete shared preferences

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

 .../java/org/videolan/vlc/database/EqualizerDao.kt |  4 ++
 .../videolan/vlc/repository/EqualizerRepository.kt |  5 +++
 .../src/org/videolan/vlc/util/VersionMigration.kt  | 52 ++++++++++++++++++++--
 3 files changed, 58 insertions(+), 3 deletions(-)

diff --git a/application/mediadb/src/main/java/org/videolan/vlc/database/EqualizerDao.kt b/application/mediadb/src/main/java/org/videolan/vlc/database/EqualizerDao.kt
index 46ff121b4d..b50401c1cd 100644
--- a/application/mediadb/src/main/java/org/videolan/vlc/database/EqualizerDao.kt
+++ b/application/mediadb/src/main/java/org/videolan/vlc/database/EqualizerDao.kt
@@ -52,6 +52,10 @@ interface EqualizerDao {
     @Query("SELECT * FROM equalizer_entry ORDER BY preset_index ASC")
     fun getAllEqualizerEntries(): Flow<List<EqualizerWithBands>>
 
+    @Transaction
+    @Query("SELECT * FROM equalizer_entry ORDER BY preset_index ASC")
+    fun getAllEqualizerEntriesSync(): List<EqualizerWithBands>
+
     @Transaction
     @Query("SELECT * FROM equalizer_entry WHERE is_disabled = 0 ORDER BY preset_index ASC LIMIT 1")
     fun getFirstEqualizerEntry(): EqualizerWithBands
diff --git a/application/vlc-android/src/org/videolan/vlc/repository/EqualizerRepository.kt b/application/vlc-android/src/org/videolan/vlc/repository/EqualizerRepository.kt
index 9c50d439ff..d75942ca4e 100644
--- a/application/vlc-android/src/org/videolan/vlc/repository/EqualizerRepository.kt
+++ b/application/vlc-android/src/org/videolan/vlc/repository/EqualizerRepository.kt
@@ -34,6 +34,7 @@ import org.videolan.vlc.database.MediaDatabase
 import org.videolan.vlc.mediadb.models.EqualizerEntry
 import org.videolan.vlc.mediadb.models.EqualizerWithBands
 import androidx.core.content.edit
+import androidx.lifecycle.asLiveData
 
 class EqualizerRepository(private val equalizerDao: EqualizerDao, private val coroutineContextProvider: CoroutineContextProvider = CoroutineContextProvider()) {
 
@@ -45,6 +46,10 @@ class EqualizerRepository(private val equalizerDao: EqualizerDao, private val co
         Settings.getInstance(context).edit { putLong(KEY_CURRENT_EQUALIZER_ID, it.equalizerEntry.id) }
     }
 
+    fun isNameAllowed(name: String): Boolean {
+        return name.isNotBlank() && !equalizerDao.getAllEqualizerEntriesSync().any { it.equalizerEntry.name == name }
+    }
+
     /**
      * Add or update equalizer with bands
      *
diff --git a/application/vlc-android/src/org/videolan/vlc/util/VersionMigration.kt b/application/vlc-android/src/org/videolan/vlc/util/VersionMigration.kt
index 2c2fb9234d..7a1927d63f 100644
--- a/application/vlc-android/src/org/videolan/vlc/util/VersionMigration.kt
+++ b/application/vlc-android/src/org/videolan/vlc/util/VersionMigration.kt
@@ -38,6 +38,7 @@ import org.videolan.medialibrary.interfaces.media.Playlist
 import org.videolan.resources.AndroidDevices
 import org.videolan.resources.util.getFromMl
 import org.videolan.tools.KEY_APP_THEME
+import org.videolan.tools.KEY_CURRENT_EQUALIZER_ID
 import org.videolan.tools.KEY_CURRENT_MAJOR_VERSION
 import org.videolan.tools.KEY_CURRENT_SETTINGS_VERSION_AFTER_LIBVLC_INSTANTIATION
 import org.videolan.tools.KEY_CURRENT_SETTINGS_VERSION
@@ -56,6 +57,7 @@ import org.videolan.tools.VIDEO_HUD_TIMEOUT
 import org.videolan.tools.coerceInOrDefault
 import org.videolan.tools.putSingle
 import org.videolan.tools.toInt
+import org.videolan.vlc.R
 import org.videolan.vlc.gui.helpers.DefaultPlaybackAction
 import org.videolan.vlc.gui.helpers.DefaultPlaybackActionMediaType
 import org.videolan.vlc.gui.onboarding.ONBOARDING_DONE_KEY
@@ -455,6 +457,8 @@ object VersionMigration {
         val equalizerRepository = EqualizerRepository.getInstance(context)
         val count = MediaPlayer.Equalizer.getPresetCount()
         val bandCount = MediaPlayer.Equalizer.getBandCount()
+
+        // First, add all VLC default presets
         for (i in 0 until count) {
             val equalizer = MediaPlayer.Equalizer.createFromPreset(i)
             val bands = buildList {
@@ -466,10 +470,11 @@ object VersionMigration {
             equalizerRepository.addOrUpdateEqualizerWithBands(context, eqEntity)
         }
 
-        for ((key) in Settings.getInstance(context).all) {
+        // Then, add all custom presets
+        for ((key) in settings.all) {
             if (key.startsWith("custom_equalizer_")) {
                 val bands = Preferences.getFloatArray(settings, key)
-                val bandCount = MediaPlayer.Equalizer.getBandCount()
+                var isCurrent = settings.getString("equalizer_values", "") == settings.getString(key, "")
                 if (bands!!.size == bandCount + 1) {
                     val name = key.replace("custom_equalizer_", "").replace("_", " ")
                     val bandList = buildList {
@@ -478,12 +483,53 @@ object VersionMigration {
                         }
                     }
                     val eqEntity = EqualizerWithBands(EqualizerEntry(name, bands[0]), bandList)
-                    equalizerRepository.addOrUpdateEqualizerWithBands(context, eqEntity)
+                    val id = equalizerRepository.addOrUpdateEqualizerWithBands(context, eqEntity)
+                    if (isCurrent) settings.edit {
+                        putLong(KEY_CURRENT_EQUALIZER_ID, id)
+                        remove("equalizer_values")
+                        remove("equalizer_set")
+                    }
                 }
                 settings.edit { remove(key) }
             }
         }
 
+        //check if previous unsaved equalizer is still set
+        if (settings.contains("equalizer_values") && settings.contains("equalizer_set")) {
+            val bands = Preferences.getFloatArray(settings, "equalizer_values")
+            if (bands!!.size == bandCount + 1) {
+                val oldName = settings.getString("equalizer_set", "")?.replace("custom_equalizer_", "")?.replace("_", " ") ?: context.getString(R.string.new_equalizer_copy_template)
+                var name = oldName
+                val fromScratch = settings.getString("equalizer_set", "")?.trim()?.isEmpty() != false
+                val bandList = buildList {
+                    for (j in 0 until bandCount) {
+                        add(EqualizerBand(j, bands[j + 1]))
+                    }
+                }
+
+                var i = 0
+                while (!equalizerRepository.isNameAllowed(name)) {
+                    ++i
+                    name = if (fromScratch)
+                        context.getString(R.string.new_equalizer_copy_template, " $i")
+                    else
+                        oldName + " " + context.getString(R.string.equalizer_copy_template, " $i")
+                }
+
+                val eqEntity = EqualizerWithBands(EqualizerEntry(name, bands[0]), bandList)
+                val id = equalizerRepository.addOrUpdateEqualizerWithBands(context, eqEntity)
+                settings.edit {
+                    putLong(KEY_CURRENT_EQUALIZER_ID, id)
+                }
+            }
+        }
+
+        //finally, remove all the old shared preferences
+        settings.edit {
+            remove("equalizer_values")
+            remove("equalizer_set")
+            remove("equalizer_saved")
+        }
     }
 
     /**



More information about the Android mailing list