feat(audio): add native audio processing and Google Cast support

This commit is contained in:
2026-04-05 14:38:05 +02:00
parent d40ae6b746
commit 1564fa3dc4
6 changed files with 119 additions and 9 deletions
@@ -0,0 +1,74 @@
package com.michatec.radio
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SeekBarPreference
import com.michatec.radio.helpers.PreferencesHelper
/*
* EqualizerFragment class: Handles audio frequency settings
*/
class EqualizerFragment : PreferenceFragmentCompat() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
(activity as AppCompatActivity).supportActionBar?.title = getString(R.string.pref_equalizer_title)
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
val context = preferenceManager.context
val screen = preferenceManager.createPreferenceScreen(context)
// Reset Button
val resetPreference = Preference(context)
resetPreference.title = getString(R.string.pref_equalizer_reset_title)
resetPreference.setIcon(R.drawable.ic_refresh_24dp)
resetPreference.setOnPreferenceClickListener {
PreferencesHelper.resetEqualizer()
// Manually update SeekBars to 0
findPreference<SeekBarPreference>(Keys.PREF_EQ_LOW)?.value = 0
findPreference<SeekBarPreference>(Keys.PREF_EQ_MID)?.value = 0
findPreference<SeekBarPreference>(Keys.PREF_EQ_HIGH)?.value = 0
return@setOnPreferenceClickListener true
}
screen.addPreference(resetPreference)
// EQ Low
val eqLow = SeekBarPreference(context)
eqLow.title = getString(R.string.pref_eq_low_title)
eqLow.key = Keys.PREF_EQ_LOW
eqLow.setIcon(R.drawable.ic_music_note_24dp)
eqLow.min = -12
eqLow.max = 12
eqLow.showSeekBarValue = true
eqLow.setDefaultValue(0)
screen.addPreference(eqLow)
// EQ Mid
val eqMid = SeekBarPreference(context)
eqMid.title = getString(R.string.pref_eq_mid_title)
eqMid.key = Keys.PREF_EQ_MID
eqMid.setIcon(R.drawable.ic_music_note_24dp)
eqMid.min = -12
eqMid.max = 12
eqMid.showSeekBarValue = true
eqMid.setDefaultValue(0)
screen.addPreference(eqMid)
// EQ High
val eqHigh = SeekBarPreference(context)
eqHigh.title = getString(R.string.pref_eq_high_title)
eqHigh.key = Keys.PREF_EQ_HIGH
eqHigh.setIcon(R.drawable.ic_music_note_24dp)
eqHigh.min = -12
eqHigh.max = 12
eqHigh.showSeekBarValue = true
eqHigh.setDefaultValue(0)
screen.addPreference(eqHigh)
preferenceScreen = screen
}
}
@@ -210,6 +210,16 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
preferenceDrc.summary = getString(R.string.pref_drc_summary)
preferenceDrc.setDefaultValue(true)
// set up "Equalizer" preference entry
val preferenceEqualizer = Preference(context)
preferenceEqualizer.title = getString(R.string.pref_equalizer_title)
preferenceEqualizer.setIcon(R.drawable.ic_music_note_24dp)
preferenceEqualizer.summary = getString(R.string.pref_equalizer_summary)
preferenceEqualizer.setOnPreferenceClickListener {
findNavController().navigate(R.id.action_settings_to_equalizer)
return@setOnPreferenceClickListener true
}
// set up "App Version" preference
val preferenceAppVersion = Preference(context)
preferenceAppVersion.title = getString(R.string.pref_app_version_title)
@@ -287,6 +297,7 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
preferenceCategoryAudioEffects.addPreference(preferenceBassBoost)
preferenceCategoryAudioEffects.addPreference(preferenceReverb)
preferenceCategoryAudioEffects.addPreference(preferenceDrc)
preferenceCategoryAudioEffects.addPreference(preferenceEqualizer)
screen.addPreference(preferenceCategoryMaintenance)
preferenceCategoryMaintenance.addPreference(preferenceUpdateStationImages)
@@ -277,4 +277,13 @@ object PreferencesHelper {
fun loadEqMid(): Float = sharedPreferences.getInt(Keys.PREF_EQ_MID, 0).toFloat()
fun loadEqHigh(): Float = sharedPreferences.getInt(Keys.PREF_EQ_HIGH, 0).toFloat()
/* Resets Equalizer settings to default */
fun resetEqualizer() {
sharedPreferences.edit {
putInt(Keys.PREF_EQ_LOW, 0)
putInt(Keys.PREF_EQ_MID, 0)
putInt(Keys.PREF_EQ_HIGH, 0)
}
}
}