diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EntryListFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EntryListFragment.kt index dca68e30..48815367 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EntryListFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EntryListFragment.kt @@ -135,7 +135,6 @@ abstract class EntryListFragment : MultiListFragment() { item.id, append = false, autoPlay = true, - shuffle = false, playNext = false, isArtist = isArtist ) @@ -145,7 +144,6 @@ abstract class EntryListFragment : MultiListFragment() { item.id, append = false, autoPlay = true, - shuffle = true, playNext = true, isArtist = isArtist ) @@ -155,7 +153,6 @@ abstract class EntryListFragment : MultiListFragment() { item.id, append = true, autoPlay = false, - shuffle = false, playNext = false, isArtist = isArtist ) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt index cd71ee7c..9b923e95 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt @@ -316,7 +316,6 @@ open class TrackCollectionFragment( append = append, playNext = false, autoPlay = !append, - shuffle = false, playlistName = null, fragment = this ) @@ -616,7 +615,6 @@ open class TrackCollectionFragment( append = true, playNext = true, autoPlay = false, - shuffle = false, playlistName = navArgs.playlistName, fragment = this@TrackCollectionFragment ) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerManager.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerManager.kt index dba110ec..d1ffd067 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerManager.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerManager.kt @@ -429,7 +429,10 @@ class MediaPlayerManager( when (insertionMode) { InsertionMode.CLEAR -> clear() InsertionMode.APPEND -> insertAt = mediaItemCount - InsertionMode.AFTER_CURRENT -> insertAt = currentMediaItemIndex + 1 + InsertionMode.AFTER_CURRENT -> { + // Must never be larger than the count of items (especially when empty) + insertAt = (currentMediaItemIndex + 1).coerceAtMost(mediaItemCount) + } } val mediaItems: List = songs.map { @@ -437,10 +440,13 @@ class MediaPlayerManager( result } - if (shuffle) isShufflePlayEnabled = true Timber.w("Adding ${mediaItems.size} media items") controller?.addMediaItems(insertAt, mediaItems) + // There is a bug in media3 ( https://github.com/androidx/media/issues/480 ), + // so we must first add the tracks, and then enable shuffle + if (shuffle) isShufflePlayEnabled = true + prepare() // Playback doesn't start correctly when the player is in STATE_ENDED. diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt index 1a653a50..55bceca2 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt @@ -98,7 +98,7 @@ class DownloadHandler( isDirectory: Boolean = true, append: Boolean, autoPlay: Boolean, - shuffle: Boolean, + shuffle: Boolean = false, playNext: Boolean, isArtist: Boolean = false ) { @@ -141,7 +141,7 @@ class DownloadHandler( append: Boolean, playNext: Boolean, autoPlay: Boolean, - shuffle: Boolean, + shuffle: Boolean = false, playlistName: String? = null, fragment: Fragment ) {