From 299c47e9c32116622ca317c1926d6c68ca72d332 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Sun, 21 Feb 2021 15:03:17 -0700 Subject: [PATCH] Scroll QueueFragment on shuffle toggle Scroll QueueFragment to the top when shuffle is toggled so that it does not flip out as much as it would otherwise. --- app/src/main/java/org/oxycblt/auxio/MainActivity.kt | 2 +- .../org/oxycblt/auxio/playback/PlaybackViewModel.kt | 3 ++- .../oxycblt/auxio/playback/queue/QueueFragment.kt | 13 +++++++++++-- .../metadata/android/en-US/full_description.txt | 2 +- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt index 385e6b566..e19beb68e 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt @@ -52,7 +52,7 @@ class MainActivity : AppCompatActivity() { // Since the activity is set to singleInstance [Given that there's only MainActivity] // We have to manually push the intent whenever we get one so that the fragments // can catch any file intents - // TODO: Improve this dumb chain system in one way or another + // TODO: If possible try to make this system completely setIntent(intent) } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt index f4c367aeb..7fb3ddf55 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt @@ -68,13 +68,14 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback { val userQueue: LiveData> get() = mUserQueue /** The current [PlaybackMode] that also determines the queue */ val mode: LiveData get() = mMode - + /** Whether playback is originating from the user-generated queue or not */ val isInUserQueue: LiveData = mIsInUserQueue val isPlaying: LiveData get() = mIsPlaying val isShuffling: LiveData get() = mIsShuffling /** The current repeat mode, see [LoopMode] for more information */ val loopMode: LiveData get() = mLoopMode + val isSeeking: LiveData get() = mIsSeeking val canAnimate: Boolean get() = mCanAnimate diff --git a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt index 83e8fc25c..c289673b4 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt @@ -42,6 +42,7 @@ class QueueFragment : Fragment() { val callback = QueueDragCallback(playbackModel) val helper = ItemTouchHelper(callback) val queueAdapter = QueueAdapter(helper, playbackModel) + var lastShuffle = playbackModel.isShuffling.value callback.addQueueAdapter(queueAdapter) @@ -96,14 +97,22 @@ class QueueFragment : Fragment() { queueAdapter.submitList(createQueueData()) } + playbackModel.isShuffling.observe(viewLifecycleOwner) { + if (it != lastShuffle) { + lastShuffle = it + + binding.queueRecycler.scrollToPosition(0) + } + } + return binding.root } override fun onResume() { super.onResume() - // QueueFragment shouldn't be handling file intents, as the effects it has on the recycler - // are really weird. + // QueueFragment shouldn't be handling file intents as it will cause the queue recycler + // to flip out if (shouldHandleFileIntent()) { findNavController().navigateUp() } diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt index eeac23030..bad2095f7 100644 --- a/fastlane/metadata/android/en-US/full_description.txt +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -14,4 +14,4 @@ Auxio is a local music player with a fast, reliable UI/UX without the many usele - No internet connectivity whatsoever - Kotlin from the ground-up - Modular, feature-based architecture -- No rounded corners \ No newline at end of file +- No rounded corners