Add queue items to media session (#499)
This commit is contained in:
@@ -18,6 +18,7 @@ import android.graphics.Color
|
|||||||
import android.media.AudioDeviceCallback
|
import android.media.AudioDeviceCallback
|
||||||
import android.media.AudioDeviceInfo
|
import android.media.AudioDeviceInfo
|
||||||
import android.media.AudioManager
|
import android.media.AudioManager
|
||||||
|
import android.media.MediaDescription
|
||||||
import android.media.MediaMetadata
|
import android.media.MediaMetadata
|
||||||
import android.media.audiofx.AudioEffect
|
import android.media.audiofx.AudioEffect
|
||||||
import android.media.session.MediaSession
|
import android.media.session.MediaSession
|
||||||
@@ -338,6 +339,51 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene
|
|||||||
} else if (mediaItem.mediaMetadata.artworkUri == bitmapProvider.lastUri) {
|
} else if (mediaItem.mediaMetadata.artworkUri == bitmapProvider.lastUri) {
|
||||||
bitmapProvider.listener?.invoke(bitmapProvider.lastBitmap)
|
bitmapProvider.listener?.invoke(bitmapProvider.lastBitmap)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (reason == Player.MEDIA_ITEM_TRANSITION_REASON_AUTO || reason == Player.MEDIA_ITEM_TRANSITION_REASON_SEEK) {
|
||||||
|
updateMediaSessionQueue(player.currentTimeline)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onTimelineChanged(timeline: Timeline, reason: Int) {
|
||||||
|
if (reason == Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED) {
|
||||||
|
updateMediaSessionQueue(timeline)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateMediaSessionQueue(timeline: Timeline) {
|
||||||
|
val builder = MediaDescription.Builder()
|
||||||
|
|
||||||
|
val currentMediaItemIndex = player.currentMediaItemIndex
|
||||||
|
val lastIndex = timeline.windowCount - 1
|
||||||
|
var startIndex = currentMediaItemIndex - 7
|
||||||
|
var endIndex = currentMediaItemIndex + 7
|
||||||
|
|
||||||
|
if (startIndex < 0) {
|
||||||
|
endIndex -= startIndex
|
||||||
|
}
|
||||||
|
|
||||||
|
if (endIndex > lastIndex) {
|
||||||
|
startIndex -= (endIndex - lastIndex)
|
||||||
|
endIndex = lastIndex
|
||||||
|
}
|
||||||
|
|
||||||
|
startIndex = startIndex.coerceAtLeast(0)
|
||||||
|
|
||||||
|
mediaSession.setQueue(
|
||||||
|
List(endIndex - startIndex + 1) { index ->
|
||||||
|
val mediaItem = timeline.getWindow(index + startIndex, Timeline.Window()).mediaItem
|
||||||
|
MediaSession.QueueItem(
|
||||||
|
builder
|
||||||
|
.setMediaId(mediaItem.mediaId)
|
||||||
|
.setTitle(mediaItem.mediaMetadata.title)
|
||||||
|
.setSubtitle(mediaItem.mediaMetadata.artist)
|
||||||
|
.setIconUri(mediaItem.mediaMetadata.artworkUri)
|
||||||
|
.build(),
|
||||||
|
index.toLong()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun maybeRecoverPlaybackError() {
|
private fun maybeRecoverPlaybackError() {
|
||||||
|
|||||||
Reference in New Issue
Block a user