[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