From 67e67ca1d0188a46522341ccc22af345b0773f1f Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Sat, 25 Mar 2023 15:30:13 -0600 Subject: [PATCH] playback: generalize make playback panel opening If the user clicks on the playback bar in any context, including the queue view, open the playback panel. This adds another means to closing the queue that does not involve swiping. Resolves #402. --- CHANGELOG.md | 5 ++++ .../java/org/oxycblt/auxio/MainFragment.kt | 23 ++++++++++++++----- .../org/oxycblt/auxio/music/MusicViewModel.kt | 1 + .../auxio/playback/PlaybackBarFragment.kt | 2 +- .../auxio/playback/PlaybackPanelFragment.kt | 4 +++- .../oxycblt/auxio/ui/NavigationViewModel.kt | 4 ++-- 6 files changed, 29 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3cb8cd40a..b18f594f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## dev + +## What's Improved +- Added ability to click on the playback bar to exit the queue view + ## 3.0.4 #### What's New diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index 6c1913d5f..8ce51e915 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -268,8 +268,8 @@ class MainFragment : } when (action) { - is MainNavigationAction.Expand -> tryExpandSheets() - is MainNavigationAction.Collapse -> tryCollapseSheets() + is MainNavigationAction.OpenPlaybackPanel -> tryOpenPlaybackPanel() + is MainNavigationAction.ClosePlaybackPanel -> tryClosePlaybackPanel() is MainNavigationAction.Directions -> findNavController().navigateSafe(action.directions) } @@ -279,7 +279,7 @@ class MainFragment : private fun handleExploreNavigation(item: Music?) { if (item != null) { - tryCollapseSheets() + tryClosePlaybackPanel() } } @@ -318,22 +318,33 @@ class MainFragment : } } - private fun tryExpandSheets() { + private fun tryOpenPlaybackPanel() { val binding = requireBinding() val playbackSheetBehavior = binding.playbackSheet.coordinatorLayoutBehavior as PlaybackBottomSheetBehavior + if (playbackSheetBehavior.state == BackportBottomSheetBehavior.STATE_COLLAPSED) { // Playback sheet is not expanded and not hidden, we can expand it. playbackSheetBehavior.state = BackportBottomSheetBehavior.STATE_EXPANDED + return + } + + val queueSheetBehavior = + (binding.queueSheet.coordinatorLayoutBehavior ?: return) as QueueBottomSheetBehavior + if (playbackSheetBehavior.state == BackportBottomSheetBehavior.STATE_EXPANDED && + queueSheetBehavior.state == BackportBottomSheetBehavior.STATE_EXPANDED) { + // Queue sheet and playback sheet is expanded, close the queue sheet so the + // playback panel can eb shown. + queueSheetBehavior.state = BackportBottomSheetBehavior.STATE_COLLAPSED } } - private fun tryCollapseSheets() { + private fun tryClosePlaybackPanel() { val binding = requireBinding() val playbackSheetBehavior = binding.playbackSheet.coordinatorLayoutBehavior as PlaybackBottomSheetBehavior if (playbackSheetBehavior.state == BackportBottomSheetBehavior.STATE_EXPANDED) { - // Make sure the queue is also collapsed here. + // Playback sheet (and possibly queue) needs to be collapsed. val queueSheetBehavior = binding.queueSheet.coordinatorLayoutBehavior as QueueBottomSheetBehavior? playbackSheetBehavior.state = BackportBottomSheetBehavior.STATE_COLLAPSED 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 c613fc8ea..9397661ba 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt @@ -80,6 +80,7 @@ class MusicViewModel @Inject constructor(private val musicRepository: MusicRepos /** * Create a new generic playlist. + * * @param name The name of the new playlist. If null, the user will be prompted for a name. */ fun createPlaylist(name: String? = null) { 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 bda248be7..29c0d889e 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt @@ -56,7 +56,7 @@ class PlaybackBarFragment : ViewBindingFragment() { // --- UI SETUP --- binding.root.apply { - setOnClickListener { navModel.mainNavigateTo(MainNavigationAction.Expand) } + setOnClickListener { navModel.mainNavigateTo(MainNavigationAction.OpenPlaybackPanel) } setOnLongClickListener { playbackModel.song.value?.let(navModel::exploreNavigateTo) true 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 67137eeb9..c185d0db7 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt @@ -84,7 +84,9 @@ class PlaybackPanelFragment : } binding.playbackToolbar.apply { - setNavigationOnClickListener { navModel.mainNavigateTo(MainNavigationAction.Collapse) } + setNavigationOnClickListener { + navModel.mainNavigateTo(MainNavigationAction.ClosePlaybackPanel) + } setOnMenuItemClickListener(this@PlaybackPanelFragment) } 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 116f57013..17d5b9d23 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/NavigationViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/NavigationViewModel.kt @@ -128,10 +128,10 @@ class NavigationViewModel : ViewModel() { */ sealed class MainNavigationAction { /** Expand the playback panel. */ - object Expand : MainNavigationAction() + object OpenPlaybackPanel : MainNavigationAction() /** Collapse the playback bottom sheet. */ - object Collapse : MainNavigationAction() + object ClosePlaybackPanel : MainNavigationAction() /** * Navigate to the given [NavDirections].