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:
parent
ba0d2cd879
commit
96d4a84f52
2 changed files with 23 additions and 19 deletions
|
@ -367,17 +367,28 @@ class ExoPlaybackStateHolder(
|
||||||
rawQueue: RawQueue,
|
rawQueue: RawQueue,
|
||||||
ack: StateAck.NewPlayback?
|
ack: StateAck.NewPlayback?
|
||||||
) {
|
) {
|
||||||
this.parent = parent
|
logD("Applying saved state")
|
||||||
player.setMediaItems(rawQueue.heap.map { it.toMediaItem(context, null) })
|
var sendEvent = false
|
||||||
if (rawQueue.isShuffled) {
|
if (this.parent != parent) {
|
||||||
player.shuffleModeEnabled = true
|
this.parent = parent
|
||||||
player.setShuffleOrder(BetterShuffleOrder(rawQueue.shuffledMapping.toIntArray()))
|
sendEvent = true
|
||||||
} else {
|
}
|
||||||
player.shuffleModeEnabled = false
|
if (rawQueue != resolveQueue()) {
|
||||||
|
player.setMediaItems(rawQueue.heap.map { it.toMediaItem(context, null) })
|
||||||
|
if (rawQueue.isShuffled) {
|
||||||
|
player.shuffleModeEnabled = true
|
||||||
|
player.setShuffleOrder(BetterShuffleOrder(rawQueue.shuffledMapping.toIntArray()))
|
||||||
|
} else {
|
||||||
|
player.shuffleModeEnabled = false
|
||||||
|
}
|
||||||
|
player.seekTo(rawQueue.heapIndex, C.TIME_UNSET)
|
||||||
|
player.prepare()
|
||||||
|
player.pause()
|
||||||
|
sendEvent = true
|
||||||
|
}
|
||||||
|
if (sendEvent) {
|
||||||
|
ack?.let { playbackManager.ack(this, it) }
|
||||||
}
|
}
|
||||||
player.seekTo(rawQueue.heapIndex, C.TIME_UNSET)
|
|
||||||
player.prepare()
|
|
||||||
ack?.let { playbackManager.ack(this, it) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun endSession() {
|
override fun endSession() {
|
||||||
|
|
|
@ -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.
|
stateHolder.seekTo(savedState.positionMs)
|
||||||
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.repeatMode(savedState.repeatMode)
|
stateHolder.repeatMode(savedState.repeatMode)
|
||||||
|
|
||||||
isInitialized = true
|
isInitialized = true
|
||||||
|
|
Loading…
Reference in a new issue