diff --git a/app/build.gradle b/app/build.gradle index 59515810f..d358f6d77 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -34,8 +34,8 @@ android { buildTypes { debug { - applicationIdSuffix = ".debug" - versionNameSuffix = "-DEBUG" + applicationIdSuffix ".debug" + versionNameSuffix "-DEBUG" } release { diff --git a/app/src/main/java/org/oxycblt/auxio/settings/ui/BasePreferenceFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/BasePreferenceFragment.kt similarity index 92% rename from app/src/main/java/org/oxycblt/auxio/settings/ui/BasePreferenceFragment.kt rename to app/src/main/java/org/oxycblt/auxio/settings/BasePreferenceFragment.kt index bc0273e72..547c245e3 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/ui/BasePreferenceFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/BasePreferenceFragment.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.settings.ui +package org.oxycblt.auxio.settings import android.os.Bundle import android.view.LayoutInflater @@ -32,6 +32,10 @@ import androidx.preference.children import com.google.android.material.appbar.AppBarLayout import com.google.android.material.transition.MaterialSharedAxis import org.oxycblt.auxio.R +import org.oxycblt.auxio.settings.ui.IntListPreference +import org.oxycblt.auxio.settings.ui.IntListPreferenceDialog +import org.oxycblt.auxio.settings.ui.PreferenceHeaderItemDecoration +import org.oxycblt.auxio.settings.ui.WrappedDialogPreference import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.systemBarInsetsCompat @@ -68,14 +72,7 @@ abstract class BasePreferenceFragment(@XmlRes private val screen: Int) : androidx.preference.R.id.recycler_view view.findViewById(R.id.preferences_toolbar).apply { title = preferenceScreen.title - setNavigationOnClickListener { - val fragmentManager = @Suppress("Deprecation") fragmentManager - if (fragmentManager == null || fragmentManager.backStackEntryCount == 0) { - findNavController().navigateUp() - } else { - fragmentManager.popBackStack() - } - } + setNavigationOnClickListener { findNavController().navigateUp() } } preferenceManager.onDisplayPreferenceDialogListener = this diff --git a/app/src/main/java/org/oxycblt/auxio/settings/ui/RootPreferenceFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/RootPreferenceFragment.kt similarity index 72% rename from app/src/main/java/org/oxycblt/auxio/settings/ui/RootPreferenceFragment.kt rename to app/src/main/java/org/oxycblt/auxio/settings/RootPreferenceFragment.kt index 2856d26b5..4bb3acecb 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/ui/RootPreferenceFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/RootPreferenceFragment.kt @@ -15,16 +15,19 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.settings.ui +package org.oxycblt.auxio.settings +import android.os.Bundle import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat +import com.google.android.material.transition.MaterialFadeThrough +import com.google.android.material.transition.MaterialSharedAxis import org.oxycblt.auxio.R import org.oxycblt.auxio.music.MusicViewModel import org.oxycblt.auxio.playback.PlaybackViewModel -import org.oxycblt.auxio.settings.SettingsFragmentDirections +import org.oxycblt.auxio.settings.ui.WrappedDialogPreference import org.oxycblt.auxio.util.androidActivityViewModels import org.oxycblt.auxio.util.showToast @@ -36,9 +39,18 @@ class RootPreferenceFragment : BasePreferenceFragment(R.xml.preferences_root) { private val playbackModel: PlaybackViewModel by androidActivityViewModels() private val musicModel: MusicViewModel by activityViewModels() + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + enterTransition = MaterialFadeThrough() + returnTransition = MaterialFadeThrough() + exitTransition = MaterialFadeThrough() + reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) + } + override fun onOpenDialogPreference(preference: WrappedDialogPreference) { if (preference.key == getString(R.string.set_key_music_dirs)) { - findNavController().navigate(SettingsFragmentDirections.goToMusicDirsDialog()) + findNavController().navigate(RootPreferenceFragmentDirections.goToMusicDirsDialog()) } } @@ -47,6 +59,21 @@ class RootPreferenceFragment : BasePreferenceFragment(R.xml.preferences_root) { // TODO: These seem like good things to put into a side navigation view, if I choose to // do one. when (preference.key) { + getString(R.string.set_key_ui) -> { + findNavController().navigate(RootPreferenceFragmentDirections.goToUiPreferences()) + } + getString(R.string.set_key_personalize) -> { + findNavController() + .navigate(RootPreferenceFragmentDirections.goToPersonalizePreferences()) + } + getString(R.string.set_key_music) -> { + findNavController() + .navigate(RootPreferenceFragmentDirections.goToMusicPreferences()) + } + getString(R.string.set_key_audio) -> { + findNavController() + .navigate(RootPreferenceFragmentDirections.goToAudioPreferences()) + } getString(R.string.set_key_reindex) -> musicModel.refresh() getString(R.string.set_key_rescan) -> musicModel.rescan() getString(R.string.set_key_save_state) -> { diff --git a/app/src/main/java/org/oxycblt/auxio/settings/SettingsFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/SettingsFragment.kt deleted file mode 100644 index 7e585e731..000000000 --- a/app/src/main/java/org/oxycblt/auxio/settings/SettingsFragment.kt +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2021 Auxio Project - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.oxycblt.auxio.settings - -import android.os.Bundle -import android.view.LayoutInflater -import androidx.fragment.app.Fragment -import com.google.android.material.transition.MaterialFadeThrough -import org.oxycblt.auxio.databinding.FragmentSettingsBinding -import org.oxycblt.auxio.ui.ViewBindingFragment - -/** - * A [Fragment] wrapper wrapping the preference navigation flow. - * @author Alexander Capehart (OxygenCobalt) - */ -class SettingsFragment : ViewBindingFragment() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - enterTransition = MaterialFadeThrough() - exitTransition = MaterialFadeThrough() - } - - override fun onCreateBinding(inflater: LayoutInflater) = - FragmentSettingsBinding.inflate(inflater) - - override fun onBindingCreated(binding: FragmentSettingsBinding, savedInstanceState: Bundle?) {} -} diff --git a/app/src/main/java/org/oxycblt/auxio/settings/ui/AudioPreferenceFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/categories/AudioPreferenceFragment.kt similarity index 81% rename from app/src/main/java/org/oxycblt/auxio/settings/ui/AudioPreferenceFragment.kt rename to app/src/main/java/org/oxycblt/auxio/settings/categories/AudioPreferenceFragment.kt index c9fd9f8f2..52506caf5 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/ui/AudioPreferenceFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/categories/AudioPreferenceFragment.kt @@ -15,11 +15,12 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.settings.ui +package org.oxycblt.auxio.settings.categories import androidx.navigation.fragment.findNavController import org.oxycblt.auxio.R -import org.oxycblt.auxio.settings.SettingsFragmentDirections +import org.oxycblt.auxio.settings.BasePreferenceFragment +import org.oxycblt.auxio.settings.ui.WrappedDialogPreference /** * Audio settings interface. @@ -29,7 +30,7 @@ class AudioPreferenceFragment : BasePreferenceFragment(R.xml.preferences_audio) override fun onOpenDialogPreference(preference: WrappedDialogPreference) { if (preference.key == getString(R.string.set_key_pre_amp)) { - findNavController().navigate(SettingsFragmentDirections.goToPreAmpDialog()) + findNavController().navigate(AudioPreferenceFragmentDirections.goToPreAmpDialog()) } } } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/ui/MusicPreferenceFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/categories/MusicPreferenceFragment.kt similarity index 85% rename from app/src/main/java/org/oxycblt/auxio/settings/ui/MusicPreferenceFragment.kt rename to app/src/main/java/org/oxycblt/auxio/settings/categories/MusicPreferenceFragment.kt index c963363bc..b38177d1e 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/ui/MusicPreferenceFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/categories/MusicPreferenceFragment.kt @@ -15,13 +15,14 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.settings.ui +package org.oxycblt.auxio.settings.categories import androidx.navigation.fragment.findNavController import androidx.preference.Preference import coil.Coil import org.oxycblt.auxio.R -import org.oxycblt.auxio.settings.SettingsFragmentDirections +import org.oxycblt.auxio.settings.BasePreferenceFragment +import org.oxycblt.auxio.settings.ui.WrappedDialogPreference /** * "Content" settings. @@ -30,7 +31,7 @@ import org.oxycblt.auxio.settings.SettingsFragmentDirections class MusicPreferenceFragment : BasePreferenceFragment(R.xml.preferences_music) { override fun onOpenDialogPreference(preference: WrappedDialogPreference) { if (preference.key == getString(R.string.set_key_separators)) { - findNavController().navigate(SettingsFragmentDirections.goToSeparatorsDialog()) + findNavController().navigate(MusicPreferenceFragmentDirections.goToSeparatorsDialog()) } } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/ui/PersonalizePreferenceFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/categories/PersonalizePreferenceFragment.kt similarity index 81% rename from app/src/main/java/org/oxycblt/auxio/settings/ui/PersonalizePreferenceFragment.kt rename to app/src/main/java/org/oxycblt/auxio/settings/categories/PersonalizePreferenceFragment.kt index 2a708fb33..73c5147ec 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/ui/PersonalizePreferenceFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/categories/PersonalizePreferenceFragment.kt @@ -15,11 +15,12 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.settings.ui +package org.oxycblt.auxio.settings.categories import androidx.navigation.fragment.findNavController import org.oxycblt.auxio.R -import org.oxycblt.auxio.settings.SettingsFragmentDirections +import org.oxycblt.auxio.settings.BasePreferenceFragment +import org.oxycblt.auxio.settings.ui.WrappedDialogPreference /** * Personalization settings interface. @@ -28,7 +29,7 @@ import org.oxycblt.auxio.settings.SettingsFragmentDirections class PersonalizePreferenceFragment : BasePreferenceFragment(R.xml.preferences_personalize) { override fun onOpenDialogPreference(preference: WrappedDialogPreference) { if (preference.key == getString(R.string.set_key_home_tabs)) { - findNavController().navigate(SettingsFragmentDirections.goToTabDialog()) + findNavController().navigate(PersonalizePreferenceFragmentDirections.goToTabDialog()) } } } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/ui/UIPreferenceFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/categories/UIPreferenceFragment.kt similarity index 89% rename from app/src/main/java/org/oxycblt/auxio/settings/ui/UIPreferenceFragment.kt rename to app/src/main/java/org/oxycblt/auxio/settings/categories/UIPreferenceFragment.kt index ccfd5c48e..443daff5b 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/ui/UIPreferenceFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/categories/UIPreferenceFragment.kt @@ -15,20 +15,21 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.settings.ui +package org.oxycblt.auxio.settings.categories import androidx.appcompat.app.AppCompatDelegate import androidx.navigation.fragment.findNavController import androidx.preference.Preference import org.oxycblt.auxio.R -import org.oxycblt.auxio.settings.SettingsFragmentDirections +import org.oxycblt.auxio.settings.BasePreferenceFragment +import org.oxycblt.auxio.settings.ui.WrappedDialogPreference import org.oxycblt.auxio.ui.UISettings import org.oxycblt.auxio.util.isNight class UIPreferenceFragment : BasePreferenceFragment(R.xml.preferences_ui) { override fun onOpenDialogPreference(preference: WrappedDialogPreference) { if (preference.key == getString(R.string.set_key_accent)) { - findNavController().navigate(SettingsFragmentDirections.goToAccentDialog()) + findNavController().navigate(UIPreferenceFragmentDirections.goToAccentDialog()) } } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/ui/PreferenceHeaderItemDecoration.kt b/app/src/main/java/org/oxycblt/auxio/settings/ui/PreferenceHeaderItemDecoration.kt index cd6a49771..5ab4b0ebf 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/ui/PreferenceHeaderItemDecoration.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/ui/PreferenceHeaderItemDecoration.kt @@ -17,6 +17,7 @@ package org.oxycblt.auxio.settings.ui +import android.annotation.SuppressLint import android.content.Context import android.util.AttributeSet import androidx.preference.PreferenceCategory @@ -39,6 +40,7 @@ constructor( defStyleAttr: Int = R.attr.materialDividerStyle, orientation: Int = LinearLayoutManager.VERTICAL ) : BackportMaterialDividerItemDecoration(context, attributeSet, defStyleAttr, orientation) { + @SuppressLint("RestrictedApi") override fun shouldDrawDivider(position: Int, adapter: RecyclerView.Adapter<*>?) = try { // Add a divider if the next item is a header (in this case a preference category diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml deleted file mode 100644 index cbe33ddf8..000000000 --- a/app/src/main/res/layout/fragment_settings.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - diff --git a/app/src/main/res/navigation/nav_main.xml b/app/src/main/res/navigation/nav_main.xml index d5c6c0b8d..27ab8499d 100644 --- a/app/src/main/res/navigation/nav_main.xml +++ b/app/src/main/res/navigation/nav_main.xml @@ -10,7 +10,7 @@ tools:layout="@layout/fragment_main"> + app:destination="@id/root_preferences_fragment" /> @@ -68,27 +68,64 @@ app:argType="org.oxycblt.auxio.music.Music$UID" /> + + android:id="@+id/root_preferences_fragment" + android:name="org.oxycblt.auxio.settings.RootPreferenceFragment" + android:label="fragment_settings"> + android:id="@+id/go_to_ui_preferences" + app:destination="@id/ui_preferences_fragment" /> + android:id="@+id/go_to_personalize_preferences" + app:destination="@id/personalize_preferences_fragment" /> + android:id="@+id/go_to_music_preferences" + app:destination="@id/music_preferences_fragment" /> + + + + + + + + + + + + + + + + + + auxio_ui + auxio_personalize + auxio_music + auxio_audio + KEY_THEME2 KEY_BLACK_THEME auxio_accent2 diff --git a/app/src/main/res/xml/preferences_root.xml b/app/src/main/res/xml/preferences_root.xml index 2549d5af1..980ce2c9c 100644 --- a/app/src/main/res/xml/preferences_root.xml +++ b/app/src/main/res/xml/preferences_root.xml @@ -3,26 +3,26 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:title="@string/set_root_title">