diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e37ad868..81b9fd18e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ #### What's New - Added disc number support - Added ReplayGain support for below-reference volume tracks [i.e positive ReplayGain values] +- Added ReplayGain pre-amp customization - About screen now shows counts for multiple types of library items, alongside a total duration - New disc, track, song count, and duration sorting modes diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index a9c3b5e00..34395910e 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -186,7 +186,7 @@ class MainFragment : ViewBindingFragment() { /** * A back press callback that handles how to respond to backwards navigation in the detail - * fragments and the playback panel. + * fragments and the playback panel. TODO: Migrate to new predictive API */ inner class DynamicBackPressedCallback : OnBackPressedCallback(false) { override fun handleOnBackPressed() { diff --git a/app/src/main/java/org/oxycblt/auxio/home/tabs/TabCustomizeDialog.kt b/app/src/main/java/org/oxycblt/auxio/home/tabs/TabCustomizeDialog.kt index 6a1416b8d..7373c7664 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/tabs/TabCustomizeDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/tabs/TabCustomizeDialog.kt @@ -32,8 +32,7 @@ import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.requireAttached /** - * The dialog for customizing library tabs. This dialog does not rely on any specific ViewModel and - * serializes it's state instead of + * The dialog for customizing library tabs. * @author OxygenCobalt */ class TabCustomizeDialog : ViewBindingDialogFragment(), TabAdapter.Listener { @@ -46,14 +45,10 @@ class TabCustomizeDialog : ViewBindingDialogFragment(), TabAd override fun onConfigDialog(builder: AlertDialog.Builder) { builder.setTitle(R.string.set_lib_tabs) - - builder.setPositiveButton(android.R.string.ok) { _, _ -> + .setPositiveButton(R.string.lbl_ok) { _, _ -> logD("Committing tab changes") settingsManager.libTabs = tabAdapter.data.tabs - } - - // Negative button just dismisses, no need for a listener. - builder.setNegativeButton(android.R.string.cancel, null) + }.setNegativeButton(R.string.lbl_cancel, null) } override fun onBindingCreated(binding: DialogTabsBinding, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/org/oxycblt/auxio/music/excluded/ExcludedDatabase.kt b/app/src/main/java/org/oxycblt/auxio/music/excluded/ExcludedDatabase.kt index db2b94d6b..0cf4b6d9c 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/excluded/ExcludedDatabase.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/excluded/ExcludedDatabase.kt @@ -30,7 +30,9 @@ import org.oxycblt.auxio.util.requireBackgroundThread * Database for storing excluded directories. Note that the paths stored here will not work with * MediaStore unless you append a "%" at the end. Yes. I know Room exists. But that would needlessly * bloat my app and has crippling bugs. - * @author OxygenCobalt TODO: Migrate this to SharedPreferences? + * @author OxygenCobalt + * + * TODO: Migrate this to SharedPreferences? */ class ExcludedDatabase(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_VERSION) { override fun onCreate(db: SQLiteDatabase) { diff --git a/app/src/main/java/org/oxycblt/auxio/music/excluded/ExcludedDialog.kt b/app/src/main/java/org/oxycblt/auxio/music/excluded/ExcludedDialog.kt index af63b4d16..573d97f59 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/excluded/ExcludedDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/excluded/ExcludedDialog.kt @@ -53,12 +53,11 @@ class ExcludedDialog : override fun onCreateBinding(inflater: LayoutInflater) = DialogExcludedBinding.inflate(inflater) override fun onConfigDialog(builder: AlertDialog.Builder) { - builder.setTitle(R.string.set_excluded) - // Don't set the click listener here, we do some custom black magic in onCreateView instead. - builder.setNeutralButton(R.string.lbl_add, null) - builder.setPositiveButton(R.string.lbl_save, null) - builder.setNegativeButton(android.R.string.cancel, null) + builder.setTitle(R.string.set_excluded) + .setNeutralButton(R.string.lbl_add, null) + .setPositiveButton(R.string.lbl_save, null) + .setNegativeButton(R.string.lbl_cancel, null) } override fun onBindingCreated(binding: DialogExcludedBinding, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt index 3de34434d..3b91658c9 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt @@ -34,6 +34,11 @@ import org.oxycblt.auxio.util.getAttrColorSafe import org.oxycblt.auxio.util.systemBarInsetsCompat import org.oxycblt.auxio.util.textSafe +/** + * A fragment showing the current playback state in a compact manner. Placed at the bottom of the + * screen. This expands into [PlaybackPanelFragment]. + * @author OxygenCobalt + */ class PlaybackBarFragment : ViewBindingFragment() { private val playbackModel: PlaybackViewModel by activityViewModels() private val navModel: NavigationViewModel by activityViewModels() diff --git a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGainDialog.kt b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/PreAmpCustomizeDialog.kt similarity index 94% rename from app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGainDialog.kt rename to app/src/main/java/org/oxycblt/auxio/playback/replaygain/PreAmpCustomizeDialog.kt index d7439e0bc..8c26c01a0 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGainDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/PreAmpCustomizeDialog.kt @@ -33,7 +33,7 @@ import org.oxycblt.auxio.util.textSafe * The dialog for customizing the ReplayGain pre-amp values. * @author OxygenCobalt */ -class ReplayGainDialog : ViewBindingDialogFragment() { +class PreAmpCustomizeDialog : ViewBindingDialogFragment() { private val settingsManager = SettingsManager.getInstance() override fun onCreateBinding(inflater: LayoutInflater) = DialogPreAmpBinding.inflate(inflater) @@ -41,12 +41,12 @@ class ReplayGainDialog : ViewBindingDialogFragment() { override fun onConfigDialog(builder: AlertDialog.Builder) { builder .setTitle(R.string.set_pre_amp) - .setPositiveButton(android.R.string.ok) { _, _ -> + .setPositiveButton(R.string.lbl_ok) { _, _ -> val binding = requireBinding() settingsManager.replayGainPreAmp = ReplayGainPreAmp(binding.withTagsSlider.value, binding.withoutTagsSlider.value) } - .setNegativeButton(android.R.string.cancel, null) + .setNegativeButton(R.string.lbl_cancel, null) } override fun onBindingCreated(binding: DialogPreAmpBinding, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGainAudioProcessor.kt b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGainAudioProcessor.kt index c4780d81d..3a4bf355e 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGainAudioProcessor.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGainAudioProcessor.kt @@ -35,10 +35,12 @@ import org.oxycblt.auxio.util.logW import org.oxycblt.auxio.util.unlikelyToBeNull /** - * An [AudioProcessor] that automatically handles ReplayGain values and their amplification of the - * audio stream. Instead of leveraging the volume attribute like other implementations, this system - * manipulates the bitstream itself to modify the volume, which allows the use of positive - * ReplayGain values. + * An [AudioProcessor] that handles ReplayGain values and their amplification of the audio stream. + * Instead of leveraging the volume attribute like other implementations, this system manipulates + * the bitstream itself to modify the volume, which allows the use of positive ReplayGain values. + * + * Note that you must still give it a [Metadata] instance for it to function, which should be done + * when the active track changes. * * @author OxygenCobalt */ @@ -59,9 +61,8 @@ class ReplayGainAudioProcessor : BaseAudioProcessor() { // --- REPLAYGAIN PARSING --- /** - * Updates the rough volume adjustment for [Metadata] with ReplayGain tags. This is - * tangentially based off Vanilla Music's implementation, but has diverged to a significant - * extent. + * Updates the rough volume adjustment for [Metadata] with ReplayGain tags. This is tangentially + * based off Vanilla Music's implementation, but has diverged to a significant extent. */ fun applyReplayGain(metadata: Metadata?) { if (settingsManager.replayGainMode == ReplayGainMode.OFF) { diff --git a/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt index 782af507a..d540a7774 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt @@ -33,8 +33,8 @@ import org.oxycblt.auxio.R import org.oxycblt.auxio.home.tabs.TabCustomizeDialog import org.oxycblt.auxio.music.excluded.ExcludedDialog import org.oxycblt.auxio.playback.PlaybackViewModel -import org.oxycblt.auxio.playback.replaygain.ReplayGainDialog import org.oxycblt.auxio.playback.replaygain.ReplayGainMode +import org.oxycblt.auxio.playback.replaygain.PreAmpCustomizeDialog import org.oxycblt.auxio.settings.pref.IntListPreference import org.oxycblt.auxio.settings.pref.IntListPreferenceDialog import org.oxycblt.auxio.ui.accent.AccentCustomizeDialog @@ -168,7 +168,8 @@ class SettingsListFragment : PreferenceFragmentCompat() { SettingsManager.KEY_PRE_AMP -> { onPreferenceClickListener = Preference.OnPreferenceClickListener { - ReplayGainDialog().show(childFragmentManager, ReplayGainDialog.TAG) + PreAmpCustomizeDialog() + .show(childFragmentManager, PreAmpCustomizeDialog.TAG) true } } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/pref/IntListPrefDialog.kt b/app/src/main/java/org/oxycblt/auxio/settings/pref/IntListPrefDialog.kt index 6114162ce..d991c8099 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/pref/IntListPrefDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/pref/IntListPrefDialog.kt @@ -22,6 +22,7 @@ import android.os.Bundle import androidx.preference.PreferenceDialogFragmentCompat import com.google.android.material.dialog.MaterialAlertDialogBuilder import org.oxycblt.auxio.BuildConfig +import org.oxycblt.auxio.R class IntListPreferenceDialog : PreferenceDialogFragmentCompat() { private val listPreference: IntListPreference @@ -35,7 +36,7 @@ class IntListPreferenceDialog : PreferenceDialogFragmentCompat() { val builder = MaterialAlertDialogBuilder(requireContext(), theme) builder.setTitle(listPreference.title) builder.setPositiveButton(null, null) - builder.setNegativeButton(android.R.string.cancel, null) + builder.setNegativeButton(R.string.lbl_cancel, null) builder.setSingleChoiceItems(listPreference.entries, listPreference.getValueIndex()) { _, index -> diff --git a/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentCustomizeDialog.kt b/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentCustomizeDialog.kt index fe93acc81..ff2629cd4 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentCustomizeDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentCustomizeDialog.kt @@ -42,7 +42,7 @@ class AccentCustomizeDialog : override fun onConfigDialog(builder: AlertDialog.Builder) { builder .setTitle(R.string.set_accent) - .setPositiveButton(android.R.string.ok) { _, _ -> + .setPositiveButton(R.string.lbl_ok) { _, _ -> if (accentAdapter.selectedAccent != settingsManager.accent) { logD("Applying new accent") settingsManager.accent = unlikelyToBeNull(accentAdapter.selectedAccent) @@ -51,9 +51,7 @@ class AccentCustomizeDialog : dismiss() } - - // Negative button just dismisses, no need for a listener. - .setNegativeButton(android.R.string.cancel, null) + .setNegativeButton(R.string.lbl_cancel, null) } override fun onBindingCreated(binding: DialogAccentBinding, savedInstanceState: Bundle?) { diff --git a/app/src/main/res/layout/dialog_excluded.xml b/app/src/main/res/layout/dialog_excluded.xml index f4bc48212..1062cd669 100644 --- a/app/src/main/res/layout/dialog_excluded.xml +++ b/app/src/main/res/layout/dialog_excluded.xml @@ -26,7 +26,7 @@ android:paddingStart="@dimen/spacing_medium" android:paddingEnd="@dimen/spacing_medium" android:paddingBottom="@dimen/spacing_medium" - android:text="@string/lbl_no_dirs" + android:text="@string/err_no_dirs" android:textAlignment="center" android:textAppearance="@style/TextAppearance.Auxio.TitleMidLarge" android:textColor="?android:attr/textColorSecondary" /> diff --git a/app/src/main/res/layout/dialog_pre_amp.xml b/app/src/main/res/layout/dialog_pre_amp.xml index 87a9a7dc4..5b21fbb0d 100644 --- a/app/src/main/res/layout/dialog_pre_amp.xml +++ b/app/src/main/res/layout/dialog_pre_amp.xml @@ -1,103 +1,108 @@ - + android:layout_height="match_parent"> - - - - - - - - - - - - - + android:layout_height="match_parent"> - \ No newline at end of file + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-ar-rIQ/strings.xml b/app/src/main/res/values-ar-rIQ/strings.xml index aa930ae13..4bfa5fc38 100644 --- a/app/src/main/res/values-ar-rIQ/strings.xml +++ b/app/src/main/res/values-ar-rIQ/strings.xml @@ -47,7 +47,7 @@ أضف احفظ - لا مجلد + لا مجلد حول الإصدار @@ -82,7 +82,7 @@ صوتيات صخب الصوت - اطفاء + اطفاء تفضيل المقطع تفضيل الالبوم ديناميكي diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 4bfe687ba..4e2fbf871 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -38,7 +38,7 @@ "Stav uložen" "Přidat" "Uložit" - "Žádné složky" + "Žádné složky" "O aplikaci" "Verze" "Zobrazit na GitHubu" diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 0c375acfe..8894c76f5 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -40,7 +40,7 @@ Hinzufügen Speichern - Keine Ordner + Keine Ordner Über Version @@ -74,7 +74,7 @@ Kopfhörer automatische Wiedergabe Beginne die Wiedergabe immer, wenn Kopfhörer verbunden sind (funktioniert nicht auf allen Geräten) ReplayGain - Aus + Aus Titel bevorzugen Album bevorzugen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b9e43f475..6ab4d0164 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -47,7 +47,7 @@ Agregar Guardar - Sin carpetas + Sin carpetas Acerca de Versión @@ -82,7 +82,7 @@ Sonido ReplayGain - Desactivado + Desactivado Por pista Por álbum Dinámico diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 2ace338c8..613846408 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -46,7 +46,7 @@ Aggiungi Salva - Nessuna cartella + Nessuna cartella Informazioni Versione @@ -105,7 +105,7 @@ Cartelle escluse Il contenuto delle cartelle escluse sarà nascosto dalla tua libreria - Spento + Spento Musica non trovata diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 22aa19213..b09238326 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -41,7 +41,7 @@ Toevoegen Opslaan - Geen Mappen + Geen Mappen Over Versie diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 9cef75174..b3164b552 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -47,7 +47,7 @@ Добавить Сохранить - Папок нет + Папок нет О программе Версия @@ -84,7 +84,7 @@ Воспроизводить при подключении Всегда начинать воспроизведение при подключении наушников (может работать не на всех устройствах) ReplayGain - Выкл. + Выкл. По треку По альбому Динамический diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 690398bff..9df6349c7 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -46,7 +46,7 @@ 添加 保存 - 没有任何文件夹 + 没有任何文件夹 关于 版本 @@ -104,7 +104,7 @@ 排除文件夹 被排除文件夹的内容将从媒体库中隐藏 - 关闭 + 关闭 没有找到音乐 diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml index 37925a9ee..9213cc925 100644 --- a/app/src/main/res/values/integers.xml +++ b/app/src/main/res/values/integers.xml @@ -31,7 +31,7 @@ - @string/set_off + @string/lbl_off @string/set_replay_gain_track @string/set_replay_gain_album @string/set_replay_gain_dynamic diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8849ccffb..945ca0cd8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -48,9 +48,13 @@ State saved + + @android:string/ok + + @android:string/cancel Add Save - No Folders + Off About Version @@ -114,14 +118,12 @@ Excluded folders The content of excluded folders is hidden from your library - - Off - No music found Music loading failed Auxio needs permission to read your music library No app can open this link + No Folders This folder is not supported Auxio does not support this window size