From 909cea01fa3388f1e004d98db4649baa0b97e8ae Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Sat, 31 Oct 2020 14:32:44 -0600 Subject: [PATCH] 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. --- .../oxycblt/auxio/playback/PlaybackService.kt | 32 +++++++++++-------- .../auxio/playback/PlaybackViewModel.kt | 6 ++-- .../playback/state/PlaybackStateManager.kt | 2 +- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackService.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackService.kt index da62abbf8..28631e0e4 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackService.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackService.kt @@ -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) } } } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt index a6b25c24a..b79acdd7d 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt @@ -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 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 510e5c5af..f98934000 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 @@ -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 } }