Make PlaybackStateManager use millis
Make PlaybackStateManager use millis for the current position instead of seconds, in order to be more in line with the rest of the code.
This commit is contained in:
parent
e00930cc5f
commit
909cea01fa
3 changed files with 22 additions and 18 deletions
|
@ -47,7 +47,7 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateCallback {
|
|||
private val playbackManager = PlaybackStateManager.getInstance()
|
||||
private lateinit var mediaSession: MediaSessionCompat
|
||||
private lateinit var systemReceiver: SystemEventReceiver
|
||||
private val notificationHolder = PlaybackNotificationHolder()
|
||||
private lateinit var notificationHolder: PlaybackNotificationHolder
|
||||
|
||||
private var changeIsFromAudioFocus = true
|
||||
|
||||
|
@ -70,6 +70,7 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateCallback {
|
|||
super.onCreate()
|
||||
|
||||
// --- PLAYER SETUP ---
|
||||
|
||||
player.addListener(this)
|
||||
|
||||
// Set up AudioFocus/AudioAttributes
|
||||
|
@ -85,14 +86,6 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateCallback {
|
|||
player.experimentalSetOffloadSchedulingEnabled(true)
|
||||
}
|
||||
|
||||
// --- PLAYBACKSTATEMANAGER SETUP ---
|
||||
|
||||
playbackManager.addCallback(this)
|
||||
|
||||
if (playbackManager.song != null) {
|
||||
restorePlayer()
|
||||
}
|
||||
|
||||
// --- SYSTEM RECEIVER SETUP ---
|
||||
|
||||
// Set up the media button callbacks
|
||||
|
@ -120,7 +113,17 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateCallback {
|
|||
|
||||
// --- NOTIFICATION SETUP ---
|
||||
|
||||
notificationHolder = PlaybackNotificationHolder()
|
||||
|
||||
notificationHolder.init(applicationContext, mediaSession)
|
||||
|
||||
// --- PLAYBACKSTATEMANAGER SETUP ---
|
||||
|
||||
playbackManager.addCallback(this)
|
||||
|
||||
if (playbackManager.song != null) {
|
||||
restorePlayer()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
|
@ -156,6 +159,8 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateCallback {
|
|||
if (isPlaying != playbackManager.isPlaying && changeIsFromAudioFocus) {
|
||||
playbackManager.setPlayingStatus(isPlaying)
|
||||
}
|
||||
|
||||
changeIsFromAudioFocus = true
|
||||
}
|
||||
|
||||
override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
|
||||
|
@ -174,14 +179,13 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateCallback {
|
|||
|
||||
override fun onPositionDiscontinuity(reason: Int) {
|
||||
if (reason == Player.DISCONTINUITY_REASON_SEEK) {
|
||||
playbackManager.setPosition(player.currentPosition / 1000)
|
||||
playbackManager.setPosition(player.currentPosition)
|
||||
}
|
||||
}
|
||||
|
||||
// --- PLAYBACK STATE CALLBACK OVERRIDES ---
|
||||
|
||||
override fun onSongUpdate(song: Song?) {
|
||||
changeIsFromAudioFocus = false
|
||||
|
||||
song?.let {
|
||||
val item = MediaItem.fromUri(it.id.toURI())
|
||||
|
@ -232,7 +236,7 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateCallback {
|
|||
override fun onSeekConfirm(position: Long) {
|
||||
changeIsFromAudioFocus = false
|
||||
|
||||
player.seekTo(position * 1000)
|
||||
player.seekTo(position)
|
||||
}
|
||||
|
||||
// --- OTHER FUNCTIONS ---
|
||||
|
@ -242,7 +246,7 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateCallback {
|
|||
val item = MediaItem.fromUri(it.id.toURI())
|
||||
player.setMediaItem(item)
|
||||
player.prepare()
|
||||
player.play()
|
||||
player.seekTo(playbackManager.position)
|
||||
|
||||
notificationHolder.setMetadata(it, this)
|
||||
}
|
||||
|
@ -278,7 +282,7 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateCallback {
|
|||
private fun startPollingPosition() {
|
||||
serviceScope.launch {
|
||||
pollCurrentPosition().takeWhile { player.isPlaying }.collect {
|
||||
playbackManager.setPosition(it / 1000)
|
||||
playbackManager.setPosition(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -129,7 +129,7 @@ class PlaybackViewModel : ViewModel(), PlaybackStateCallback {
|
|||
|
||||
// Update the position and push the change the playbackManager.
|
||||
fun updatePosition(progress: Int) {
|
||||
playbackManager.seekTo(progress.toLong())
|
||||
playbackManager.seekTo((progress * 1000).toLong())
|
||||
}
|
||||
|
||||
// --- QUEUE FUNCTIONS ---
|
||||
|
@ -199,7 +199,7 @@ class PlaybackViewModel : ViewModel(), PlaybackStateCallback {
|
|||
|
||||
override fun onPositionUpdate(position: Long) {
|
||||
if (!mIsSeeking.value!!) {
|
||||
mPosition.value = position
|
||||
mPosition.value = position / 1000
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -227,7 +227,7 @@ class PlaybackViewModel : ViewModel(), PlaybackStateCallback {
|
|||
Log.d(this::class.simpleName, "Attempting to restore playback state.")
|
||||
|
||||
mSong.value = playbackManager.song
|
||||
mPosition.value = playbackManager.position
|
||||
mPosition.value = playbackManager.position / 1000
|
||||
mQueue.value = playbackManager.queue
|
||||
mIndex.value = playbackManager.index
|
||||
mIsPlaying.value = playbackManager.isPlaying
|
||||
|
|
|
@ -181,7 +181,7 @@ internal class PlaybackStateManager {
|
|||
// Due to the hacky way I poll ExoPlayer positions, don't accept any bugged positions
|
||||
// that are over the duration of the song.
|
||||
mSong?.let {
|
||||
if (position <= it.seconds) {
|
||||
if (position <= it.duration) {
|
||||
mPosition = position
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue