fix: replace non-existent MediaSession.Callback skip overrides with onPlayerCommandRequest

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
HoneyandClaude Sonnet 4.6 committed 2026-06-05 00:07:14 +02:00
1 parent d539a43307
commit 3252706dc2
1 file changed
+19 -12
@@ -19,7 +19,6 @@ import androidx.media3.session.CacheBitmapLoader
import androidx.media3.session.MediaSession import androidx.media3.session.MediaSession
import androidx.media3.session.MediaSessionService import androidx.media3.session.MediaSessionService
import com.google.common.util.concurrent.MoreExecutors import com.google.common.util.concurrent.MoreExecutors
import com.google.common.util.concurrent.Futures
import java.util.concurrent.Executors import java.util.concurrent.Executors
class MusicService : MediaSessionService() { class MusicService : MediaSessionService() {
@@ -113,17 +112,25 @@ class MusicService : MediaSessionService() {
.setSessionActivity(notifTapPending) .setSessionActivity(notifTapPending)
.setCallback(object : MediaSession.Callback { .setCallback(object : MediaSession.Callback {
// Intercept notification next/prev so JS (not ExoPlayer) handles queue logic. // Intercept notification next/prev so JS (not ExoPlayer) handles queue logic.
override fun onSkipToNextMediaItem( // With single-track model ExoPlayer has no queue to advance — block the command
session: MediaSession, controller: MediaSession.ControllerInfo // and delegate to JS instead.
) = Futures.immediateFuture(androidx.media3.session.SessionResult( override fun onPlayerCommandRequest(
androidx.media3.session.SessionResult.RESULT_SUCCESS session: MediaSession,
)).also { stateListener?.onSkipToNext() } controller: MediaSession.ControllerInfo,
playerCommand: Int
override fun onSkipToPreviousMediaItem( ): Int = when (playerCommand) {
session: MediaSession, controller: MediaSession.ControllerInfo Player.COMMAND_SEEK_TO_NEXT,
) = Futures.immediateFuture(androidx.media3.session.SessionResult( Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM -> {
androidx.media3.session.SessionResult.RESULT_SUCCESS stateListener?.onSkipToNext()
)).also { stateListener?.onSkipToPrevious() } androidx.media3.session.SessionResult.RESULT_ERROR_NOT_SUPPORTED
}
Player.COMMAND_SEEK_TO_PREVIOUS,
Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM -> {
stateListener?.onSkipToPrevious()
androidx.media3.session.SessionResult.RESULT_ERROR_NOT_SUPPORTED
}
else -> androidx.media3.session.SessionResult.RESULT_SUCCESS
}
}) })
.build() .build()