From 3267ae98bee69dbe4b011f9aa25f88519ec260df Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Sat, 13 Jan 2024 20:43:51 -0700 Subject: [PATCH] playback: readd service reinit Make sure the service is properly re-initialized when it dies and is then restarted. --- .../auxio/playback/state/PlaybackStateHolder.kt | 2 +- .../auxio/playback/state/PlaybackStateManager.kt | 16 +++++++++++++--- .../auxio/playback/system/PlaybackService.kt | 8 ++++++-- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateHolder.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateHolder.kt index 373e9ff2d..7b6b16fd1 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateHolder.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateHolder.kt @@ -62,7 +62,7 @@ interface PlaybackStateHolder { fun handleDeferred(action: DeferredPlayback): Boolean - fun applySavedState(parent: MusicParent?, rawQueue: RawQueue) + fun applySavedState(parent: MusicParent?, rawQueue: RawQueue, ack: StateAck.NewPlayback?) } sealed interface StateAck { diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt index 50a5155bb..3ceb8be59 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt @@ -217,6 +217,11 @@ interface PlaybackStateManager { */ fun playing(isPlaying: Boolean) + /** + * Update the current [RepeatMode]. + * + * @param repeatMode The new [RepeatMode]. + */ fun repeatMode(repeatMode: RepeatMode) /** @@ -407,8 +412,11 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager { } this.stateHolder = stateHolder - - // TODO: Re-init player + if (isInitialized) { + stateHolder.applySavedState(stateMirror.parent, stateMirror.rawQueue, null) + stateHolder.seekTo(stateMirror.progression.calculateElapsedPositionMs()) + stateHolder.playing(false) + } } @Synchronized @@ -770,12 +778,14 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager { if (oldStateMirror.rawQueue != rawQueue) { 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) { logD("Seeking to saved position ${savedState.positionMs}ms") stateHolder?.seekTo(savedState.positionMs) + stateHolder?.playing(false) } isInitialized = true diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt index 6c9a2dfab..9bf6511c1 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt @@ -369,11 +369,15 @@ class PlaybackService : return true } - override fun applySavedState(parent: MusicParent?, rawQueue: RawQueue) { + override fun applySavedState( + parent: MusicParent?, + rawQueue: RawQueue, + ack: StateAck.NewPlayback? + ) { this.parent = parent player.applyQueue(rawQueue) player.prepare() - playbackManager.ack(this, StateAck.NewPlayback) + ack?.let { playbackManager.ack(this, it) } } // --- PLAYER OVERRIDES ---