[Android] New equalizer: improve the history management
Nicolas Pomepuy
git at videolan.org
Fri Jul 25 11:46:42 UTC 2025
vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Wed Jun 11 06:34:18 2025 +0200| [8d72bc6cdf350d62158962dad7ee1d39bc60e5c9] | committer: Nicolas Pomepuy
New equalizer: improve the history management
> https://code.videolan.org/videolan/vlc-android/commit/8d72bc6cdf350d62158962dad7ee1d39bc60e5c9
---
.../vlc/gui/dialogs/EqualizerFragmentDialog.kt | 50 +++++++++++-----------
.../videolan/vlc/viewmodels/EqualizerViewModel.kt | 14 +++---
2 files changed, 33 insertions(+), 31 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 700c42f3f8..a04a4dbf19 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
@@ -34,6 +34,7 @@ import androidx.databinding.ObservableBoolean
import androidx.databinding.ObservableField
import androidx.databinding.ObservableInt
import androidx.fragment.app.activityViewModels
+import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.lifecycleScope
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED
import com.google.android.material.chip.Chip
@@ -81,9 +82,6 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
return presets.toTypedArray()
}
- private lateinit var equalizer: MediaPlayer.Equalizer
-
-
override fun getDefaultState(): Int {
return STATE_EXPANDED
}
@@ -103,11 +101,15 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
-
}
override fun onResume() {
- equalizer = VLCOptions.getEqualizerSetFromSettings(requireActivity(), true)!!
+ viewModel.equalizer = MutableLiveData(VLCOptions.getEqualizerSetFromSettings(requireActivity(), true)!!)
+ viewModel.equalizer.observe(this) {
+ var pos = getCurrentPosition()
+ if (pos < 0) return at observe
+ VLCOptions.saveCustomSet(requireActivity(), it, binding.presetTitleEdit.text.toString())
+ }
lifecycleScope.launch {
if (viewModel.bandCount == -1) viewModel.bandCount = withContext(Dispatchers.IO) {
VLCInstance.getInstance(requireContext())
@@ -149,21 +151,17 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
// on/off
binding.equalizerButton.isChecked = VLCOptions.getEqualizerEnabledState(requireActivity())
binding.equalizerButton.setOnCheckedChangeListener { _, isChecked ->
- viewModel.setEqualizer(if (isChecked) equalizer else null)
+ viewModel.updateEqualizer(if (isChecked) viewModel.equalizer.value else null)
updateEnabledState()
}
// preamp
- binding.equalizerPreamp.value = equalizer.preAmp.roundToInt().toFloat()
+ binding.equalizerPreamp.value = viewModel.equalizer.value!!.preAmp.roundToInt().toFloat()
binding.equalizerPreamp.addOnChangeListener(this at EqualizerFragmentDialog)
binding.undo.setOnClickListener {
- viewModel.getAndRemoveLastFromHistory()?.let {
- equalizer = it
- viewModel.setEqualizer(equalizer)
- updateBars()
- }
-
+ viewModel.undoFromHistory()
+ updateBars()
}
var selectedChip: Chip? = null
@@ -205,7 +203,7 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
val band = MediaPlayer.Equalizer.getBandFrequency(i)
val bar = EqualizerBar(requireContext(), band)
- bar.setValue(equalizer.getAmp(i))
+ bar.setValue(viewModel.equalizer.value!!.getAmp(i))
binding.equalizerBands.addView(bar)
@@ -260,12 +258,12 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
fun updateEqualizer(pos: Int) = lifecycleScope.launch(start = CoroutineStart.UNDISPATCHED) {
when {
getEqualizerType(pos) == TYPE_PRESET -> {
- equalizer = MediaPlayer.Equalizer.createFromPreset(pos - customCount)
+ viewModel.equalizer.value = MediaPlayer.Equalizer.createFromPreset(pos - customCount)
state.update(pos, true)
}
getEqualizerType(pos) == TYPE_CUSTOM -> {
- equalizer = VLCOptions.getCustomSet(requireActivity(), allSets[pos])!!
+ viewModel.equalizer.value = VLCOptions.getCustomSet(requireActivity(), allSets[pos])!!
state.update(pos, true)
}
}
@@ -274,7 +272,7 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
MediaPlayer.Equalizer.getBandCount()
}
updateBars()
- if (binding.equalizerButton.isChecked) viewModel.setEqualizer(equalizer)
+ if (binding.equalizerButton.isChecked) viewModel.updateEqualizer(viewModel.equalizer.value)
}
/**
@@ -284,10 +282,10 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
private fun updateBars() {
if (!isStarted()) return
- binding.equalizerPreamp.value = equalizer.preAmp.roundToInt().toFloat()
+ binding.equalizerPreamp.value = viewModel.equalizer.value!!.preAmp.roundToInt().toFloat()
for (i in 0 until viewModel.bandCount) {
val bar = binding.equalizerBands.getChildAt(i) as EqualizerBar
- bar.setValue(equalizer.getAmp(i))
+ bar.setValue(viewModel.equalizer.value!!.getAmp(i))
}
}
@@ -316,9 +314,9 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
override fun onValueChange(slider: Slider, value: Float, fromUser: Boolean) {
if (!fromUser) return
- viewModel.saveInHistory(equalizer, -1)
- equalizer.preAmp = binding.equalizerPreamp.value
- if (binding.equalizerButton.isChecked) viewModel.setEqualizer(equalizer)
+ viewModel.saveInHistory(viewModel.equalizer.value!!, -1)
+ viewModel.equalizer.value!!.preAmp = binding.equalizerPreamp.value
+ if (binding.equalizerButton.isChecked) viewModel.updateEqualizer(viewModel.equalizer.value)
}
@@ -371,8 +369,8 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
override fun onProgressChanged(value: Float, fromUser: Boolean) {
if (!fromUser)
return
- viewModel.saveInHistory(equalizer, index)
- equalizer.setAmp(index, value)
+ viewModel.saveInHistory(viewModel.equalizer.value!!, index)
+ viewModel.equalizer.value!!.setAmp(index, value)
if (!binding.equalizerButton.isChecked)
binding.equalizerButton.isChecked = true
@@ -396,13 +394,13 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment(), Slider.OnChangeL
if (binding.equalizerButton.isChecked) {
- equalizer.setAmp(i, eqBandsViews[i].getValue())
+ viewModel.equalizer.value!!.setAmp(i, eqBandsViews[i].getValue())
}
}
}
- if (binding.equalizerButton.isChecked) viewModel.setEqualizer(equalizer)
+ if (binding.equalizerButton.isChecked) viewModel.updateEqualizer(viewModel.equalizer.value)
}
override fun onStartTrackingTouch() {
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 275d4b1549..38d57ff945 100644
--- a/application/vlc-android/src/org/videolan/vlc/viewmodels/EqualizerViewModel.kt
+++ b/application/vlc-android/src/org/videolan/vlc/viewmodels/EqualizerViewModel.kt
@@ -24,6 +24,8 @@
package org.videolan.vlc.viewmodels
+import android.content.Context
+import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import org.videolan.libvlc.MediaPlayer
import org.videolan.vlc.PlaybackService
@@ -32,13 +34,14 @@ import org.videolan.vlc.PlaybackService
* View model storing data for the equalizer dialog
*
*/
-class EqualizerViewModel : ViewModel() {
+class EqualizerViewModel(context: Context) : ViewModel() {
private val history = ArrayList<MediaPlayer.Equalizer>()
var bandCount = -1
var lastSaveToHistoryFrom = -2
+ lateinit var equalizer: MutableLiveData<MediaPlayer.Equalizer>
- fun setEqualizer(equalizer: MediaPlayer.Equalizer?) {
+ fun updateEqualizer(equalizer: MediaPlayer.Equalizer?) {
PlaybackService.equalizer.value = equalizer
}
@@ -57,6 +60,7 @@ class EqualizerViewModel : ViewModel() {
if (from != lastSaveToHistoryFrom)
history.add(mediaPlayerEqualizer)
lastSaveToHistoryFrom = from
+ this.equalizer.postValue(equalizer)
}
/**
@@ -64,9 +68,9 @@ class EqualizerViewModel : ViewModel() {
*
* @return the last equalizer from history
*/
- fun getAndRemoveLastFromHistory(): MediaPlayer.Equalizer? {
+ fun undoFromHistory() {
lastSaveToHistoryFrom = -2
- if (history.isEmpty()) return null
- return history.removeAt(history.lastIndex)
+ if (history.isEmpty()) return
+ equalizer.value = history.removeAt(history.lastIndex)
}
}
\ No newline at end of file
More information about the Android
mailing list