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">
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 044d690..c93ebf7 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -63,6 +63,7 @@
Ajouter à la liste de lecture
Prochaine écoute
Télécharger
+ Effacer
Ajouter aux favoris
Lecture / pause
Piste précédente
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 891ce0d..3461b9d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -64,6 +64,7 @@
Add to queue
Play next
Download
+ Clear
Add to favorites
Toggle playback
Previous track