From 7afd75c712e3971c7d8e48e806b78e7fc6dbd2fb Mon Sep 17 00:00:00 2001 From: Kelvin Date: Wed, 11 Oct 2023 22:50:36 +0200 Subject: [PATCH] Fix missing next override for headphone controls --- .../mainactivity/main/VideoDetailView.kt | 8 +++++--- .../services/MediaPlaybackService.kt | 17 ++++++++++++----- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt index 466ff512..4aba9b3f 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt @@ -502,7 +502,7 @@ class VideoDetailView : ConstraintLayout { MediaControlReceiver.onLowerVolumeReceived.subscribe(this) { handleLowerVolume() }; MediaControlReceiver.onPlayReceived.subscribe(this) { handlePlay() }; MediaControlReceiver.onPauseReceived.subscribe(this) { handlePause() }; - MediaControlReceiver.onNextReceived.subscribe(this) { nextVideo() }; + MediaControlReceiver.onNextReceived.subscribe(this) { nextVideo(true) }; MediaControlReceiver.onPreviousReceived.subscribe(this) { prevVideo() }; MediaControlReceiver.onCloseReceived.subscribe(this) { Logger.i(TAG, "MediaControlReceiver.onCloseReceived") @@ -1363,9 +1363,11 @@ class VideoDetailView : ConstraintLayout { } } - fun nextVideo(): Boolean { + fun nextVideo(forceLoop: Boolean = false): Boolean { Logger.i(TAG, "nextVideo") - val next = StatePlayer.instance.nextQueueItem(_player.duration < 100 || (_player.position.toFloat() / _player.duration) < 0.9); + var next = StatePlayer.instance.nextQueueItem(_player.duration < 100 || (_player.position.toFloat() / _player.duration) < 0.9); + if(next == null && forceLoop) + next = StatePlayer.instance.restartQueue(); if(next != null) { setVideoOverview(next); return true; diff --git a/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt b/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt index c9bf4cee..e383b3a1 100644 --- a/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt +++ b/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt @@ -91,33 +91,39 @@ class MediaPlaybackService : Service() { _mediaSession?.setCallback(object: MediaSessionCompat.Callback() { override fun onSeekTo(pos: Long) { super.onSeekTo(pos) - Log.i(TAG, "Media session callback onSeekTo(pos = $pos)"); + Logger.i(TAG, "Media session callback onSeekTo(pos = $pos)"); MediaControlReceiver.onSeekToReceived.emit(pos); } override fun onPlay() { super.onPlay(); - Log.i(TAG, "Media session callback onPlay()"); + Logger.i(TAG, "Media session callback onPlay()"); MediaControlReceiver.onPlayReceived.emit(); } override fun onPause() { super.onPause(); - Log.i(TAG, "Media session callback onPause()"); + Logger.i(TAG, "Media session callback onPause()"); MediaControlReceiver.onPauseReceived.emit(); } override fun onStop() { super.onStop(); - Log.i(TAG, "Media session callback onStop()"); + Logger.i(TAG, "Media session callback onStop()"); MediaControlReceiver.onCloseReceived.emit(); } override fun onSkipToPrevious() { super.onSkipToPrevious(); - Log.i(TAG, "Media session callback onSkipToPrevious()"); + Logger.i(TAG, "Media session callback onSkipToPrevious()"); MediaControlReceiver.onPreviousReceived.emit(); } + + override fun onSkipToNext() { + super.onSkipToNext() + Logger.i(TAG, "Media session callback onSkipToNext()"); + MediaControlReceiver.onNextReceived.emit(); + } }); } @@ -285,6 +291,7 @@ class MediaPlaybackService : Service() { PlaybackStateCompat.ACTION_PLAY or PlaybackStateCompat.ACTION_PAUSE or PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS or + PlaybackStateCompat.ACTION_SKIP_TO_NEXT or PlaybackStateCompat.ACTION_PLAY_PAUSE ) .setState(state, pos, 1f, SystemClock.elapsedRealtime())