fix: Allow only integer values in equalizer seek bars, show positive dB values with plus symbol

This commit is contained in:
Jaime García 2025-09-09 02:42:52 +02:00
parent b89086c5be
commit 60fee3c77c
No known key found for this signature in database
GPG key ID: BC4E5F71A71BDA5B

View file

@ -116,14 +116,16 @@ class EqualizerFragment : Fragment() {
bandSeekBars.forEach { it.isEnabled = isEnabled } bandSeekBars.forEach { it.isEnabled = isEnabled }
} }
private fun formatDb(value: Int): String = if (value > 0) "+$value dB" else "$value dB"
private fun createBandSliders() { private fun createBandSliders() {
val manager = equalizerManager ?: return val manager = equalizerManager ?: return
eqBandsContainer.removeAllViews() eqBandsContainer.removeAllViews()
bandSeekBars.clear() bandSeekBars.clear()
val bands = manager.getNumberOfBands() val bands = manager.getNumberOfBands()
val bandLevelRange = manager.getBandLevelRange() ?: shortArrayOf(-1500, 1500) val bandLevelRange = manager.getBandLevelRange() ?: shortArrayOf(-1500, 1500)
val minLevel = bandLevelRange[0].toInt() val minLevelDb = bandLevelRange[0] / 100
val maxLevel = bandLevelRange[1].toInt() val maxLevelDb = bandLevelRange[1] / 100
val savedLevels = Preferences.getEqualizerBandLevels(bands) val savedLevels = Preferences.getEqualizerBandLevels(bands)
for (i in 0 until bands) { for (i in 0 until bands) {
@ -158,26 +160,26 @@ class EqualizerFragment : Fragment() {
} }
row.addView(freqLabel) row.addView(freqLabel)
val initialLevel = savedLevels.getOrNull(i) ?: (manager.getBandLevel(band)?.toInt() ?: 0) val initialLevelDb = (savedLevels.getOrNull(i) ?: (manager.getBandLevel(band) ?: 0)) / 100
val dbLabel = TextView(requireContext(), null, 0, R.style.LabelSmall).apply { val dbLabel = TextView(requireContext(), null, 0, R.style.LabelSmall).apply {
text = "${(initialLevel.toInt() / 100)} dB" text = formatDb(initialLevelDb)
setPadding(12, 0, 0, 0) setPadding(12, 0, 0, 0)
gravity = Gravity.END gravity = Gravity.END
layoutParams = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 2f) layoutParams = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 2f)
} }
val seekBar = SeekBar(requireContext()).apply { val seekBar = SeekBar(requireContext()).apply {
max = maxLevel - minLevel max = maxLevelDb - minLevelDb
progress = initialLevel.toInt() - minLevel progress = initialLevelDb - minLevelDb
layoutParams = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 6f) layoutParams = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 6f)
setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
val thisLevel = (progress + minLevel).toShort() val thisLevelDb = progress + minLevelDb
if (fromUser) { if (fromUser) {
manager.setBandLevel(band, thisLevel) manager.setBandLevel(band, (thisLevelDb * 100).toShort())
saveBandLevelsToPreferences() saveBandLevelsToPreferences()
} }
dbLabel.text = "${((progress + minLevel) / 100)} dB" dbLabel.text = formatDb(thisLevelDb)
} }
override fun onStartTrackingTouch(seekBar: SeekBar) {} override fun onStartTrackingTouch(seekBar: SeekBar) {}
@ -195,11 +197,12 @@ class EqualizerFragment : Fragment() {
val manager = equalizerManager ?: return val manager = equalizerManager ?: return
val bands = manager.getNumberOfBands() val bands = manager.getNumberOfBands()
val bandLevelRange = manager.getBandLevelRange() ?: shortArrayOf(-1500, 1500) val bandLevelRange = manager.getBandLevelRange() ?: shortArrayOf(-1500, 1500)
val minLevel = bandLevelRange[0].toInt() val minLevelDb = bandLevelRange[0] / 100
val midLevel = 0 val midLevelDb = 0
for (i in 0 until bands) { for (i in 0 until bands) {
manager.setBandLevel(i.toShort(), midLevel.toShort()) manager.setBandLevel(i.toShort(), (0).toShort())
bandSeekBars.getOrNull(i)?.progress = midLevel - minLevel bandSeekBars.getOrNull(i)?.progress = midLevelDb - minLevelDb
} }
Preferences.setEqualizerBandLevels(ShortArray(bands.toInt())) Preferences.setEqualizerBandLevels(ShortArray(bands.toInt()))
} }
@ -215,15 +218,19 @@ class EqualizerFragment : Fragment() {
val manager = equalizerManager ?: return val manager = equalizerManager ?: return
eqSwitch.isChecked = Preferences.isEqualizerEnabled() eqSwitch.isChecked = Preferences.isEqualizerEnabled()
updateUiEnabledState(eqSwitch.isChecked) updateUiEnabledState(eqSwitch.isChecked)
val bands = manager.getNumberOfBands() val bands = manager.getNumberOfBands()
val bandLevelRange = manager.getBandLevelRange() ?: shortArrayOf(-1500, 1500) val bandLevelRange = manager.getBandLevelRange() ?: shortArrayOf(-1500, 1500)
val minLevel = bandLevelRange[0].toInt() val minLevelDb = bandLevelRange[0] / 100
val savedLevels = Preferences.getEqualizerBandLevels(bands) val savedLevels = Preferences.getEqualizerBandLevels(bands)
for (i in 0 until bands) { for (i in 0 until bands) {
manager.setBandLevel(i.toShort(), savedLevels[i]) val savedDb = savedLevels[i] / 100
bandSeekBars.getOrNull(i)?.progress = savedLevels[i] - minLevel manager.setBandLevel(i.toShort(), (savedDb * 100).toShort())
bandSeekBars.getOrNull(i)?.progress = savedDb - minLevelDb
} }
} }
} }
private fun Int.dpToPx(context: Context): Int = private fun Int.dpToPx(context: Context): Int =