16 bug it only plays the first song on an album (#81)

This commit is contained in:
eddyizm 2025-09-21 09:56:26 -07:00 committed by GitHub
commit cd2ab36351
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 125 additions and 74 deletions

View file

@ -10,8 +10,8 @@ android {
minSdkVersion 24 minSdkVersion 24
targetSdk 35 targetSdk 35
versionCode 31 versionCode 32
versionName '3.14.8' versionName '3.14.9'
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'

View file

@ -199,8 +199,17 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
.build() .build()
} }
private fun getQueueFromPlayer(player: Player): List<MediaItem> {
val queue = mutableListOf<MediaItem>()
for (i in 0 until player.mediaItemCount) {
queue.add(player.getMediaItemAt(i))
}
return queue
}
private fun setPlayer(oldPlayer: Player?, newPlayer: Player) { private fun setPlayer(oldPlayer: Player?, newPlayer: Player) {
if (oldPlayer === newPlayer) return if (oldPlayer === newPlayer) return
oldPlayer?.stop() oldPlayer?.stop()
mediaLibrarySession.player = newPlayer mediaLibrarySession.player = newPlayer
} }
@ -211,7 +220,6 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
player.release() player.release()
mediaLibrarySession.release() mediaLibrarySession.release()
automotiveRepository.deleteMetadata() automotiveRepository.deleteMetadata()
clearListener()
} }
private fun getRenderersFactory() = DownloadUtil.buildRenderersFactory(this, false) private fun getRenderersFactory() = DownloadUtil.buildRenderersFactory(this, false)
@ -220,10 +228,28 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
DefaultMediaSourceFactory(this).setDataSourceFactory(DownloadUtil.getDataSourceFactory(this)) DefaultMediaSourceFactory(this).setDataSourceFactory(DownloadUtil.getDataSourceFactory(this))
override fun onCastSessionAvailable() { override fun onCastSessionAvailable() {
val currentQueue = getQueueFromPlayer(player)
val currentIndex = player.currentMediaItemIndex
val currentPosition = player.currentPosition
val isPlaying = player.playWhenReady
setPlayer(player, castPlayer) setPlayer(player, castPlayer)
castPlayer.setMediaItems(currentQueue, currentIndex, currentPosition)
castPlayer.playWhenReady = isPlaying
castPlayer.prepare()
} }
override fun onCastSessionUnavailable() { override fun onCastSessionUnavailable() {
val currentQueue = getQueueFromPlayer(castPlayer)
val currentIndex = castPlayer.currentMediaItemIndex
val currentPosition = castPlayer.currentPosition
val isPlaying = castPlayer.playWhenReady
setPlayer(castPlayer, player) setPlayer(castPlayer, player)
player.setMediaItems(currentQueue, currentIndex, currentPosition)
player.playWhenReady = isPlaying
player.prepare()
} }
} }

View file

@ -199,6 +199,14 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
.build() .build()
} }
private fun getQueueFromPlayer(player: Player): List<MediaItem> {
val queue = mutableListOf<MediaItem>()
for (i in 0 until player.mediaItemCount) {
queue.add(player.getMediaItemAt(i))
}
return queue
}
private fun setPlayer(oldPlayer: Player?, newPlayer: Player) { private fun setPlayer(oldPlayer: Player?, newPlayer: Player) {
if (oldPlayer === newPlayer) return if (oldPlayer === newPlayer) return
oldPlayer?.stop() oldPlayer?.stop()
@ -211,7 +219,6 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
player.release() player.release()
mediaLibrarySession.release() mediaLibrarySession.release()
automotiveRepository.deleteMetadata() automotiveRepository.deleteMetadata()
clearListener()
} }
private fun getRenderersFactory() = DownloadUtil.buildRenderersFactory(this, false) private fun getRenderersFactory() = DownloadUtil.buildRenderersFactory(this, false)
@ -220,10 +227,28 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
DefaultMediaSourceFactory(this).setDataSourceFactory(DownloadUtil.getDataSourceFactory(this)) DefaultMediaSourceFactory(this).setDataSourceFactory(DownloadUtil.getDataSourceFactory(this))
override fun onCastSessionAvailable() { override fun onCastSessionAvailable() {
val currentQueue = getQueueFromPlayer(player)
val currentIndex = player.currentMediaItemIndex
val currentPosition = player.currentPosition
val isPlaying = player.playWhenReady
setPlayer(player, castPlayer) setPlayer(player, castPlayer)
castPlayer.setMediaItems(currentQueue, currentIndex, currentPosition)
castPlayer.playWhenReady = isPlaying
castPlayer.prepare()
} }
override fun onCastSessionUnavailable() { override fun onCastSessionUnavailable() {
val currentQueue = getQueueFromPlayer(castPlayer)
val currentIndex = castPlayer.currentMediaItemIndex
val currentPosition = castPlayer.currentPosition
val isPlaying = castPlayer.playWhenReady
setPlayer(castPlayer, player) setPlayer(castPlayer, player)
player.setMediaItems(currentQueue, currentIndex, currentPosition)
player.playWhenReady = isPlaying
player.prepare()
} }
} }