playback: readd service reinit
Make sure the service is properly re-initialized when it dies and is then restarted.
This commit is contained in:
parent
b2d71f8903
commit
3267ae98be
3 changed files with 20 additions and 6 deletions
|
@ -62,7 +62,7 @@ interface PlaybackStateHolder {
|
||||||
|
|
||||||
fun handleDeferred(action: DeferredPlayback): Boolean
|
fun handleDeferred(action: DeferredPlayback): Boolean
|
||||||
|
|
||||||
fun applySavedState(parent: MusicParent?, rawQueue: RawQueue)
|
fun applySavedState(parent: MusicParent?, rawQueue: RawQueue, ack: StateAck.NewPlayback?)
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed interface StateAck {
|
sealed interface StateAck {
|
||||||
|
|
|
@ -217,6 +217,11 @@ interface PlaybackStateManager {
|
||||||
*/
|
*/
|
||||||
fun playing(isPlaying: Boolean)
|
fun playing(isPlaying: Boolean)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the current [RepeatMode].
|
||||||
|
*
|
||||||
|
* @param repeatMode The new [RepeatMode].
|
||||||
|
*/
|
||||||
fun repeatMode(repeatMode: RepeatMode)
|
fun repeatMode(repeatMode: RepeatMode)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -407,8 +412,11 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
this.stateHolder = stateHolder
|
this.stateHolder = stateHolder
|
||||||
|
if (isInitialized) {
|
||||||
// TODO: Re-init player
|
stateHolder.applySavedState(stateMirror.parent, stateMirror.rawQueue, null)
|
||||||
|
stateHolder.seekTo(stateMirror.progression.calculateElapsedPositionMs())
|
||||||
|
stateHolder.playing(false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
|
@ -770,12 +778,14 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager {
|
||||||
|
|
||||||
if (oldStateMirror.rawQueue != rawQueue) {
|
if (oldStateMirror.rawQueue != rawQueue) {
|
||||||
logD("Queue changed, must reload player")
|
logD("Queue changed, must reload player")
|
||||||
stateHolder?.applySavedState(parent, rawQueue)
|
stateHolder?.applySavedState(parent, rawQueue, StateAck.NewPlayback)
|
||||||
|
stateHolder?.playing(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldStateMirror.progression.calculateElapsedPositionMs() != savedState.positionMs) {
|
if (oldStateMirror.progression.calculateElapsedPositionMs() != savedState.positionMs) {
|
||||||
logD("Seeking to saved position ${savedState.positionMs}ms")
|
logD("Seeking to saved position ${savedState.positionMs}ms")
|
||||||
stateHolder?.seekTo(savedState.positionMs)
|
stateHolder?.seekTo(savedState.positionMs)
|
||||||
|
stateHolder?.playing(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
isInitialized = true
|
isInitialized = true
|
||||||
|
|
|
@ -369,11 +369,15 @@ class PlaybackService :
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun applySavedState(parent: MusicParent?, rawQueue: RawQueue) {
|
override fun applySavedState(
|
||||||
|
parent: MusicParent?,
|
||||||
|
rawQueue: RawQueue,
|
||||||
|
ack: StateAck.NewPlayback?
|
||||||
|
) {
|
||||||
this.parent = parent
|
this.parent = parent
|
||||||
player.applyQueue(rawQueue)
|
player.applyQueue(rawQueue)
|
||||||
player.prepare()
|
player.prepare()
|
||||||
playbackManager.ack(this, StateAck.NewPlayback)
|
ack?.let { playbackManager.ack(this, it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- PLAYER OVERRIDES ---
|
// --- PLAYER OVERRIDES ---
|
||||||
|
|
Loading…
Reference in a new issue