[Android] Fix new equalizer history undo

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


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Mon Jun 16 09:34:53 2025 +0200| [d81a07fa02ed32dd29a7c06263393e1fa13afe09] | committer: Nicolas Pomepuy

Fix new equalizer history undo

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

 .../src/org/videolan/vlc/gui/dialogs/EqualizerFragmentDialog.kt  | 5 ++++-
 .../src/org/videolan/vlc/viewmodels/EqualizerViewModel.kt        | 9 ++++++++-
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/EqualizerFragmentDialog.kt b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/EqualizerFragmentDialog.kt
index 04d916724b..fbafb95311 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/EqualizerFragmentDialog.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/EqualizerFragmentDialog.kt
@@ -95,6 +95,7 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
         viewModel.equalizerEntries.observe(this) {
+            if (BuildConfig.DEBUG) Log.d(TAG, "Received new equalizer entries")
             val newEqualizerSets = it.map { it.equalizerEntry.name }
 
             if (oldEqualiserSets != newEqualizerSets) fillPresets()
@@ -102,8 +103,9 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
                 fillPreamp()
             }
 
-            if (oldCurrentEqualizer == null || oldCurrentEqualizer?.equalizerEntry?.id != viewModel.getCurrentEqualizer().equalizerEntry.id) {
+            if (viewModel.needForceRefresh || oldCurrentEqualizer == null || oldCurrentEqualizer?.equalizerEntry?.id != viewModel.getCurrentEqualizer().equalizerEntry.id) {
                 fillBands()
+                viewModel.needForceRefresh = false
             }
             if (oldCurrentEqualizer == null) fillViews()
             oldEqualiserSets = newEqualizerSets
@@ -185,6 +187,7 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
      *
      */
     fun fillBands() {
+        if (BuildConfig.DEBUG) Log.d(TAG, "fillBands")
         eqBandsViews.clear()
         binding.equalizerBands.removeAllViews()
         // bands
diff --git a/application/vlc-android/src/org/videolan/vlc/viewmodels/EqualizerViewModel.kt b/application/vlc-android/src/org/videolan/vlc/viewmodels/EqualizerViewModel.kt
index 556b188853..588d1dd071 100644
--- a/application/vlc-android/src/org/videolan/vlc/viewmodels/EqualizerViewModel.kt
+++ b/application/vlc-android/src/org/videolan/vlc/viewmodels/EqualizerViewModel.kt
@@ -25,6 +25,7 @@
 package org.videolan.vlc.viewmodels
 
 import android.content.Context
+import android.util.Log
 import androidx.core.content.edit
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.ViewModelProvider
@@ -36,7 +37,9 @@ import org.videolan.libvlc.MediaPlayer
 import org.videolan.tools.KEY_CURRENT_EQUALIZER_ID
 import org.videolan.tools.KEY_EQUALIZER_ENABLED
 import org.videolan.tools.Settings
+import org.videolan.vlc.BuildConfig
 import org.videolan.vlc.PlaybackService
+import org.videolan.vlc.gui.dialogs.EqualizerFragmentDialog
 import org.videolan.vlc.mediadb.models.EqualizerBand
 import org.videolan.vlc.mediadb.models.EqualizerWithBands
 import org.videolan.vlc.repository.EqualizerRepository
@@ -50,6 +53,7 @@ class EqualizerViewModel(context: Context, private val equalizerRepository: Equa
     var bandCount = -1
     var lastSaveToHistoryFrom = -2
     val settings = Settings.getInstance(context)
+    var needForceRefresh = false
 
     val equalizerEntries = equalizerRepository.equalizerEntries.asLiveData()
     var currentEqualizerId = 1L
@@ -74,6 +78,7 @@ class EqualizerViewModel(context: Context, private val equalizerRepository: Equa
      *
      */
     fun saveInHistory(from: Int) {
+        if (BuildConfig.DEBUG) Log.d(EqualizerFragmentDialog.TAG, "saveInHistory: from $from, saving: ${from != lastSaveToHistoryFrom}, history size: ${history.size}")
         if (from != lastSaveToHistoryFrom)
             history.add(getCurrentEqualizer().copy())
         lastSaveToHistoryFrom = from
@@ -85,8 +90,10 @@ class EqualizerViewModel(context: Context, private val equalizerRepository: Equa
      * @return the last equalizer from history
      */
     fun undoFromHistory(context: Context) = viewModelScope.launch(Dispatchers.IO) {
+        if (BuildConfig.DEBUG) Log.d(EqualizerFragmentDialog.TAG, "undoFromHistory: history size: ${history.size}")
         lastSaveToHistoryFrom = -2
         if (history.isEmpty()) return at launch
+        needForceRefresh = true
         equalizerRepository.addOrUpdateEqualizerWithBands(context, history.removeAt(history.lastIndex))
     }
 
@@ -103,7 +110,7 @@ class EqualizerViewModel(context: Context, private val equalizerRepository: Equa
     }
 
     fun updateEqualizerBands(context: Context, bands: List<EqualizerBand>) = viewModelScope.launch(Dispatchers.IO) {
-        equalizerRepository.addOrUpdateEqualizerWithBands(context, getCurrentEqualizer().copy(bands = bands))
+        equalizerRepository.addOrUpdateEqualizerWithBands(context, getCurrentEqualizer().copy(bands = bands.sortedBy { it.index }))
     }
 
     fun createCustomEqualizer(context: Context) = viewModelScope.launch(Dispatchers.IO) {



More information about the Android mailing list