playback: fix parent restore

A single missed savedState access blew up parent restore silently, and
in some other cases with non-destructive queue restores would also not
restore the parent.
This commit is contained in:
Alexander Capehart 2024-06-12 20:32:32 -06:00
parent ba0d2cd879
commit 96d4a84f52
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
2 changed files with 23 additions and 19 deletions

View file

@ -367,7 +367,13 @@ class ExoPlaybackStateHolder(
rawQueue: RawQueue, rawQueue: RawQueue,
ack: StateAck.NewPlayback? ack: StateAck.NewPlayback?
) { ) {
logD("Applying saved state")
var sendEvent = false
if (this.parent != parent) {
this.parent = parent this.parent = parent
sendEvent = true
}
if (rawQueue != resolveQueue()) {
player.setMediaItems(rawQueue.heap.map { it.toMediaItem(context, null) }) player.setMediaItems(rawQueue.heap.map { it.toMediaItem(context, null) })
if (rawQueue.isShuffled) { if (rawQueue.isShuffled) {
player.shuffleModeEnabled = true player.shuffleModeEnabled = true
@ -377,8 +383,13 @@ class ExoPlaybackStateHolder(
} }
player.seekTo(rawQueue.heapIndex, C.TIME_UNSET) player.seekTo(rawQueue.heapIndex, C.TIME_UNSET)
player.prepare() player.prepare()
player.pause()
sendEvent = true
}
if (sendEvent) {
ack?.let { playbackManager.ack(this, it) } ack?.let { playbackManager.ack(this, it) }
} }
}
override fun endSession() { override fun endSession() {
// This session has ended, so we need to reset this flag for when the next // This session has ended, so we need to reset this flag for when the next

View file

@ -795,15 +795,8 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager {
index index
}) })
// Valid state where something needs to be played, direct the stateholder to apply stateHolder.applySavedState(savedState.parent, rawQueue, StateAck.NewPlayback)
// this new state.
val oldStateMirror = stateMirror
if (oldStateMirror.rawQueue != rawQueue) {
logD("Queue changed, must reload player")
stateHolder.playing(false)
stateHolder.applySavedState(parent, rawQueue, StateAck.NewPlayback)
stateHolder.seekTo(savedState.positionMs) stateHolder.seekTo(savedState.positionMs)
}
stateHolder.repeatMode(savedState.repeatMode) stateHolder.repeatMode(savedState.repeatMode)
isInitialized = true isInitialized = true