From fcbce0fb98fca6d912fa03c4bc8e7a354a587bfd Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Tue, 27 Jun 2023 20:05:04 -0600 Subject: [PATCH] ui: fix issues from new nav Fix miscellanious issues from the flattened nav graph system. Nowhere near enough, largely counting on the planned bottom sheet menus to eventually be able to ignore most of these issues. --- app/build.gradle | 2 +- .../auxio/detail/AlbumDetailFragment.kt | 19 ++++++----- .../auxio/detail/ArtistDetailFragment.kt | 17 +++++----- .../auxio/detail/GenreDetailFragment.kt | 18 +++++------ .../auxio/detail/PlaylistDetailFragment.kt | 18 +++++------ .../org/oxycblt/auxio/home/HomeFragment.kt | 32 +++++++++---------- .../org/oxycblt/auxio/music/MusicViewModel.kt | 3 +- .../auxio/playback/PlaybackPanelFragment.kt | 17 ++++++++-- .../playback/persist/PersistenceDatabase.kt | 1 - .../org/oxycblt/auxio/search/SearchEngine.kt | 2 -- .../oxycblt/auxio/search/SearchFragment.kt | 30 +++++++---------- .../auxio/settings/RootPreferenceFragment.kt | 2 +- 12 files changed, 80 insertions(+), 81 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0a14a0b74..c38c26e0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -116,7 +116,7 @@ dependencies { implementation "androidx.preference:preference-ktx:1.2.0" // Database - def room_version = '2.6.0-alpha01' + def room_version = '2.6.0-alpha02' implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version" implementation "androidx.room:room-ktx:$room_version" diff --git a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt index b0c60107f..8bf635e5e 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -222,7 +222,7 @@ class AlbumDetailFragment : } override fun onNavigateToParentArtist() { - detailModel.showAlbum(unlikelyToBeNull(detailModel.currentAlbum.value)) + detailModel.showArtist(unlikelyToBeNull(detailModel.currentAlbum.value)) } private fun updateAlbum(album: Album?) { @@ -314,18 +314,17 @@ class AlbumDetailFragment : private fun handleDecision(decision: PlaylistDecision?) { when (decision) { - is PlaylistDecision.Add ->{ + is PlaylistDecision.Add -> { logD("Adding ${decision.songs.size} songs to a playlist") - findNavController().navigateSafe( - AlbumDetailFragmentDirections.addToPlaylist( - decision.songs.map { it.uid }.toTypedArray()) - ) + findNavController() + .navigateSafe( + AlbumDetailFragmentDirections.addToPlaylist( + decision.songs.map { it.uid }.toTypedArray())) musicModel.playlistDecision.consume() } - - is PlaylistDecision.New, is PlaylistDecision.Rename, is PlaylistDecision.Delete -> - error("Unexpected decision $decision") - + is PlaylistDecision.New, + is PlaylistDecision.Rename, + is PlaylistDecision.Delete -> error("Unexpected decision $decision") null -> {} } } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt index 347c13a1b..86208424b 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -324,18 +324,17 @@ class ArtistDetailFragment : private fun handleDecision(decision: PlaylistDecision?) { when (decision) { - is PlaylistDecision.Add ->{ + is PlaylistDecision.Add -> { logD("Adding ${decision.songs.size} songs to a playlist") - findNavController().navigateSafe( - ArtistDetailFragmentDirections.addToPlaylist( - decision.songs.map { it.uid }.toTypedArray()) - ) + findNavController() + .navigateSafe( + ArtistDetailFragmentDirections.addToPlaylist( + decision.songs.map { it.uid }.toTypedArray())) musicModel.playlistDecision.consume() } - - is PlaylistDecision.New, is PlaylistDecision.Rename, is PlaylistDecision.Delete -> - error("Unexpected decision $decision") - + is PlaylistDecision.New, + is PlaylistDecision.Rename, + is PlaylistDecision.Delete -> error("Unexpected decision $decision") null -> {} } } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt index d0d4ff1bd..a2d2e2cd9 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -289,6 +289,7 @@ class GenreDetailFragment : } is Show.GenreDetails -> { logD("Navigated to this genre") + detailModel.toShow.consume() } is Show.PlaylistDetails -> { error("Unexpected show command $show") @@ -311,18 +312,17 @@ class GenreDetailFragment : private fun handleDecision(decision: PlaylistDecision?) { when (decision) { - is PlaylistDecision.Add ->{ + is PlaylistDecision.Add -> { logD("Adding ${decision.songs.size} songs to a playlist") - findNavController().navigateSafe( - GenreDetailFragmentDirections.addToPlaylist( - decision.songs.map { it.uid }.toTypedArray()) - ) + findNavController() + .navigateSafe( + GenreDetailFragmentDirections.addToPlaylist( + decision.songs.map { it.uid }.toTypedArray())) musicModel.playlistDecision.consume() } - - is PlaylistDecision.New, is PlaylistDecision.Rename, is PlaylistDecision.Delete -> - error("Unexpected decision $decision") - + is PlaylistDecision.New, + is PlaylistDecision.Rename, + is PlaylistDecision.Delete -> error("Unexpected decision $decision") null -> {} } } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/PlaylistDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/PlaylistDetailFragment.kt index 38aac6dcf..dc13ef831 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/PlaylistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/PlaylistDetailFragment.kt @@ -336,6 +336,7 @@ class PlaylistDetailFragment : } is Show.PlaylistDetails -> { logD("Navigated to this playlist") + detailModel.toShow.consume() } is Show.GenreDetails -> { error("Unexpected show command $show") @@ -359,19 +360,18 @@ class PlaylistDetailFragment : when (decision) { is PlaylistDecision.Rename -> { logD("Renaming ${decision.playlist}") - findNavController().navigateSafe( - PlaylistDetailFragmentDirections.renamePlaylist(decision.playlist.uid) - ) + findNavController() + .navigateSafe( + PlaylistDetailFragmentDirections.renamePlaylist(decision.playlist.uid)) } - is PlaylistDecision.Delete -> { logD("Deleting ${decision.playlist}") - findNavController().navigateSafe( - PlaylistDetailFragmentDirections.deletePlaylist(decision.playlist.uid) - ) + findNavController() + .navigateSafe( + PlaylistDetailFragmentDirections.deletePlaylist(decision.playlist.uid)) } - - is PlaylistDecision.Add, is PlaylistDecision.New -> error("Unexpected decision $decision") + is PlaylistDecision.Add, + is PlaylistDecision.New -> error("Unexpected decision $decision") } musicModel.playlistDecision.consume() } 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 3d08cdfa0..7aa4dbe5f 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt @@ -486,29 +486,27 @@ class HomeFragment : when (decision) { is PlaylistDecision.New -> { logD("Creating new playlist") - findNavController().navigateSafe( - HomeFragmentDirections.newPlaylist(decision.songs.map { it.uid }.toTypedArray())) + findNavController() + .navigateSafe( + HomeFragmentDirections.newPlaylist( + decision.songs.map { it.uid }.toTypedArray())) } - is PlaylistDecision.Rename -> { logD("Renaming ${decision.playlist}") - findNavController().navigateSafe( - HomeFragmentDirections.renamePlaylist(decision.playlist.uid) - ) + findNavController() + .navigateSafe(HomeFragmentDirections.renamePlaylist(decision.playlist.uid)) } - is PlaylistDecision.Delete -> { logD("Deleting ${decision.playlist}") - findNavController().navigateSafe( - HomeFragmentDirections.deletePlaylist(decision.playlist.uid) - ) + findNavController() + .navigateSafe(HomeFragmentDirections.deletePlaylist(decision.playlist.uid)) } - is PlaylistDecision.Add -> { logD("Adding ${decision.songs.size} to a playlist") - findNavController().navigateSafe( - HomeFragmentDirections.addToPlaylist(decision.songs.map { it.uid }.toTypedArray()) - ) + findNavController() + .navigateSafe( + HomeFragmentDirections.addToPlaylist( + decision.songs.map { it.uid }.toTypedArray())) } } musicModel.playlistDecision.consume() @@ -560,11 +558,11 @@ class HomeFragment : } is Show.SongArtistDetails -> { logD("Navigating to artist choices for ${show.song}") - findNavController().navigateSafe(HomeFragmentDirections.showArtist(show.song.uid)) + findNavController().navigateSafe(HomeFragmentDirections.showArtists(show.song.uid)) } is Show.AlbumArtistDetails -> { logD("Navigating to artist choices for ${show.album}") - findNavController().navigateSafe(HomeFragmentDirections.showArtist(show.album.uid)) + findNavController().navigateSafe(HomeFragmentDirections.showArtists(show.album.uid)) } is Show.GenreDetails -> { logD("Navigating to ${show.genre}") @@ -573,7 +571,7 @@ class HomeFragment : is Show.PlaylistDetails -> { logD("Navigating to ${show.playlist}") findNavController() - .navigateSafe(HomeFragmentDirections.showGenre(show.playlist.uid)) + .navigateSafe(HomeFragmentDirections.showPlaylist(show.playlist.uid)) } null -> {} } diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt index b8717d220..5c2b2b86a 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt @@ -53,7 +53,8 @@ constructor( get() = _statistics private val _playlistDecision = MutableEvent() - val playlistDecision: Event get() = _playlistDecision + val playlistDecision: Event + get() = _playlistDecision init { musicRepository.addUpdateListener(this) 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 0f1c2b57b..02b59c01e 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt @@ -96,7 +96,12 @@ class PlaybackPanelFragment : // respective item. binding.playbackSong.apply { isSelected = true - setOnClickListener { playbackModel.song.value?.let(detailModel::showAlbum) } + setOnClickListener { + playbackModel.song.value?.let { + detailModel.showAlbum(it) + playbackModel.openMain() + } + } } binding.playbackArtist.apply { isSelected = true @@ -229,10 +234,16 @@ class PlaybackPanelFragment : } private fun navigateToCurrentArtist() { - playbackModel.song.value?.let(detailModel::showArtist) + playbackModel.song.value?.let { + detailModel.showArtist(it) + playbackModel.openMain() + } } private fun navigateToCurrentAlbum() { - playbackModel.song.value?.let(detailModel::showAlbum) + playbackModel.song.value?.let { + detailModel.showAlbum(it.album) + playbackModel.openMain() + } } } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/persist/PersistenceDatabase.kt b/app/src/main/java/org/oxycblt/auxio/playback/persist/PersistenceDatabase.kt index 466b56812..82ba84ddb 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/persist/PersistenceDatabase.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/persist/PersistenceDatabase.kt @@ -136,7 +136,6 @@ interface QueueDao { } // TODO: Figure out how to get RepeatMode to map to an int instead of a string -// TODO: Use intrinsic table names rather than custom names @Entity data class PlaybackState( @PrimaryKey val id: Int, diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchEngine.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchEngine.kt index 24c5389fd..2c8d9158f 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchEngine.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchEngine.kt @@ -35,8 +35,6 @@ import org.oxycblt.auxio.util.logD * Implements the fuzzy-ish searching algorithm used in the search view. * * @author Alexander Capehart - * - * TODO: Handle locale changes */ interface SearchEngine { /** diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt index 7239221f0..4efc4c704 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt @@ -34,7 +34,6 @@ import com.google.android.material.transition.MaterialSharedAxis import dagger.hilt.android.AndroidEntryPoint import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentSearchBinding -import org.oxycblt.auxio.detail.ArtistDetailFragmentDirections import org.oxycblt.auxio.detail.DetailViewModel import org.oxycblt.auxio.detail.Show import org.oxycblt.auxio.home.HomeFragmentDirections @@ -204,8 +203,6 @@ class SearchFragment : ListFragment() { } } - - private fun handleShow(show: Show?) { when (show) { is Show.SongDetails -> { @@ -259,35 +256,32 @@ class SearchFragment : ListFragment() { hideKeyboard() } - private fun handleDecision(decision: PlaylistDecision?) { if (decision == null) return when (decision) { is PlaylistDecision.New -> { logD("Creating new playlist") - findNavController().navigateSafe( - HomeFragmentDirections.newPlaylist(decision.songs.map { it.uid }.toTypedArray())) + findNavController() + .navigateSafe( + HomeFragmentDirections.newPlaylist( + decision.songs.map { it.uid }.toTypedArray())) } - is PlaylistDecision.Rename -> { logD("Renaming ${decision.playlist}") - findNavController().navigateSafe( - HomeFragmentDirections.renamePlaylist(decision.playlist.uid) - ) + findNavController() + .navigateSafe(HomeFragmentDirections.renamePlaylist(decision.playlist.uid)) } - is PlaylistDecision.Delete -> { logD("Deleting ${decision.playlist}") - findNavController().navigateSafe( - SearchFragmentDirections.deletePlaylist(decision.playlist.uid) - ) + findNavController() + .navigateSafe(SearchFragmentDirections.deletePlaylist(decision.playlist.uid)) } - is PlaylistDecision.Add -> { logD("Adding ${decision.songs.size} to a playlist") - findNavController().navigateSafe( - HomeFragmentDirections.addToPlaylist(decision.songs.map { it.uid }.toTypedArray()) - ) + findNavController() + .navigateSafe( + HomeFragmentDirections.addToPlaylist( + decision.songs.map { it.uid }.toTypedArray())) } } musicModel.playlistDecision.consume() diff --git a/app/src/main/java/org/oxycblt/auxio/settings/RootPreferenceFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/RootPreferenceFragment.kt index 8e8f3d589..4149cc0f5 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/RootPreferenceFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/RootPreferenceFragment.kt @@ -55,7 +55,7 @@ class RootPreferenceFragment : BasePreferenceFragment(R.xml.preferences_root) { override fun onOpenDialogPreference(preference: WrappedDialogPreference) { if (preference.key == getString(R.string.set_key_music_dirs)) { - findNavController().navigate(RootPreferenceFragmentDirections.musicDirsSettings()) + findNavController().navigateSafe(RootPreferenceFragmentDirections.musicDirsSettings()) } }