Fix missing next override for headphone controls

This commit is contained in:
Kelvin 2023-10-11 22:50:36 +02:00
parent 10a661ad4c
commit 7afd75c712
2 changed files with 17 additions and 8 deletions

View File

@ -502,7 +502,7 @@ class VideoDetailView : ConstraintLayout {
MediaControlReceiver.onLowerVolumeReceived.subscribe(this) { handleLowerVolume() }; MediaControlReceiver.onLowerVolumeReceived.subscribe(this) { handleLowerVolume() };
MediaControlReceiver.onPlayReceived.subscribe(this) { handlePlay() }; MediaControlReceiver.onPlayReceived.subscribe(this) { handlePlay() };
MediaControlReceiver.onPauseReceived.subscribe(this) { handlePause() }; MediaControlReceiver.onPauseReceived.subscribe(this) { handlePause() };
MediaControlReceiver.onNextReceived.subscribe(this) { nextVideo() }; MediaControlReceiver.onNextReceived.subscribe(this) { nextVideo(true) };
MediaControlReceiver.onPreviousReceived.subscribe(this) { prevVideo() }; MediaControlReceiver.onPreviousReceived.subscribe(this) { prevVideo() };
MediaControlReceiver.onCloseReceived.subscribe(this) { MediaControlReceiver.onCloseReceived.subscribe(this) {
Logger.i(TAG, "MediaControlReceiver.onCloseReceived") 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") 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) { if(next != null) {
setVideoOverview(next); setVideoOverview(next);
return true; return true;

View File

@ -91,33 +91,39 @@ class MediaPlaybackService : Service() {
_mediaSession?.setCallback(object: MediaSessionCompat.Callback() { _mediaSession?.setCallback(object: MediaSessionCompat.Callback() {
override fun onSeekTo(pos: Long) { override fun onSeekTo(pos: Long) {
super.onSeekTo(pos) 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); MediaControlReceiver.onSeekToReceived.emit(pos);
} }
override fun onPlay() { override fun onPlay() {
super.onPlay(); super.onPlay();
Log.i(TAG, "Media session callback onPlay()"); Logger.i(TAG, "Media session callback onPlay()");
MediaControlReceiver.onPlayReceived.emit(); MediaControlReceiver.onPlayReceived.emit();
} }
override fun onPause() { override fun onPause() {
super.onPause(); super.onPause();
Log.i(TAG, "Media session callback onPause()"); Logger.i(TAG, "Media session callback onPause()");
MediaControlReceiver.onPauseReceived.emit(); MediaControlReceiver.onPauseReceived.emit();
} }
override fun onStop() { override fun onStop() {
super.onStop(); super.onStop();
Log.i(TAG, "Media session callback onStop()"); Logger.i(TAG, "Media session callback onStop()");
MediaControlReceiver.onCloseReceived.emit(); MediaControlReceiver.onCloseReceived.emit();
} }
override fun onSkipToPrevious() { override fun onSkipToPrevious() {
super.onSkipToPrevious(); super.onSkipToPrevious();
Log.i(TAG, "Media session callback onSkipToPrevious()"); Logger.i(TAG, "Media session callback onSkipToPrevious()");
MediaControlReceiver.onPreviousReceived.emit(); 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_PLAY or
PlaybackStateCompat.ACTION_PAUSE or PlaybackStateCompat.ACTION_PAUSE or
PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS or PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS or
PlaybackStateCompat.ACTION_SKIP_TO_NEXT or
PlaybackStateCompat.ACTION_PLAY_PAUSE PlaybackStateCompat.ACTION_PLAY_PAUSE
) )
.setState(state, pos, 1f, SystemClock.elapsedRealtime()) .setState(state, pos, 1f, SystemClock.elapsedRealtime())