From de0d75a164c4eaab1dcaae453e425309789f6de3 Mon Sep 17 00:00:00 2001 From: LordSkull Date: Sun, 19 Jul 2026 23:40:18 +0200 Subject: [PATCH 1/2] fix(player): respect shuffle order for next track --- .../com/simpmusic/media_jvm/mpv/MpvPlayerAdapter.kt | 11 +++++++++-- .../media3/exoplayer/CrossfadeExoPlayerAdapter.kt | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/media/media-jvm/src/main/java/com/simpmusic/media_jvm/mpv/MpvPlayerAdapter.kt b/media/media-jvm/src/main/java/com/simpmusic/media_jvm/mpv/MpvPlayerAdapter.kt index e11bc51..25b7406 100644 --- a/media/media-jvm/src/main/java/com/simpmusic/media_jvm/mpv/MpvPlayerAdapter.kt +++ b/media/media-jvm/src/main/java/com/simpmusic/media_jvm/mpv/MpvPlayerAdapter.kt @@ -707,7 +707,14 @@ class MpvPlayerAdapter( when (internalRepeatMode) { PlayerConstants.REPEAT_MODE_ONE -> true PlayerConstants.REPEAT_MODE_ALL -> true - else -> localCurrentMediaItemIndex < playlist.size - 1 + else -> + if (internalShuffleModeEnabled && shuffleOrder.isNotEmpty()) { + val currentShufflePos = + shuffleIndices.getOrNull(localCurrentMediaItemIndex) ?: -1 + currentShufflePos >= 0 && currentShufflePos < shuffleOrder.lastIndex + } else { + localCurrentMediaItemIndex < playlist.size - 1 + } } override fun hasPreviousMediaItem(): Boolean = @@ -1414,7 +1421,7 @@ class MpvPlayerAdapter( } else -> { - if (localCurrentMediaItemIndex < playlist.size - 1) { + if (hasNextMediaItem()) { seekToNext() } else { notifyEqualizerIntent(false) diff --git a/media/media3/src/main/java/com/maxrave/media3/exoplayer/CrossfadeExoPlayerAdapter.kt b/media/media3/src/main/java/com/maxrave/media3/exoplayer/CrossfadeExoPlayerAdapter.kt index 0ea0dde..f0f0f98 100644 --- a/media/media3/src/main/java/com/maxrave/media3/exoplayer/CrossfadeExoPlayerAdapter.kt +++ b/media/media3/src/main/java/com/maxrave/media3/exoplayer/CrossfadeExoPlayerAdapter.kt @@ -1012,7 +1012,14 @@ internal class CrossfadeExoPlayerAdapter( when (internalRepeatMode) { PlayerConstants.REPEAT_MODE_ONE -> true PlayerConstants.REPEAT_MODE_ALL -> true - else -> localCurrentMediaItemIndex < playlist.size - 1 + else -> + if (internalShuffleModeEnabled && shuffleOrder.isNotEmpty()) { + val currentShufflePos = + shuffleIndices.getOrNull(localCurrentMediaItemIndex) ?: -1 + currentShufflePos >= 0 && currentShufflePos < shuffleOrder.lastIndex + } else { + localCurrentMediaItemIndex < playlist.size - 1 + } } override fun hasPreviousMediaItem(): Boolean = @@ -1769,7 +1776,7 @@ internal class CrossfadeExoPlayerAdapter( } else -> { - if (localCurrentMediaItemIndex < playlist.size - 1) { + if (hasNextMediaItem()) { seekToNext() } else { notifyEqualizerIntent(false) From fdef84e65a58cb96e43fc675629db5b91f7c9654 Mon Sep 17 00:00:00 2001 From: LordSkull Date: Thu, 23 Jul 2026 17:22:55 +0200 Subject: [PATCH 2/2] fix(player): respect shuffle order for previous track --- .../java/com/simpmusic/media_jvm/mpv/MpvPlayerAdapter.kt | 9 ++++++++- .../media3/exoplayer/CrossfadeExoPlayerAdapter.kt | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/media/media-jvm/src/main/java/com/simpmusic/media_jvm/mpv/MpvPlayerAdapter.kt b/media/media-jvm/src/main/java/com/simpmusic/media_jvm/mpv/MpvPlayerAdapter.kt index 25b7406..95ea5d0 100644 --- a/media/media-jvm/src/main/java/com/simpmusic/media_jvm/mpv/MpvPlayerAdapter.kt +++ b/media/media-jvm/src/main/java/com/simpmusic/media_jvm/mpv/MpvPlayerAdapter.kt @@ -721,7 +721,14 @@ class MpvPlayerAdapter( when (internalRepeatMode) { PlayerConstants.REPEAT_MODE_ONE -> true PlayerConstants.REPEAT_MODE_ALL -> true - else -> localCurrentMediaItemIndex > 0 + else -> + if (internalShuffleModeEnabled && shuffleOrder.isNotEmpty()) { + val currentShufflePos = + shuffleIndices.getOrNull(localCurrentMediaItemIndex) ?: -1 + currentShufflePos > 0 + } else { + localCurrentMediaItemIndex > 0 + } } private fun getNextMediaItemIndex(): Int = diff --git a/media/media3/src/main/java/com/maxrave/media3/exoplayer/CrossfadeExoPlayerAdapter.kt b/media/media3/src/main/java/com/maxrave/media3/exoplayer/CrossfadeExoPlayerAdapter.kt index f0f0f98..71e9e77 100644 --- a/media/media3/src/main/java/com/maxrave/media3/exoplayer/CrossfadeExoPlayerAdapter.kt +++ b/media/media3/src/main/java/com/maxrave/media3/exoplayer/CrossfadeExoPlayerAdapter.kt @@ -1026,7 +1026,14 @@ internal class CrossfadeExoPlayerAdapter( when (internalRepeatMode) { PlayerConstants.REPEAT_MODE_ONE -> true PlayerConstants.REPEAT_MODE_ALL -> true - else -> localCurrentMediaItemIndex > 0 + else -> + if (internalShuffleModeEnabled && shuffleOrder.isNotEmpty()) { + val currentShufflePos = + shuffleIndices.getOrNull(localCurrentMediaItemIndex) ?: -1 + currentShufflePos > 0 + } else { + localCurrentMediaItemIndex > 0 + } } private fun getNextMediaItemIndex(): Int =