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)
}
}
}
+12 -2
View File
@@ -19,6 +19,16 @@
<fragment
android:id="@+id/settings_destination"
android:name="com.michatec.radio.SettingsFragment"
android:label="Settings" />
android:label="Settings">
<action
android:id="@+id/action_settings_to_equalizer"
app:destination="@id/equalizer_destination" />
</fragment>
</navigation>
<!-- EQUALIZER -->
<fragment
android:id="@+id/equalizer_destination"
android:name="com.michatec.radio.EqualizerFragment"
android:label="Equalizer" />
</navigation>
+10 -7
View File
@@ -55,7 +55,7 @@
<string name="pref_update_collection_summary">Die neueste Version aller Senderinformationen herunterladen.</string>
<string name="dialog_yes_no_message_update_collection">Die neueste Version aller Senderinformationen herunterladen?</string>
<string name="dialog_yes_no_positive_button_update_collection">Aktualisieren</string>
<string name="pref_eq_high_title">Equalizer: Hoch</string>
<string name="pref_eq_high_title">Equalizer: Höhen</string>
<string name="pref_advanced_title">Erweitert</string>
<string name="pref_app_version_summary">Version</string>
<string name="pref_app_version_title">App-Version</string>
@@ -118,13 +118,16 @@
<!-- Snackbars -->
<string name="snackbar_show">Zeigen</string>
<string name="snackbar_update_available">ist verfügbar!</string>
<string name="pref_audio_effects_title">Audio Effekte</string>
<string name="pref_bass_boost_title">Bass Boost</string>
<string name="pref_audio_effects_title">Audio-Effekte</string>
<string name="pref_bass_boost_title">Bass-Boost</string>
<string name="pref_bass_boost_summary">Erhöhen Sie die Bassverstärkung.</string>
<string name="pref_reverb_title">Hall</string>
<string name="pref_reverb_summary">Reverb-Mix anpassen.</string>
<string name="pref_drc_title">Komprimierung des Dynamikbereichs</string>
<string name="pref_drc_summary">Den Dynamikbereich für ein gleichbleibendes Volumen komprimieren.</string>
<string name="pref_eq_low_title">Equalizer: Leicht</string>
<string name="pref_eq_mid_title">Equalizer: Mitte</string>
<string name="pref_drc_title">Dynamikkompression</string>
<string name="pref_drc_summary">Den Dynamikbereich für eine gleichbleibende Lautstärke komprimieren.</string>
<string name="pref_eq_low_title">Equalizer: Bass</string>
<string name="pref_eq_mid_title">Equalizer: Mitten</string>
<string name="pref_equalizer_title">Equalizer</string>
<string name="pref_equalizer_summary">Passen Sie die Audio-Frequenzen an.</string>
<string name="pref_equalizer_reset_title">Equalizer zurücksetzen</string>
</resources>
+3
View File
@@ -73,6 +73,9 @@
<string name="pref_eq_low_title">Equalizer: Low</string>
<string name="pref_eq_mid_title">Equalizer: Mid</string>
<string name="pref_eq_high_title">Equalizer: High</string>
<string name="pref_equalizer_title">Equalizer</string>
<string name="pref_equalizer_summary">Adjust audio frequencies</string>
<string name="pref_equalizer_reset_title">Reset Equalizer</string>
<string name="pref_advanced_title">Advanced</string>
<string name="pref_app_version_summary">Version</string>
<string name="pref_app_version_title">App Version</string>