From 2aa540c29a7d606fcc4e2eaf855dee54e7348879 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Wed, 14 Sep 2022 18:52:29 -0600 Subject: [PATCH] ui: make setting dialogs Make the setting dialogs navigation destinations. This reduces the boilerplate required for dialogs. --- .../java/org/oxycblt/auxio/MainFragment.kt | 9 +-- .../org/oxycblt/auxio/home/HomeFragment.kt | 5 +- .../auxio/home/tabs/TabCustomizeDialog.kt | 1 - .../java/org/oxycblt/auxio/music/MusicUtil.kt | 8 --- .../auxio/music/settings/MusicDirsDialog.kt | 1 - .../auxio/music/settings/SeparatorsDialog.kt | 1 - .../auxio/playback/PlaybackPanelFragment.kt | 9 ++- .../replaygain/PreAmpCustomizeDialog.kt | 1 - .../settings/{ui => }/IntListPreference.kt | 2 +- .../{ui => }/IntListPreferenceDialog.kt | 2 +- .../auxio/settings/SettingsListFragment.kt | 31 +++------ .../{ui => }/WrappedDialogPreference.kt | 2 +- .../oxycblt/auxio/ui/NavigationViewModel.kt | 11 +-- .../auxio/ui/accent/AccentCustomizeDialog.kt | 1 - .../oxycblt/auxio/ui/fragment/MenuFragment.kt | 7 +- .../res/menu/menu_playback_song_actions.xml | 12 ---- app/src/main/res/navigation/nav_main.xml | 68 +++++++++++++++---- app/src/main/res/values-lt/strings.xml | 4 +- app/src/main/res/values-pt-rBR/strings.xml | 6 +- app/src/main/res/xml/prefs_main.xml | 20 +++--- 20 files changed, 101 insertions(+), 100 deletions(-) rename app/src/main/java/org/oxycblt/auxio/settings/{ui => }/IntListPreference.kt (99%) rename app/src/main/java/org/oxycblt/auxio/settings/{ui => }/IntListPreferenceDialog.kt (98%) rename app/src/main/java/org/oxycblt/auxio/settings/{ui => }/WrappedDialogPreference.kt (97%) delete mode 100644 app/src/main/res/menu/menu_playback_song_actions.xml diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index def7306ee..11cbfd59f 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -232,13 +232,8 @@ class MainFragment : when (action) { is MainNavigationAction.Expand -> tryExpandAll() is MainNavigationAction.Collapse -> tryCollapseAll() - is MainNavigationAction.Settings -> - findNavController().navigate(MainFragmentDirections.actionShowSettings()) - is MainNavigationAction.About -> - findNavController().navigate(MainFragmentDirections.actionShowAbout()) - is MainNavigationAction.SongDetails -> - findNavController() - .navigate(MainFragmentDirections.actionShowDetails(action.song.uid)) + is MainNavigationAction.Directions -> + findNavController().navigate(action.directions) } navModel.finishMainNavigation() diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt index 6d77756da..237949314 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt @@ -37,6 +37,7 @@ import com.google.android.material.appbar.AppBarLayout import com.google.android.material.tabs.TabLayoutMediator import com.google.android.material.transition.MaterialSharedAxis import org.oxycblt.auxio.BuildConfig +import org.oxycblt.auxio.MainFragmentDirections import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentHomeBinding import org.oxycblt.auxio.home.list.AlbumListFragment @@ -185,11 +186,11 @@ class HomeFragment : ViewBindingFragment(), Toolbar.OnMenuI } R.id.action_settings -> { logD("Navigating to settings") - navModel.mainNavigateTo(MainNavigationAction.Settings) + navModel.mainNavigateTo(MainNavigationAction.Directions(MainFragmentDirections.actionShowSettings())) } R.id.action_about -> { logD("Navigating to about") - navModel.mainNavigateTo(MainNavigationAction.About) + navModel.mainNavigateTo(MainNavigationAction.Directions(MainFragmentDirections.actionShowAbout())) } R.id.submenu_sorting -> { // Junk click event when opening the menu 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 4a3257d9c..b3a3aaac1 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 @@ -110,7 +110,6 @@ class TabCustomizeDialog : ViewBindingDialogFragment(), TabAd } companion object { - const val TAG = BuildConfig.APPLICATION_ID + ".tag.TAB_CUSTOMIZE" const val KEY_TABS = BuildConfig.APPLICATION_ID + ".key.PENDING_TABS" } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicUtil.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicUtil.kt index e5a910425..cbf859da3 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicUtil.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicUtil.kt @@ -63,14 +63,6 @@ val Long.albumCoverUri: Uri fun Date?.resolveYear(context: Context) = this?.resolveYear(context) ?: context.getString(R.string.def_date) -/** Converts this string to a UUID, or returns null if it is not valid. */ -fun String.toUuid() = - try { - UUID.fromString(this) - } catch (e: IllegalArgumentException) { - null - } - /** Converts a long in milliseconds to a long in deci-seconds */ fun Long.msToDs() = floorDiv(100) diff --git a/app/src/main/java/org/oxycblt/auxio/music/settings/MusicDirsDialog.kt b/app/src/main/java/org/oxycblt/auxio/music/settings/MusicDirsDialog.kt index cdb53db14..74ac2c280 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/settings/MusicDirsDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/settings/MusicDirsDialog.kt @@ -184,7 +184,6 @@ class MusicDirsDialog : binding.folderModeGroup.checkedButtonId == R.id.dirs_mode_include companion object { - const val TAG = BuildConfig.APPLICATION_ID + ".tag.EXCLUDED" const val KEY_PENDING_DIRS = BuildConfig.APPLICATION_ID + ".key.PENDING_DIRS" const val KEY_PENDING_MODE = BuildConfig.APPLICATION_ID + ".key.SHOULD_INCLUDE" } diff --git a/app/src/main/java/org/oxycblt/auxio/music/settings/SeparatorsDialog.kt b/app/src/main/java/org/oxycblt/auxio/music/settings/SeparatorsDialog.kt index 755899521..5782c337c 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/settings/SeparatorsDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/settings/SeparatorsDialog.kt @@ -69,7 +69,6 @@ class SeparatorsDialog : ViewBindingDialogFragment() { } companion object { - const val TAG = BuildConfig.APPLICATION_ID + ".tag.EXCLUDED" private const val SEPARATOR_COMMA = ',' private const val SEPARATOR_SEMICOLON = ';' diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt index c1cfd7ed8..f749a9e72 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt @@ -27,6 +27,7 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.widget.Toolbar import androidx.core.view.updatePadding import androidx.fragment.app.Fragment +import org.oxycblt.auxio.MainFragmentDirections import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentPlaybackPanelBinding import org.oxycblt.auxio.music.MusicParent @@ -145,8 +146,12 @@ class PlaybackPanelFragment : true } R.id.action_song_detail -> { - playbackModel.song.value?.let { - navModel.mainNavigateTo(MainNavigationAction.SongDetails(it)) + playbackModel.song.value?.let { song -> + navModel.mainNavigateTo( + MainNavigationAction.Directions( + MainFragmentDirections.actionShowDetails(song.uid) + ) + ) } true diff --git a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/PreAmpCustomizeDialog.kt b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/PreAmpCustomizeDialog.kt index 18aeda31b..4b65090c9 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/PreAmpCustomizeDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/PreAmpCustomizeDialog.kt @@ -85,6 +85,5 @@ class PreAmpCustomizeDialog : ViewBindingDialogFragment() { } companion object { - const val TAG = BuildConfig.APPLICATION_ID + ".tag.PRE_AMP_CUSTOMIZE" } } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/ui/IntListPreference.kt b/app/src/main/java/org/oxycblt/auxio/settings/IntListPreference.kt similarity index 99% rename from app/src/main/java/org/oxycblt/auxio/settings/ui/IntListPreference.kt rename to app/src/main/java/org/oxycblt/auxio/settings/IntListPreference.kt index ee5957f82..95c5bcb37 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/ui/IntListPreference.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/IntListPreference.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.content.Context import android.content.res.TypedArray diff --git a/app/src/main/java/org/oxycblt/auxio/settings/ui/IntListPreferenceDialog.kt b/app/src/main/java/org/oxycblt/auxio/settings/IntListPreferenceDialog.kt similarity index 98% rename from app/src/main/java/org/oxycblt/auxio/settings/ui/IntListPreferenceDialog.kt rename to app/src/main/java/org/oxycblt/auxio/settings/IntListPreferenceDialog.kt index 1550bce2b..51a6c261c 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/ui/IntListPreferenceDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/IntListPreferenceDialog.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 androidx.preference.PreferenceDialogFragmentCompat 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 fbfeda4a6..7f2600a88 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt @@ -23,6 +23,7 @@ import androidx.annotation.DrawableRes import androidx.appcompat.app.AppCompatDelegate import androidx.core.view.updatePadding import androidx.fragment.app.activityViewModels +import androidx.navigation.fragment.findNavController import androidx.preference.Preference import androidx.preference.PreferenceCategory import androidx.preference.PreferenceFragmentCompat @@ -30,16 +31,9 @@ import androidx.preference.children import androidx.recyclerview.widget.RecyclerView import coil.Coil import org.oxycblt.auxio.R -import org.oxycblt.auxio.home.tabs.TabCustomizeDialog import org.oxycblt.auxio.music.MusicViewModel -import org.oxycblt.auxio.music.settings.MusicDirsDialog -import org.oxycblt.auxio.music.settings.SeparatorsDialog import org.oxycblt.auxio.playback.PlaybackViewModel -import org.oxycblt.auxio.playback.replaygain.PreAmpCustomizeDialog -import org.oxycblt.auxio.settings.ui.IntListPreference -import org.oxycblt.auxio.settings.ui.IntListPreferenceDialog -import org.oxycblt.auxio.settings.ui.WrappedDialogPreference -import org.oxycblt.auxio.ui.accent.AccentCustomizeDialog +import org.oxycblt.auxio.ui.NavigationViewModel import org.oxycblt.auxio.util.androidActivityViewModels import org.oxycblt.auxio.util.isNight import org.oxycblt.auxio.util.logD @@ -54,6 +48,7 @@ import org.oxycblt.auxio.util.systemBarInsetsCompat class SettingsListFragment : PreferenceFragmentCompat() { private val playbackModel: PlaybackViewModel by androidActivityViewModels() private val musicModel: MusicViewModel by activityViewModels() + private val navModel: NavigationViewModel by activityViewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -97,21 +92,15 @@ class SettingsListFragment : PreferenceFragmentCompat() { } is WrappedDialogPreference -> { val context = requireContext() - when (preference.key) { - context.getString(R.string.set_key_accent) -> - AccentCustomizeDialog() - .show(childFragmentManager, AccentCustomizeDialog.TAG) - context.getString(R.string.set_key_lib_tabs) -> - TabCustomizeDialog().show(childFragmentManager, TabCustomizeDialog.TAG) - context.getString(R.string.set_key_pre_amp) -> - PreAmpCustomizeDialog() - .show(childFragmentManager, PreAmpCustomizeDialog.TAG) - context.getString(R.string.set_key_music_dirs) -> - MusicDirsDialog().show(childFragmentManager, MusicDirsDialog.TAG) - getString(R.string.set_key_separators) -> - SeparatorsDialog().show(childFragmentManager, SeparatorsDialog.TAG) + val directions = when (preference.key) { + context.getString(R.string.set_key_accent) -> SettingsFragmentDirections.goToAccentDialog() + context.getString(R.string.set_key_lib_tabs) -> SettingsFragmentDirections.goToTabDialog() + context.getString(R.string.set_key_pre_amp) -> SettingsFragmentDirections.goToPreAmpDialog() + context.getString(R.string.set_key_music_dirs) -> SettingsFragmentDirections.goToMusicDirsDialog() + getString(R.string.set_key_separators) -> SettingsFragmentDirections.goToSeparatorsDialog() else -> error("Unexpected dialog key ${preference.key}") } + findNavController().navigate(directions) } else -> super.onDisplayPreferenceDialog(preference) } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/ui/WrappedDialogPreference.kt b/app/src/main/java/org/oxycblt/auxio/settings/WrappedDialogPreference.kt similarity index 97% rename from app/src/main/java/org/oxycblt/auxio/settings/ui/WrappedDialogPreference.kt rename to app/src/main/java/org/oxycblt/auxio/settings/WrappedDialogPreference.kt index 38d0ffa58..f3e0436f4 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/ui/WrappedDialogPreference.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/WrappedDialogPreference.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.content.Context import android.util.AttributeSet diff --git a/app/src/main/java/org/oxycblt/auxio/ui/NavigationViewModel.kt b/app/src/main/java/org/oxycblt/auxio/ui/NavigationViewModel.kt index cf1fd6ab0..539bea579 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/NavigationViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/NavigationViewModel.kt @@ -18,10 +18,10 @@ package org.oxycblt.auxio.ui import androidx.lifecycle.ViewModel +import androidx.navigation.NavDirections import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import org.oxycblt.auxio.music.Music -import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.util.logD /** @@ -91,12 +91,5 @@ sealed class MainNavigationAction { /** Collapse the playback panel. */ object Collapse : MainNavigationAction() - /** Go to settings. */ - object Settings : MainNavigationAction() - - /** Go to the about page. */ - object About : MainNavigationAction() - - /** Show song details. */ - data class SongDetails(val song: Song) : MainNavigationAction() + data class Directions(val directions: NavDirections) : MainNavigationAction() } 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 197b2382e..0912591de 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 @@ -80,7 +80,6 @@ class AccentCustomizeDialog : } companion object { - const val TAG = BuildConfig.APPLICATION_ID + ".tag.ACCENT_PICKER" const val KEY_PENDING_ACCENT = BuildConfig.APPLICATION_ID + ".key.PENDING_ACCENT" } } diff --git a/app/src/main/java/org/oxycblt/auxio/ui/fragment/MenuFragment.kt b/app/src/main/java/org/oxycblt/auxio/ui/fragment/MenuFragment.kt index e174a3299..d6c02d848 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/fragment/MenuFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/fragment/MenuFragment.kt @@ -23,6 +23,7 @@ import androidx.appcompat.widget.PopupMenu import androidx.core.view.children import androidx.fragment.app.activityViewModels import androidx.viewbinding.ViewBinding +import org.oxycblt.auxio.MainFragmentDirections import org.oxycblt.auxio.R import org.oxycblt.auxio.music.Album import org.oxycblt.auxio.music.Artist @@ -70,7 +71,11 @@ abstract class MenuFragment : ViewBindingFragment() { navModel.exploreNavigateTo(song.album) } R.id.action_song_detail -> { - navModel.mainNavigateTo(MainNavigationAction.SongDetails(song)) + navModel.mainNavigateTo( + MainNavigationAction.Directions( + MainFragmentDirections.actionShowDetails(song.uid) + ) + ) } else -> { error("Unexpected menu item selected") diff --git a/app/src/main/res/menu/menu_playback_song_actions.xml b/app/src/main/res/menu/menu_playback_song_actions.xml deleted file mode 100644 index e9ba0a9bb..000000000 --- a/app/src/main/res/menu/menu_playback_song_actions.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/navigation/nav_main.xml b/app/src/main/res/navigation/nav_main.xml index 0e10c762d..147eadaa3 100644 --- a/app/src/main/res/navigation/nav_main.xml +++ b/app/src/main/res/navigation/nav_main.xml @@ -19,21 +19,6 @@ app:destination="@id/song_detail_dialog" /> - - - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 4f95ef836..2df44e3d8 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -102,6 +102,7 @@ %d albumas %d albumai + %d albumo %d albumo Remiksai @@ -112,6 +113,7 @@ %d daina %d dainos + %d dainą %d dainą Dinaminis @@ -194,7 +196,7 @@ Įkrauti žanrai: %d Įkrauti albumai: %d Įkelti atlikėjai: %d - Kraunama jūsų muzikos biblioteka... (%1$d/%2$d) + Kraunama jūsų muzikos biblioteka… (%1$d/%2$d) Maišyti visas dainas Elgesys Įspėjimas: Keičiant išankstinį stiprintuvą į didelę teigiamą vertę, kai kuriuose garso takeliuose gali atsirasti pikų. diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index d327705f9..e8ab69445 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -64,13 +64,11 @@ Músicas carregadas: %d %d música - %d músicas - + %d músicas %d álbum - %d álbuns - + %d álbuns Crescente Ver propriedades diff --git a/app/src/main/res/xml/prefs_main.xml b/app/src/main/res/xml/prefs_main.xml index 948cecc4c..d6b9e7048 100644 --- a/app/src/main/res/xml/prefs_main.xml +++ b/app/src/main/res/xml/prefs_main.xml @@ -2,7 +2,7 @@ - - @@ -27,7 +27,7 @@ - @@ -51,7 +51,7 @@ app:summary="@string/set_round_mode_desc" app:title="@string/set_round_mode" /> - - - @@ -90,7 +90,7 @@ - - - -