From cf4cd16bedbdb876edac18f953067e7faabb2250 Mon Sep 17 00:00:00 2001 From: Antoine POPINEAU Date: Fri, 29 May 2020 23:42:03 +0200 Subject: [PATCH] Added a toggle for repeat mode on the Now Playing view. Should fix #26. --- .../apognu/otter/activities/MainActivity.kt | 48 +++++++++++++++++++ .../apognu/otter/playback/PlayerService.kt | 2 + .../com/github/apognu/otter/utils/EventBus.kt | 2 + app/src/main/res/drawable/repeat.xml | 9 ++++ app/src/main/res/drawable/repeat_one.xml | 9 ++++ app/src/main/res/drawable/shuffle.xml | 9 ++++ .../res/layout-land/partial_now_playing.xml | 15 +++--- .../main/res/layout/partial_now_playing.xml | 46 +++++++++++++----- app/src/main/res/layout/row_track.xml | 10 ++-- app/src/main/res/values/styles.xml | 2 +- 10 files changed, 128 insertions(+), 24 deletions(-) create mode 100644 app/src/main/res/drawable/repeat.xml create mode 100644 app/src/main/res/drawable/repeat_one.xml create mode 100644 app/src/main/res/drawable/shuffle.xml diff --git a/app/src/main/java/com/github/apognu/otter/activities/MainActivity.kt b/app/src/main/java/com/github/apognu/otter/activities/MainActivity.kt index ce647f0..111db49 100644 --- a/app/src/main/java/com/github/apognu/otter/activities/MainActivity.kt +++ b/app/src/main/java/com/github/apognu/otter/activities/MainActivity.kt @@ -14,6 +14,7 @@ import android.view.animation.AccelerateDecelerateInterpolator import android.widget.SeekBar import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.PopupMenu +import androidx.core.content.ContextCompat import androidx.core.graphics.drawable.toDrawable import androidx.fragment.app.DialogFragment import androidx.fragment.app.Fragment @@ -26,6 +27,7 @@ import com.github.apognu.otter.repositories.FavoritedRepository import com.github.apognu.otter.repositories.FavoritesRepository import com.github.apognu.otter.repositories.Repository import com.github.apognu.otter.utils.* +import com.google.android.exoplayer2.Player import com.preference.PowerPreference import com.squareup.picasso.Picasso import kotlinx.android.synthetic.main.activity_main.* @@ -300,6 +302,16 @@ class MainActivity : AppCompatActivity() { } } + now_playing_details_repeat?.let { now_playing_details_repeat -> + changeRepeatMode(Cache.get(this@MainActivity, "repeat")?.readLine()?.toInt() ?: 0) + + now_playing_details_repeat.setOnClickListener { + val current = Cache.get(this@MainActivity, "repeat")?.readLine()?.toInt() ?: 0 + + changeRepeatMode((current + 1) % 3) + } + } + now_playing_details_info?.let { now_playing_details_info -> now_playing_details_info.setOnClickListener { PopupMenu(this@MainActivity, now_playing_details_info, Gravity.START, R.attr.actionOverflowMenuStyle, 0).apply { @@ -397,4 +409,40 @@ class MainActivity : AppCompatActivity() { } } } + + private fun changeRepeatMode(index: Int) { + when (index) { + // From no repeat to repeat all + 0 -> { + Cache.set(this@MainActivity, "repeat", "0".toByteArray()) + + now_playing_details_repeat?.setImageResource(R.drawable.repeat) + now_playing_details_repeat?.setColorFilter(ContextCompat.getColor(this, R.color.colorPrimaryDark)) + now_playing_details_repeat?.alpha = 0.4f + + CommandBus.send(Command.SetRepeatMode(Player.REPEAT_MODE_OFF)) + } + + // From repeat all to repeat one + 1 -> { + Cache.set(this@MainActivity, "repeat", "1".toByteArray()) + + now_playing_details_repeat?.setImageResource(R.drawable.repeat) + now_playing_details_repeat?.setColorFilter(ContextCompat.getColor(this, R.color.colorPrimary)) + now_playing_details_repeat?.alpha = 1.0f + + CommandBus.send(Command.SetRepeatMode(Player.REPEAT_MODE_ALL)) + } + + // From repeat one to no repeat + 2 -> { + Cache.set(this@MainActivity, "repeat", "2".toByteArray()) + now_playing_details_repeat?.setImageResource(R.drawable.repeat_one) + now_playing_details_repeat?.setColorFilter(ContextCompat.getColor(this, R.color.colorPrimary)) + now_playing_details_repeat?.alpha = 1.0f + + CommandBus.send(Command.SetRepeatMode(Player.REPEAT_MODE_ONE)) + } + } + } } 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 fd6f8c9..22f6a0a 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 @@ -182,6 +182,8 @@ class PlayerService : Service() { is Command.Seek -> progress(message.progress) is Command.ClearQueue -> queue.clear() + + is Command.SetRepeatMode -> player.repeatMode = message.mode } if (player.playWhenReady) { diff --git a/app/src/main/java/com/github/apognu/otter/utils/EventBus.kt b/app/src/main/java/com/github/apognu/otter/utils/EventBus.kt index 65198bc..b451e71 100644 --- a/app/src/main/java/com/github/apognu/otter/utils/EventBus.kt +++ b/app/src/main/java/com/github/apognu/otter/utils/EventBus.kt @@ -25,6 +25,8 @@ sealed class Command { class MoveFromQueue(val oldPosition: Int, val newPosition: Int) : Command() object ClearQueue : Command() + class SetRepeatMode(val mode: Int) : Command() + class PlayTrack(val index: Int) : Command() } diff --git a/app/src/main/res/drawable/repeat.xml b/app/src/main/res/drawable/repeat.xml new file mode 100644 index 0000000..e7c67d7 --- /dev/null +++ b/app/src/main/res/drawable/repeat.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/repeat_one.xml b/app/src/main/res/drawable/repeat_one.xml new file mode 100644 index 0000000..fc8c83a --- /dev/null +++ b/app/src/main/res/drawable/repeat_one.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/shuffle.xml b/app/src/main/res/drawable/shuffle.xml new file mode 100644 index 0000000..ec80046 --- /dev/null +++ b/app/src/main/res/drawable/shuffle.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout-land/partial_now_playing.xml b/app/src/main/res/layout-land/partial_now_playing.xml index a466912..d8198a0 100644 --- a/app/src/main/res/layout-land/partial_now_playing.xml +++ b/app/src/main/res/layout-land/partial_now_playing.xml @@ -26,6 +26,7 @@ @@ -160,8 +163,8 @@ @@ -178,8 +181,8 @@ diff --git a/app/src/main/res/layout/partial_now_playing.xml b/app/src/main/res/layout/partial_now_playing.xml index c797c49..aab9237 100644 --- a/app/src/main/res/layout/partial_now_playing.xml +++ b/app/src/main/res/layout/partial_now_playing.xml @@ -26,6 +26,7 @@ @@ -118,8 +121,8 @@ + android:paddingTop="16dp"> @@ -219,14 +222,31 @@ + + + + + + diff --git a/app/src/main/res/layout/row_track.xml b/app/src/main/res/layout/row_track.xml index c2045a9..01c33ed 100644 --- a/app/src/main/res/layout/row_track.xml +++ b/app/src/main/res/layout/row_track.xml @@ -59,16 +59,18 @@ diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index f36cb28..ae07b65 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -59,7 +59,7 @@