From 50c8dac2974479d9332043190e1ee545f69ece15 Mon Sep 17 00:00:00 2001 From: Antoine POPINEAU Date: Tue, 1 Sep 2020 21:06:00 +0200 Subject: [PATCH] #66: add queue actions to clear or shuffle the queue. --- .../apognu/otter/fragments/QueueFragment.kt | 8 ++++ .../apognu/otter/playback/PlayerService.kt | 1 + .../apognu/otter/playback/QueueManager.kt | 21 +++++++++ .../java/com/github/apognu/otter/utils/Bus.kt | 1 + app/src/main/res/layout/partial_queue.xml | 45 +++++++++++++++++-- app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 7 files changed, 75 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/github/apognu/otter/fragments/QueueFragment.kt b/app/src/main/java/com/github/apognu/otter/fragments/QueueFragment.kt index 904970c..b401a39 100644 --- a/app/src/main/java/com/github/apognu/otter/fragments/QueueFragment.kt +++ b/app/src/main/java/com/github/apognu/otter/fragments/QueueFragment.kt @@ -62,6 +62,14 @@ class QueueFragment : BottomSheetDialogFragment() { included.queue?.visibility = View.GONE placeholder?.visibility = View.VISIBLE + queue_shuffle.setOnClickListener { + CommandBus.send(Command.ShuffleQueue) + } + + queue_clear.setOnClickListener { + CommandBus.send(Command.ClearQueue) + } + refresh() } diff --git a/app/src/main/java/com/github/apognu/otter/playback/PlayerService.kt b/app/src/main/java/com/github/apognu/otter/playback/PlayerService.kt index 89ab7eb..75bc7d9 100644 --- a/app/src/main/java/com/github/apognu/otter/playback/PlayerService.kt +++ b/app/src/main/java/com/github/apognu/otter/playback/PlayerService.kt @@ -186,6 +186,7 @@ class PlayerService : Service() { is Command.Seek -> seek(command.progress) is Command.ClearQueue -> queue.clear() + is Command.ShuffleQueue -> queue.shuffle() is Command.PlayRadio -> { queue.clear() diff --git a/app/src/main/java/com/github/apognu/otter/playback/QueueManager.kt b/app/src/main/java/com/github/apognu/otter/playback/QueueManager.kt index 96187c3..6f79967 100644 --- a/app/src/main/java/com/github/apognu/otter/playback/QueueManager.kt +++ b/app/src/main/java/com/github/apognu/otter/playback/QueueManager.kt @@ -179,4 +179,25 @@ class QueueManager(val context: Context) { datasources.clear() current = -1 } + + fun shuffle() { + if (metadata.size == 0) return + + if (current == -1) { + replace(metadata.shuffled()) + } else { + val track = metadata[current] + val shuffled = metadata.filter { it != track }.shuffled() + + shuffled.forEach { + metadata.remove(it) + } + + append(shuffled) + + current = 0 + } + + EventBus.send(Event.QueueChanged) + } } \ No newline at end of file diff --git a/app/src/main/java/com/github/apognu/otter/utils/Bus.kt b/app/src/main/java/com/github/apognu/otter/utils/Bus.kt index 6cf2dd2..203e4f9 100644 --- a/app/src/main/java/com/github/apognu/otter/utils/Bus.kt +++ b/app/src/main/java/com/github/apognu/otter/utils/Bus.kt @@ -27,6 +27,7 @@ sealed class Command { class RemoveFromQueue(val track: Track) : Command() class MoveFromQueue(val oldPosition: Int, val newPosition: Int) : Command() object ClearQueue : Command() + object ShuffleQueue : Command() class PlayRadio(val radio: Radio) : Command() class SetRepeatMode(val mode: Int) : Command() diff --git a/app/src/main/res/layout/partial_queue.xml b/app/src/main/res/layout/partial_queue.xml index 687875b..cc3f6a7 100644 --- a/app/src/main/res/layout/partial_queue.xml +++ b/app/src/main/res/layout/partial_queue.xml @@ -1,8 +1,47 @@ - + android:orientation="vertical"> + + + +