From 7837ce1c601cfbec988ca4b18a69d0a2deb7bdc4 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Fri, 28 Oct 2022 22:08:50 +0200 Subject: [PATCH 1/4] add shuffle and clear to playing queue --- .../libretube/ui/sheets/PlayingQueueSheet.kt | 21 +++++- app/src/main/res/drawable/ic_shuffle.xml | 10 +++ .../main/res/layout/queue_bottom_sheet.xml | 66 +++++++++++++++++++ 3 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/drawable/ic_shuffle.xml create mode 100644 app/src/main/res/layout/queue_bottom_sheet.xml diff --git a/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt index 1292b7377..d8038e513 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt @@ -7,20 +7,20 @@ import android.view.ViewGroup import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.github.libretube.databinding.BottomSheetBinding +import com.github.libretube.databinding.QueueBottomSheetBinding import com.github.libretube.ui.adapters.PlayingQueueAdapter import com.github.libretube.util.PlayingQueue import com.google.android.material.bottomsheet.BottomSheetDialogFragment class PlayingQueueSheet : BottomSheetDialogFragment() { - private lateinit var binding: BottomSheetBinding + private lateinit var binding: QueueBottomSheetBinding override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { - binding = BottomSheetBinding.inflate(layoutInflater) + binding = QueueBottomSheetBinding.inflate(layoutInflater) return binding.root } @@ -31,6 +31,21 @@ class PlayingQueueSheet : BottomSheetDialogFragment() { val adapter = PlayingQueueAdapter() binding.optionsRecycler.adapter = adapter + binding.shuffle.setOnClickListener { + val streams = PlayingQueue.getStreams() + streams.subList(PlayingQueue.currentIndex(), PlayingQueue.size()).shuffle() + adapter.notifyItemRangeChanged(0, PlayingQueue.size()) + } + + binding.clear.setOnClickListener { + val streams = PlayingQueue.getStreams() + streams.subList(PlayingQueue.currentIndex(), PlayingQueue.size()).clear() + } + + binding.bottomControls.setOnClickListener { + dialog?.dismiss() + } + val callback = object : ItemTouchHelper.SimpleCallback( ItemTouchHelper.UP or ItemTouchHelper.DOWN, ItemTouchHelper.LEFT diff --git a/app/src/main/res/drawable/ic_shuffle.xml b/app/src/main/res/drawable/ic_shuffle.xml new file mode 100644 index 000000000..76ff342cd --- /dev/null +++ b/app/src/main/res/drawable/ic_shuffle.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/queue_bottom_sheet.xml b/app/src/main/res/layout/queue_bottom_sheet.xml new file mode 100644 index 000000000..7f6a0a8eb --- /dev/null +++ b/app/src/main/res/layout/queue_bottom_sheet.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 67982186c644bd59504e287308d73ef81be396ce Mon Sep 17 00:00:00 2001 From: Bnyro Date: Fri, 28 Oct 2022 22:18:18 +0200 Subject: [PATCH 2/4] bug fixes --- .../github/libretube/ui/sheets/PlayingQueueSheet.kt | 10 +++++++--- app/src/main/res/drawable/ic_shuffle.xml | 2 +- app/src/main/res/layout/queue_bottom_sheet.xml | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt index d8038e513..59c0d8bb4 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt @@ -33,13 +33,17 @@ class PlayingQueueSheet : BottomSheetDialogFragment() { binding.shuffle.setOnClickListener { val streams = PlayingQueue.getStreams() - streams.subList(PlayingQueue.currentIndex(), PlayingQueue.size()).shuffle() - adapter.notifyItemRangeChanged(0, PlayingQueue.size()) + val size = PlayingQueue.size() + streams.subList(PlayingQueue.currentIndex(), size).shuffle() + adapter.notifyItemRangeChanged(0, size) } binding.clear.setOnClickListener { val streams = PlayingQueue.getStreams() - streams.subList(PlayingQueue.currentIndex(), PlayingQueue.size()).clear() + val currentIndex = PlayingQueue.currentIndex() + val size = PlayingQueue.size() + streams.subList(currentIndex, size).clear() + adapter.notifyItemRangeRemoved(currentIndex + 1, size) } binding.bottomControls.setOnClickListener { diff --git a/app/src/main/res/drawable/ic_shuffle.xml b/app/src/main/res/drawable/ic_shuffle.xml index 76ff342cd..67d78b7a1 100644 --- a/app/src/main/res/drawable/ic_shuffle.xml +++ b/app/src/main/res/drawable/ic_shuffle.xml @@ -1,7 +1,7 @@ + android:layout_height="0dp" + android:layout_weight="1" /> Date: Fri, 28 Oct 2022 22:26:33 +0200 Subject: [PATCH 3/4] Fix the playback speed value --- .../main/java/com/github/libretube/extensions/Round.kt | 9 +++++++++ .../com/github/libretube/ui/sheets/PlaybackSpeedSheet.kt | 5 +++-- .../com/github/libretube/ui/sheets/PlayingQueueSheet.kt | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/github/libretube/extensions/Round.kt diff --git a/app/src/main/java/com/github/libretube/extensions/Round.kt b/app/src/main/java/com/github/libretube/extensions/Round.kt new file mode 100644 index 000000000..0be63d173 --- /dev/null +++ b/app/src/main/java/com/github/libretube/extensions/Round.kt @@ -0,0 +1,9 @@ +package com.github.libretube.extensions + +import kotlin.math.pow +import kotlin.math.roundToInt + +fun Float.round(decimalPlaces: Int): Float { + return (this * 10.0.pow(decimalPlaces.toDouble())).roundToInt() / 10.0.pow(decimalPlaces.toDouble()) + .toFloat() +} diff --git a/app/src/main/java/com/github/libretube/ui/sheets/PlaybackSpeedSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/PlaybackSpeedSheet.kt index 43f28e6b2..c0d19d559 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/PlaybackSpeedSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/PlaybackSpeedSheet.kt @@ -6,6 +6,7 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.FragmentManager import com.github.libretube.databinding.PlaybackBottomSheetBinding +import com.github.libretube.extensions.round import com.google.android.exoplayer2.PlaybackParameters import com.google.android.exoplayer2.Player import com.google.android.material.bottomsheet.BottomSheetDialogFragment @@ -31,11 +32,11 @@ class PlaybackSpeedSheet( binding.pitch.value = player.playbackParameters.pitch binding.speed.addOnChangeListener { _, value, _ -> - onChange(value, binding.pitch.value) + onChange(value, binding.pitch.value.round(2)) } binding.pitch.addOnChangeListener { _, value, _ -> - onChange(binding.speed.value, value) + onChange(binding.speed.value.round(2), value) } } diff --git a/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt index 59c0d8bb4..fef5f877f 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt @@ -33,7 +33,7 @@ class PlayingQueueSheet : BottomSheetDialogFragment() { binding.shuffle.setOnClickListener { val streams = PlayingQueue.getStreams() - val size = PlayingQueue.size() + val size = PlayingQueue.size() streams.subList(PlayingQueue.currentIndex(), size).shuffle() adapter.notifyItemRangeChanged(0, size) } From 38d286bb94bd1808b1cd53e00abbc8aa03f37b16 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Fri, 28 Oct 2022 23:04:44 +0200 Subject: [PATCH 4/4] fix shuffle and clear --- .../libretube/ui/sheets/PlayingQueueSheet.kt | 26 ++++++++++++++----- .../com/github/libretube/util/PlayingQueue.kt | 5 ++++ .../main/res/layout/queue_bottom_sheet.xml | 4 +++ 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt index fef5f877f..13d4fc695 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/PlayingQueueSheet.kt @@ -1,5 +1,6 @@ package com.github.libretube.ui.sheets +import android.annotation.SuppressLint import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -24,6 +25,7 @@ class PlayingQueueSheet : BottomSheetDialogFragment() { return binding.root } + @SuppressLint("NotifyDataSetChanged") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -33,17 +35,27 @@ class PlayingQueueSheet : BottomSheetDialogFragment() { binding.shuffle.setOnClickListener { val streams = PlayingQueue.getStreams() - val size = PlayingQueue.size() - streams.subList(PlayingQueue.currentIndex(), size).shuffle() - adapter.notifyItemRangeChanged(0, size) + val currentIndex = PlayingQueue.currentIndex() + val current = streams[currentIndex] + + streams.shuffle() + streams.remove(current) + streams.add(currentIndex, current) + PlayingQueue.setStreams(streams) + + adapter.notifyDataSetChanged() } binding.clear.setOnClickListener { val streams = PlayingQueue.getStreams() - val currentIndex = PlayingQueue.currentIndex() - val size = PlayingQueue.size() - streams.subList(currentIndex, size).clear() - adapter.notifyItemRangeRemoved(currentIndex + 1, size) + val index = PlayingQueue.currentIndex() + + while (index >= PlayingQueue.size()) { + streams.removeAt(index) + } + + PlayingQueue.setStreams(streams) + adapter.notifyDataSetChanged() } binding.bottomControls.setOnClickListener { diff --git a/app/src/main/java/com/github/libretube/util/PlayingQueue.kt b/app/src/main/java/com/github/libretube/util/PlayingQueue.kt index 887185ae8..18d60b7d4 100644 --- a/app/src/main/java/com/github/libretube/util/PlayingQueue.kt +++ b/app/src/main/java/com/github/libretube/util/PlayingQueue.kt @@ -74,6 +74,11 @@ object PlayingQueue { fun getStreams() = queue + fun setStreams(streams: List) { + queue.clear() + queue.addAll(streams) + } + fun remove(index: Int) = queue.removeAt(index) fun move(from: Int, to: Int) = queue.move(from, to) diff --git a/app/src/main/res/layout/queue_bottom_sheet.xml b/app/src/main/res/layout/queue_bottom_sheet.xml index 01b45506d..aeeb9863c 100644 --- a/app/src/main/res/layout/queue_bottom_sheet.xml +++ b/app/src/main/res/layout/queue_bottom_sheet.xml @@ -33,6 +33,7 @@ android:id="@+id/bottom_controls" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_margin="5dp" android:background="@drawable/rounded_ripple" android:padding="10dp"> @@ -41,11 +42,13 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="?attr/selectableItemBackgroundBorderless" + android:padding="5dp" android:src="@drawable/ic_shuffle" />