playback: introduce foreground-safe restores
- Allow DeferredPlayback.RestoreState to force-start playback - Allow DeferredPlayback.RestoreState to specify a fallback action guaranteed to succeed
This commit is contained in:
parent
aa140bebaa
commit
3fa5628a1e
2 changed files with 11 additions and 3 deletions
|
@ -163,10 +163,18 @@ class ExoPlaybackStateHolder(
|
||||||
is DeferredPlayback.RestoreState -> {
|
is DeferredPlayback.RestoreState -> {
|
||||||
logD("Restoring playback state")
|
logD("Restoring playback state")
|
||||||
restoreScope.launch {
|
restoreScope.launch {
|
||||||
persistenceRepository.readState()?.let {
|
val state = persistenceRepository.readState()
|
||||||
|
if (state != null) {
|
||||||
// Apply the saved state on the main thread to prevent code expecting
|
// Apply the saved state on the main thread to prevent code expecting
|
||||||
// state updates on the main thread from crashing.
|
// state updates on the main thread from crashing.
|
||||||
withContext(Dispatchers.Main) { playbackManager.applySavedState(it, false) }
|
withContext(Dispatchers.Main) {
|
||||||
|
playbackManager.applySavedState(state, false)
|
||||||
|
if (action.play) {
|
||||||
|
playbackManager.playing(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (action.fallback != null) {
|
||||||
|
playbackManager.playDeferred(action.fallback)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -276,7 +276,7 @@ data class QueueChange(val type: Type, val instructions: UpdateInstructions) {
|
||||||
/** Possible long-running background tasks handled by the background playback task. */
|
/** Possible long-running background tasks handled by the background playback task. */
|
||||||
sealed interface DeferredPlayback {
|
sealed interface DeferredPlayback {
|
||||||
/** Restore the previously saved playback state. */
|
/** Restore the previously saved playback state. */
|
||||||
data object RestoreState : DeferredPlayback
|
data class RestoreState(val play: Boolean, val fallback: DeferredPlayback? = null) : DeferredPlayback
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start shuffled playback of the entire music library. Analogous to the "Shuffle All" shortcut.
|
* Start shuffled playback of the entire music library. Analogous to the "Shuffle All" shortcut.
|
||||||
|
|
Loading…
Reference in a new issue