playback: immediately ack index moves
Handling them later in the callback is no longer needed now that we have the MediaSession shim, and it caused desyncs in ReplayGain support.
This commit is contained in:
parent
957e212e59
commit
f04e05ad50
2 changed files with 22 additions and 25 deletions
|
@ -57,7 +57,7 @@ constructor(
|
||||||
flush()
|
flush()
|
||||||
}
|
}
|
||||||
|
|
||||||
init {
|
fun attach() {
|
||||||
playbackManager.addListener(this)
|
playbackManager.addListener(this)
|
||||||
playbackSettings.registerListener(this)
|
playbackSettings.registerListener(this)
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,8 @@ class ExoPlaybackStateHolder(
|
||||||
private val persistenceRepository: PersistenceRepository,
|
private val persistenceRepository: PersistenceRepository,
|
||||||
private val playbackSettings: PlaybackSettings,
|
private val playbackSettings: PlaybackSettings,
|
||||||
private val commandFactory: PlaybackCommand.Factory,
|
private val commandFactory: PlaybackCommand.Factory,
|
||||||
private val musicRepository: MusicRepository
|
private val musicRepository: MusicRepository,
|
||||||
|
private val replayGainProcessor: ReplayGainAudioProcessor
|
||||||
) :
|
) :
|
||||||
PlaybackStateHolder,
|
PlaybackStateHolder,
|
||||||
Player.Listener,
|
Player.Listener,
|
||||||
|
@ -86,6 +87,7 @@ class ExoPlaybackStateHolder(
|
||||||
|
|
||||||
fun attach() {
|
fun attach() {
|
||||||
player.addListener(this)
|
player.addListener(this)
|
||||||
|
replayGainProcessor.attach()
|
||||||
playbackManager.registerStateHolder(this)
|
playbackManager.registerStateHolder(this)
|
||||||
playbackSettings.registerListener(this)
|
playbackSettings.registerListener(this)
|
||||||
musicRepository.addUpdateListener(this)
|
musicRepository.addUpdateListener(this)
|
||||||
|
@ -96,6 +98,7 @@ class ExoPlaybackStateHolder(
|
||||||
player.removeListener(this)
|
player.removeListener(this)
|
||||||
playbackManager.unregisterStateHolder(this)
|
playbackManager.unregisterStateHolder(this)
|
||||||
musicRepository.removeUpdateListener(this)
|
musicRepository.removeUpdateListener(this)
|
||||||
|
replayGainProcessor.release()
|
||||||
player.release()
|
player.release()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,7 +193,8 @@ class ExoPlaybackStateHolder(
|
||||||
|
|
||||||
override fun seekTo(positionMs: Long) {
|
override fun seekTo(positionMs: Long) {
|
||||||
player.seekTo(positionMs)
|
player.seekTo(positionMs)
|
||||||
// Ack/state save handled on discontinuity
|
deferSave()
|
||||||
|
// Ack handled w/ExoPlayer events
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun repeatMode(repeatMode: RepeatMode) {
|
override fun repeatMode(repeatMode: RepeatMode) {
|
||||||
|
@ -253,7 +257,8 @@ class ExoPlaybackStateHolder(
|
||||||
player.pause()
|
player.pause()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Ack/state save is handled in timeline change
|
playbackManager.ack(this, StateAck.IndexMoved)
|
||||||
|
deferSave()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun prev() {
|
override fun prev() {
|
||||||
|
@ -265,7 +270,8 @@ class ExoPlaybackStateHolder(
|
||||||
if (!playbackSettings.rememberPause) {
|
if (!playbackSettings.rememberPause) {
|
||||||
player.play()
|
player.play()
|
||||||
}
|
}
|
||||||
// Ack/state save is handled in timeline change
|
playbackManager.ack(this, StateAck.IndexMoved)
|
||||||
|
deferSave()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun goto(index: Int) {
|
override fun goto(index: Int) {
|
||||||
|
@ -279,7 +285,8 @@ class ExoPlaybackStateHolder(
|
||||||
if (!playbackSettings.rememberPause) {
|
if (!playbackSettings.rememberPause) {
|
||||||
player.play()
|
player.play()
|
||||||
}
|
}
|
||||||
// Ack/state save is handled in timeline change
|
playbackManager.ack(this, StateAck.IndexMoved)
|
||||||
|
deferSave()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun playNext(songs: List<Song>, ack: StateAck.PlayNext) {
|
override fun playNext(songs: List<Song>, ack: StateAck.PlayNext) {
|
||||||
|
@ -405,15 +412,6 @@ class ExoPlaybackStateHolder(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
|
|
||||||
super.onMediaItemTransition(mediaItem, reason)
|
|
||||||
|
|
||||||
if (reason == Player.MEDIA_ITEM_TRANSITION_REASON_AUTO ||
|
|
||||||
reason == Player.MEDIA_ITEM_TRANSITION_REASON_SEEK) {
|
|
||||||
playbackManager.ack(this, StateAck.IndexMoved)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPlaybackStateChanged(playbackState: Int) {
|
override fun onPlaybackStateChanged(playbackState: Int) {
|
||||||
super.onPlaybackStateChanged(playbackState)
|
super.onPlaybackStateChanged(playbackState)
|
||||||
|
|
||||||
|
@ -423,21 +421,19 @@ class ExoPlaybackStateHolder(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPositionDiscontinuity(
|
override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
|
||||||
oldPosition: Player.PositionInfo,
|
super.onMediaItemTransition(mediaItem, reason)
|
||||||
newPosition: Player.PositionInfo,
|
|
||||||
reason: Int
|
if (reason == Player.MEDIA_ITEM_TRANSITION_REASON_AUTO) {
|
||||||
) {
|
playbackManager.ack(this, StateAck.IndexMoved)
|
||||||
super.onPositionDiscontinuity(oldPosition, newPosition, reason)
|
|
||||||
if (reason == Player.DISCONTINUITY_REASON_SEEK) {
|
|
||||||
// TODO: Once position also naturally drifts by some threshold, save
|
|
||||||
deferSave()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onEvents(player: Player, events: Player.Events) {
|
override fun onEvents(player: Player, events: Player.Events) {
|
||||||
super.onEvents(player, events)
|
super.onEvents(player, events)
|
||||||
|
|
||||||
|
// So many actions trigger progression changes that it becomes easier just to handle it
|
||||||
|
// in an ExoPlayer callback anyway. This doesn't really cause issues anywhere.
|
||||||
if (events.containsAny(
|
if (events.containsAny(
|
||||||
Player.EVENT_PLAY_WHEN_READY_CHANGED,
|
Player.EVENT_PLAY_WHEN_READY_CHANGED,
|
||||||
Player.EVENT_IS_PLAYING_CHANGED,
|
Player.EVENT_IS_PLAYING_CHANGED,
|
||||||
|
@ -559,7 +555,8 @@ class ExoPlaybackStateHolder(
|
||||||
persistenceRepository,
|
persistenceRepository,
|
||||||
playbackSettings,
|
playbackSettings,
|
||||||
commandFactory,
|
commandFactory,
|
||||||
musicRepository)
|
musicRepository,
|
||||||
|
replayGainProcessor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue