diff --git a/app/src/main/java/com/github/apognu/otter/adapters/TracksAdapter.kt b/app/src/main/java/com/github/apognu/otter/adapters/TracksAdapter.kt index 0df01f5..4b0bf14 100644 --- a/app/src/main/java/com/github/apognu/otter/adapters/TracksAdapter.kt +++ b/app/src/main/java/com/github/apognu/otter/adapters/TracksAdapter.kt @@ -6,6 +6,7 @@ import android.graphics.* import android.graphics.drawable.ColorDrawable import android.view.* import androidx.appcompat.widget.PopupMenu +import androidx.core.content.ContextCompat import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView import com.github.apognu.otter.R @@ -61,12 +62,12 @@ class TracksAdapter(private val context: Context?, private val favoriteListener: holder.artist.text = track.artist.name context?.let { - holder.itemView.background = context.getDrawable(R.drawable.ripple) + holder.itemView.background = ContextCompat.getDrawable(context, R.drawable.ripple) } if (track == currentTrack || track.current) { context?.let { - holder.itemView.background = context.getDrawable(R.drawable.current) + holder.itemView.background = ContextCompat.getDrawable(context, R.drawable.current) } } diff --git a/app/src/main/java/com/github/apognu/otter/playback/MediaControlsManager.kt b/app/src/main/java/com/github/apognu/otter/playback/MediaControlsManager.kt index 62af217..2201211 100644 --- a/app/src/main/java/com/github/apognu/otter/playback/MediaControlsManager.kt +++ b/app/src/main/java/com/github/apognu/otter/playback/MediaControlsManager.kt @@ -104,6 +104,10 @@ class MediaControlsManager(val context: Service, private val scope: CoroutineSco } } + fun remove() { + NotificationManagerCompat.from(context).cancel(AppContext.NOTIFICATION_MEDIA_CONTROL) + } + private fun action(icon: Int, title: String, id: Long): NotificationCompat.Action { return MediaButtonReceiver.buildMediaButtonPendingIntent(context, id).run { NotificationCompat.Action.Builder(icon, title, this).build() 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 75bc7d9..b8352a3 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 @@ -185,7 +185,10 @@ class PlayerService : Service() { is Command.PreviousTrack -> skipToPreviousTrack() is Command.Seek -> seek(command.progress) - is Command.ClearQueue -> queue.clear() + is Command.ClearQueue -> { + queue.clear() + player.stop() + } is Command.ShuffleQueue -> queue.shuffle() is Command.PlayRadio -> { @@ -389,7 +392,20 @@ class PlayerService : Service() { when (playbackState) { Player.STATE_READY -> mediaControlsManager.updateNotification(queue.current(), true) Player.STATE_BUFFERING -> EventBus.send(Event.Buffering(true)) - Player.STATE_ENDED -> EventBus.send(Event.PlaybackStopped) + Player.STATE_ENDED -> { + setPlaybackState(false) + + queue.current = 0 + player.seekTo(0, C.TIME_UNSET) + + ProgressBus.send(0, 0, 0) + } + + Player.STATE_IDLE -> { + setPlaybackState(false) + + return EventBus.send(Event.PlaybackStopped) + } } if (playbackState != Player.STATE_BUFFERING) EventBus.send(Event.Buffering(false)) @@ -398,13 +414,14 @@ class PlayerService : Service() { false -> { EventBus.send(Event.Buffering(false)) - if (playbackState == Player.STATE_READY) { - mediaControlsManager.updateNotification(queue.current(), false) + Build.VERSION_CODES.N.onApi( + { stopForeground(STOP_FOREGROUND_DETACH) }, + { stopForeground(false) } + ) - Build.VERSION_CODES.N.onApi( - { stopForeground(STOP_FOREGROUND_DETACH) }, - { stopForeground(false) } - ) + when (playbackState) { + Player.STATE_READY -> mediaControlsManager.updateNotification(queue.current(), false) + Player.STATE_IDLE -> mediaControlsManager.remove() } } } 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 6f79967..98385ab 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 @@ -178,26 +178,34 @@ class QueueManager(val context: Context) { metadata = mutableListOf() datasources.clear() current = -1 + + persist() } fun shuffle() { - if (metadata.size == 0) return + if (metadata.size < 2) return if (current == -1) { replace(metadata.shuffled()) } else { - val track = metadata[current] - val shuffled = metadata.filter { it != track }.shuffled() + move(current, 0) + current = 0 - shuffled.forEach { - metadata.remove(it) + val shuffled = + metadata + .drop(1) + .shuffled() + + while (metadata.size > 1) { + datasources.removeMediaSource(metadata.size - 1) + metadata.removeAt(metadata.size - 1) } append(shuffled) - - current = 0 } + persist() + EventBus.send(Event.QueueChanged) } } \ No newline at end of file