[Android] Write all the equalizer presets in the DB

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


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Fri Jan 12 09:01:11 2024 +0100| [98b5e8b37f561da9df054b03c519d621dc463f20] | committer: Nicolas Pomepuy

Write all the equalizer presets in the DB

> https://code.videolan.org/videolan/vlc-android/commit/98b5e8b37f561da9df054b03c519d621dc463f20
---

 .../org/videolan/mobile/app/AppSetupDelegate.kt    |  1 +
 .../src/main/java/org/videolan/tools/Settings.kt   |  1 +
 .../src/org/videolan/vlc/util/VersionMigration.kt  | 62 ++++++++++++++++++++++
 3 files changed, 64 insertions(+)

diff --git a/application/app/src/main/java/org/videolan/mobile/app/AppSetupDelegate.kt b/application/app/src/main/java/org/videolan/mobile/app/AppSetupDelegate.kt
index 9ee88d6590..cb96f03444 100644
--- a/application/app/src/main/java/org/videolan/mobile/app/AppSetupDelegate.kt
+++ b/application/app/src/main/java/org/videolan/mobile/app/AppSetupDelegate.kt
@@ -128,6 +128,7 @@ class AppSetupDelegate : AppDelegate,
         launch(Dispatchers.IO) innerLaunch@ {
             if (!VLCInstance.testCompatibleCPU(AppContextProvider.appContext)) return at innerLaunch
             Dialog.setCallbacks(VLCInstance.getInstance(this at backgroundInit), DialogDelegate)
+            VersionMigration.migrateVersionAfterLibVLC(this at backgroundInit)
         }
         if (!AndroidDevices.isAndroidTv) sendBroadcast(Intent(MiniPlayerAppWidgetProvider.ACTION_WIDGET_INIT).apply {
             component = ComponentName(appContextProvider.appContext, MiniPlayerAppWidgetProvider::class.java)
diff --git a/application/tools/src/main/java/org/videolan/tools/Settings.kt b/application/tools/src/main/java/org/videolan/tools/Settings.kt
index 451c947fa7..482e707b8c 100644
--- a/application/tools/src/main/java/org/videolan/tools/Settings.kt
+++ b/application/tools/src/main/java/org/videolan/tools/Settings.kt
@@ -118,6 +118,7 @@ object Settings : SingletonHolder<SharedPreferences, Context>({ init(it.applicat
 }
 
 const val KEY_CURRENT_SETTINGS_VERSION = "current_settings_version"
+const val KEY_CURRENT_SETTINGS_VERSION_AFTER_LIBVLC_INSTANTIATION = "current_settings_libvlc_version"
 const val KEY_CURRENT_MAJOR_VERSION = "key_current_major_version"
 
 // Keys
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 9d57062cc7..3058ee6c40 100644
--- a/application/vlc-android/src/org/videolan/vlc/util/VersionMigration.kt
+++ b/application/vlc-android/src/org/videolan/vlc/util/VersionMigration.kt
@@ -32,12 +32,14 @@ import androidx.appcompat.app.AppCompatDelegate
 import androidx.core.content.edit
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.withContext
+import org.videolan.libvlc.MediaPlayer
 import org.videolan.medialibrary.interfaces.Medialibrary
 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_MAJOR_VERSION
+import org.videolan.tools.KEY_CURRENT_SETTINGS_VERSION_AFTER_LIBVLC_INSTANTIATION
 import org.videolan.tools.KEY_CURRENT_SETTINGS_VERSION
 import org.videolan.tools.KEY_PLAYBACK_SPEED_AUDIO_GLOBAL
 import org.videolan.tools.KEY_PLAYBACK_SPEED_AUDIO_GLOBAL_VALUE
@@ -47,6 +49,7 @@ import org.videolan.tools.KEY_SUBTITLES_COLOR
 import org.videolan.tools.KEY_VIDEO_CONFIRM_RESUME
 import org.videolan.tools.PLAYLIST_MODE_AUDIO
 import org.videolan.tools.PLAYLIST_MODE_VIDEO
+import org.videolan.tools.Preferences
 import org.videolan.tools.SCREENSHOT_MODE
 import org.videolan.tools.Settings
 import org.videolan.tools.VIDEO_HUD_TIMEOUT
@@ -57,10 +60,15 @@ import org.videolan.vlc.gui.helpers.DefaultPlaybackAction
 import org.videolan.vlc.gui.helpers.DefaultPlaybackActionMediaType
 import org.videolan.vlc.gui.onboarding.ONBOARDING_DONE_KEY
 import org.videolan.vlc.isVLC4
+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 java.io.File
 import java.io.IOException
 
 private const val CURRENT_VERSION = 16
+private const val CURRENT_VERSION_LIBVLC = 1
 
 object VersionMigration {
 
@@ -147,6 +155,21 @@ object VersionMigration {
         settings.putSingle(KEY_CURRENT_MAJOR_VERSION, currentMajorVersion)
     }
 
+
+    /**
+     * Same migration as before but once the libvlc instance has been setup
+     *
+     * @param context The context used for the migration
+     */
+    fun migrateVersionAfterLibVLC(context: Context) {
+        val settings = Settings.getInstance(context)
+        val lastVersion = settings.getInt(KEY_CURRENT_SETTINGS_VERSION_AFTER_LIBVLC_INSTANTIATION, 0)
+        if (lastVersion < 1) {
+            migrateToVersionLibvlc1(context, settings)
+        }
+        settings.putSingle(KEY_CURRENT_SETTINGS_VERSION_AFTER_LIBVLC_INSTANTIATION, CURRENT_VERSION_LIBVLC)
+    }
+
     private fun migrateToVersion1(settings: SharedPreferences) {
         Log.i(this::class.java.simpleName, "Migrating preferences to Version 1")
         settings.edit {
@@ -424,6 +447,45 @@ object VersionMigration {
         }
     }
 
+    /**
+     * Migrate the equalizer to room
+     */
+    private fun migrateToVersionLibvlc1(context: Context, settings: SharedPreferences) {
+        Log.i(this::class.java.simpleName, "Libvlc migration to Version 1: Migrate the equalizer entries to Room DB")
+        val equalizerRepository = EqualizerRepository.getInstance(context)
+        val count = MediaPlayer.Equalizer.getPresetCount()
+        val bandCount = MediaPlayer.Equalizer.getBandCount()
+        for (i in 0 until count) {
+            val equalizer = MediaPlayer.Equalizer.createFromPreset(i)
+            val bands = buildList {
+                for (j in 0 until bandCount) {
+                    add(EqualizerBand(j,equalizer.getAmp(j)))
+                }
+            }
+            val eqEntity = EqualizerWithBands(EqualizerEntry(MediaPlayer.Equalizer.getPresetName(i), equalizer.preAmp, i), bands)
+            equalizerRepository.addOrUpdateEqualizer(eqEntity)
+        }
+
+        for ((key) in Settings.getInstance(context).all) {
+            if (key.startsWith("custom_equalizer_")) {
+                val bands = Preferences.getFloatArray(settings, key)
+                val bandCount = MediaPlayer.Equalizer.getBandCount()
+                if (bands!!.size == bandCount + 1) {
+                    val name = key.replace("custom_equalizer_", "").replace("_", " ")
+                    val bandList = buildList {
+                        for (j in 0 until bandCount) {
+                            add(EqualizerBand(j,bands[j+1]))
+                        }
+                    }
+                    val eqEntity = EqualizerWithBands(EqualizerEntry(name, bands[0]), bandList)
+                    equalizerRepository.addOrUpdateEqualizer(eqEntity)
+                }
+                settings.edit { remove(key) }
+            }
+        }
+
+    }
+
     /**
      * Migration to vlc 4
      * ⚠️⚠️⚠️ This should not be destructive! Any first install will run this.



More information about the Android mailing list