From 94e2c3c3e4b7c2b2cbd7ef0c2ee58f32414b419d Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Mon, 16 Oct 2023 21:33:53 -0600 Subject: [PATCH] playback: further pager cleanup - Use Replace instead of Diff for now since that avoids the scroll state freaking out. In practice I'll likely need to radically refactor this system (AGAIN...) to make the queue updates 100% fine-grained, even during shuffling. - Remove the behaivor of staying paused on the next track. That's covered by #568. --- .../org/oxycblt/auxio/playback/PlaybackPanelFragment.kt | 8 ++++---- .../org/oxycblt/auxio/playback/queue/QueueFragment.kt | 2 +- .../org/oxycblt/auxio/playback/queue/QueueViewModel.kt | 4 ++-- .../oxycblt/auxio/playback/state/PlaybackStateManager.kt | 7 +++---- .../auxio/playback/system/MediaSessionComponent.kt | 2 +- 5 files changed, 11 insertions(+), 12 deletions(-) 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 9738f1de3..53cbbe7fb 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt @@ -175,7 +175,7 @@ class PlaybackPanelFragment : } private fun updateQueue(queue: List) { - coverAdapter?.update(queue, UpdateInstructions.Diff) + coverAdapter?.update(queue, UpdateInstructions.Replace(0)) } private fun updateQueuePosition(position: Int) { @@ -239,7 +239,7 @@ class PlaybackPanelFragment : // TODO } - private class OnCoverChangedCallback(private val viewModel: QueueViewModel) : + private class OnCoverChangedCallback(private val queueViewModel: QueueViewModel) : OnPageChangeCallback() { private var targetPosition = RecyclerView.NO_POSITION @@ -253,8 +253,8 @@ class PlaybackPanelFragment : super.onPageScrollStateChanged(state) if (state == ViewPager2.SCROLL_STATE_IDLE && targetPosition != RecyclerView.NO_POSITION && - targetPosition != viewModel.index.value) { - viewModel.goto(targetPosition, playIfPaused = false) + targetPosition != queueViewModel.index.value) { + queueViewModel.goto(targetPosition) } } } 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 ca3a924c4..2db007971 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 @@ -88,7 +88,7 @@ class QueueFragment : ViewBindingFragment(), EditClickList } override fun onClick(item: Song, viewHolder: RecyclerView.ViewHolder) { - queueModel.goto(viewHolder.bindingAdapterPosition, playIfPaused = true) + queueModel.goto(viewHolder.bindingAdapterPosition) } override fun onPickUp(viewHolder: RecyclerView.ViewHolder) { diff --git a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueViewModel.kt b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueViewModel.kt index 12a51bbf7..acf47a421 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueViewModel.kt @@ -108,12 +108,12 @@ class QueueViewModel @Inject constructor(private val playbackManager: PlaybackSt * range. * @param playIfPaused Start playing after switching even if it currently is paused */ - fun goto(adapterIndex: Int, playIfPaused: Boolean) { + fun goto(adapterIndex: Int) { if (adapterIndex !in queue.value.indices) { return } logD("Going to position $adapterIndex in queue") - playbackManager.goto(adapterIndex, playIfPaused || playbackManager.playerState.isPlaying) + playbackManager.goto(adapterIndex) } /** diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt index 7071f5111..870d7a84e 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt @@ -120,9 +120,8 @@ interface PlaybackStateManager { * Play a [Song] at the given position in the queue. * * @param index The position of the [Song] in the queue to start playing. - * @param play Whether to start playing after switching to target index */ - fun goto(index: Int, play: Boolean) + fun goto(index: Int) /** * Add [Song]s to the top of the queue. @@ -430,12 +429,12 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager { } @Synchronized - override fun goto(index: Int, play: Boolean) { + override fun goto(index: Int) { val internalPlayer = internalPlayer ?: return if (queue.goto(index)) { logD("Moving to $index") notifyIndexMoved() - internalPlayer.loadSong(queue.currentSong, play) + internalPlayer.loadSong(queue.currentSong, true) } else { logW("$index was not in bounds, could not move to it") } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/MediaSessionComponent.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/MediaSessionComponent.kt index efb266eab..1910b1a01 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/MediaSessionComponent.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/MediaSessionComponent.kt @@ -256,7 +256,7 @@ constructor( } override fun onSkipToQueueItem(id: Long) { - playbackManager.goto(id.toInt(), true) + playbackManager.goto(id.toInt()) } override fun onCustomAction(action: String?, extras: Bundle?) {