playback: readd service reinit

Make sure the service is properly re-initialized when it dies and is
then restarted.
This commit is contained in:
Alexander Capehart 2024-01-13 20:43:51 -07:00
parent b2d71f8903
commit 3267ae98be
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
3 changed files with 20 additions and 6 deletions

View file

@ -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 {

View file

@ -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

View file

@ -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 ---