[Android] Properly save and restore the equalizer in the settings backup/export

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


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Wed Jul 23 14:55:30 2025 +0200| [6d861014d3fc6f56d5826e05223e335119b9cc10] | committer: Nicolas Pomepuy

Properly save and restore the equalizer in the settings backup/export

> https://code.videolan.org/videolan/vlc-android/commit/6d861014d3fc6f56d5826e05223e335119b9cc10
---

 .../vlc/gui/preferences/search/PreferenceParser.kt |  8 ++++--
 .../src/org/videolan/vlc/util/EqualizerUtil.kt     | 30 +++++++++++++++-------
 2 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/application/vlc-android/src/org/videolan/vlc/gui/preferences/search/PreferenceParser.kt b/application/vlc-android/src/org/videolan/vlc/gui/preferences/search/PreferenceParser.kt
index 4a0f00f7e2..bcccb69a48 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/preferences/search/PreferenceParser.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/preferences/search/PreferenceParser.kt
@@ -80,6 +80,8 @@ import org.videolan.vlc.providers.medialibrary.PlaylistsProvider
 import org.videolan.vlc.providers.medialibrary.TracksProvider
 import org.videolan.vlc.providers.medialibrary.VideoGroupsProvider
 import org.videolan.vlc.providers.medialibrary.VideosProvider
+import org.videolan.vlc.util.EqualizerExport
+import org.videolan.vlc.util.EqualizerUtil
 import org.videolan.vlc.util.FileUtils
 import org.videolan.vlc.util.VersionMigration
 import org.videolan.vlc.util.share
@@ -330,7 +332,7 @@ object PreferenceParser {
                     settingsEntries.add(SettingEntry(setting.key, it, SettingType.getFromAny(it)))
                 }
         }
-        val settingsBackup = SettingsBackup(settingsEntries, VersionMigration.getCurrentVersion())
+        val settingsBackup = SettingsBackup(settingsEntries, EqualizerUtil.getEqualizerExport(context), VersionMigration.getCurrentVersion())
         val moshi = Moshi.Builder().build()
         val jsonAdapter: JsonAdapter<SettingsBackup> = moshi.adapter(SettingsBackup::class.java)
         return jsonAdapter.toJson(settingsBackup)!!
@@ -525,6 +527,8 @@ object PreferenceParser {
                 }
             }
 
+            EqualizerUtil.importAll(activity, savedSettings.equalizers, null)
+
             //wait a bit for the file to be available to be deleted
             delay(100)
 
@@ -544,7 +548,7 @@ data class PreferenceItem(val key: String, val parentScreen: Int, val title: Str
 
 
 
-class SettingsBackup(val settings: List<SettingEntry>, val version: Int)
+class SettingsBackup(val settings: List<SettingEntry>, val equalizers: EqualizerExport, val version: Int)
 
 class SettingEntry (val key: String, val value: Any, val type: SettingType)
 
diff --git a/application/vlc-android/src/org/videolan/vlc/util/EqualizerUtil.kt b/application/vlc-android/src/org/videolan/vlc/util/EqualizerUtil.kt
index aa3e4c4bc7..6ea8ad548f 100644
--- a/application/vlc-android/src/org/videolan/vlc/util/EqualizerUtil.kt
+++ b/application/vlc-android/src/org/videolan/vlc/util/EqualizerUtil.kt
@@ -68,18 +68,18 @@ object EqualizerUtil {
         }
     }
 
-    fun getEqualizerExportString(context: Context): String {
+    fun getEqualizerExport(context: Context): EqualizerExport {
         val customEqualizers = EqualizerRepository.getInstance(context).getCustomEqualizers()
         val defaultEqualizers = EqualizerRepository.getInstance(context).getDefaultEqualizers()
-        val equalizerExport = EqualizerExport(
+        return EqualizerExport(
             customEqualizers,
             EqualizerRepository.getInstance(context).getCurrentEqualizer(context).equalizerEntry.name,
             defaultEqualizers.map { EqualizerState(it.equalizerEntry.name, it.equalizerEntry.isDisabled) }
         )
-
-        return JsonUtil.convertToJson(equalizerExport)
     }
 
+    fun getEqualizerExportString(context: Context) = JsonUtil.convertToJson(getEqualizerExport(context))
+
     fun escapeString(string: String): String? {
         val moshi = Moshi
             .Builder()
@@ -87,14 +87,15 @@ object EqualizerUtil {
         return moshi.adapter(String::class.java).toJson(string)
     }
 
+
     /**
-     * Import all the custom equalizers
+     * Import all the custom equalizers and states
      *
      * @param context the context to be used
-     * @param json the json string to be imported
+     * @param equalizerExport the equalizer export to be imported
+     * @param listener the listener to be called when the import is finished
      */
-    suspend fun importAll(context: Context, json:String, listener: (id: Long) -> Unit) = withContext(Dispatchers.IO) {
-        val equalizerExport = JsonUtil.getEqualizersFromJson(json)
+    suspend fun importAll(context: Context, equalizerExport:EqualizerExport, listener: ((id: Long) -> Unit)?) = withContext(Dispatchers.IO) {
         val equalizerRepository = EqualizerRepository.getInstance(context)
         equalizerExport.equalizers.forEach { equalizer ->
             equalizer.equalizerEntry.id = 0
@@ -108,7 +109,18 @@ object EqualizerUtil {
             equalizerRepository.addOrUpdateEqualizerWithBands(context, equalizer.copy(equalizerEntry = equalizer.equalizerEntry.copy(isDisabled = it.disabled).apply { id = equalizer.equalizerEntry.id }))
         }
         val currentEq = equalizerRepository.getByName(equalizerExport.currentEqualizerName)
-        withContext(Dispatchers.Main) { listener.invoke(currentEq.equalizerEntry.id) }
+        withContext(Dispatchers.Main) { listener?.invoke(currentEq.equalizerEntry.id) }
+    }
+
+
+    /**
+     * Import all the custom equalizers
+     *
+     * @param context the context to be used
+     * @param json the json string to be imported
+     */
+    suspend fun importAll(context: Context, json:String, listener: (id: Long) -> Unit) = withContext(Dispatchers.IO) {
+        importAll(context,  JsonUtil.getEqualizersFromJson(json), listener)
     }
 }
 



More information about the Android mailing list