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" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+