From 85e2e473e5b3e12ee2e39f4eaaa049ab0b48b328 Mon Sep 17 00:00:00 2001 From: tzugen Date: Thu, 6 May 2021 12:53:25 +0200 Subject: [PATCH 1/3] Fix a typo, make two functions private --- .../org/moire/ultrasonic/service/MediaPlayerService.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt index 94f05c8b..510a014a 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt @@ -116,7 +116,7 @@ class MediaPlayerService : Service() { downloader.stop() shufflePlayBuffer.onDestroy() mediaSession?.release() - mediaSession == null + mediaSession = null } catch (ignored: Throwable) { } Timber.i("MediaPlayerService stopped") @@ -848,7 +848,7 @@ class MediaPlayerService : Service() { } } - fun registerMediaButtonEventReceiver() { + private fun registerMediaButtonEventReceiver() { val component = ComponentName(packageName, MediaButtonIntentReceiver::class.java.name) val mediaButtonIntent = Intent(Intent.ACTION_MEDIA_BUTTON) mediaButtonIntent.component = component @@ -863,7 +863,7 @@ class MediaPlayerService : Service() { mediaSession?.setMediaButtonReceiver(pendingIntent) } - fun unregisterMediaButtonEventReceiver() { + private fun unregisterMediaButtonEventReceiver() { mediaSession?.setMediaButtonReceiver(null) } From a910818b70a9b3502062c4f9d828bf1a9ebc9639 Mon Sep 17 00:00:00 2001 From: tzugen Date: Thu, 6 May 2021 12:53:43 +0200 Subject: [PATCH 2/3] Add skip functions to lockscreen --- .../ultrasonic/service/MediaPlayerService.kt | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt index 510a014a..e6fd197e 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt @@ -502,10 +502,9 @@ class MediaPlayerService : Service() { val state: Int val isPlaying = (playerState === PlayerState.STARTED) - var actions: Long = PlaybackStateCompat.ACTION_PLAY_PAUSE -// or -// PlaybackStateCompat.ACTION_SKIP_TO_NEXT or -// PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS + var actions: Long = PlaybackStateCompat.ACTION_PLAY_PAUSE or + PlaybackStateCompat.ACTION_SKIP_TO_NEXT or + PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS // Map our playerState to native PlaybackState // TODO: Synchronize these APIs @@ -829,6 +828,26 @@ class MediaPlayerService : Service() { Timber.v("Media Session Callback: onStop") } + override fun onSkipToNext() { + super.onSkipToNext() + getPendingIntentForMediaAction( + applicationContext, + KeyEvent.KEYCODE_MEDIA_NEXT, + keycode + ).send() + Timber.v("Media Session Callback: onSkipToNext") + } + + override fun onSkipToPrevious() { + super.onSkipToPrevious() + getPendingIntentForMediaAction( + applicationContext, + KeyEvent.KEYCODE_MEDIA_PREVIOUS, + keycode + ).send() + Timber.v("Media Session Callback: onSkipToPrevious") + } + override fun onMediaButtonEvent(mediaButtonEvent: Intent): Boolean { // This probably won't be necessary once we implement more // of the modern media APIs, like the MediaController etc. From bc2c591ff2b635ece79a493cf9fafb6f504a2847 Mon Sep 17 00:00:00 2001 From: tzugen Date: Thu, 6 May 2021 13:00:44 +0200 Subject: [PATCH 3/3] Set isActive correctly when pausing. --- .../ultrasonic/service/MediaPlayerService.kt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt index e6fd197e..d2483a16 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt @@ -500,7 +500,7 @@ class MediaPlayerService : Service() { // Create playback State val playbackState = PlaybackStateCompat.Builder() val state: Int - val isPlaying = (playerState === PlayerState.STARTED) + val isActive: Boolean var actions: Long = PlaybackStateCompat.ACTION_PLAY_PAUSE or PlaybackStateCompat.ACTION_SKIP_TO_NEXT or @@ -511,25 +511,33 @@ class MediaPlayerService : Service() { when (playerState) { PlayerState.STARTED -> { state = PlaybackStateCompat.STATE_PLAYING + isActive = true actions = actions or PlaybackStateCompat.ACTION_PAUSE or PlaybackStateCompat.ACTION_STOP } PlayerState.COMPLETED, PlayerState.STOPPED -> { + isActive = false state = PlaybackStateCompat.STATE_STOPPED } PlayerState.IDLE -> { + isActive = false state = PlaybackStateCompat.STATE_NONE actions = 0L } PlayerState.PAUSED -> { + isActive = true state = PlaybackStateCompat.STATE_PAUSED actions = actions or PlaybackStateCompat.ACTION_PLAY or PlaybackStateCompat.ACTION_STOP } - else -> state = PlaybackStateCompat.STATE_PAUSED + else -> { + // These are the states PREPARING, PREPARED & DOWNLOADING + isActive = true + state = PlaybackStateCompat.STATE_PAUSED + } } playbackState.setState(state, PlaybackStateCompat.PLAYBACK_POSITION_UNKNOWN, 1.0f) @@ -541,9 +549,9 @@ class MediaPlayerService : Service() { mediaSession!!.setPlaybackState(playbackState.build()) // Set Active state - mediaSession!!.isActive = isPlaying + mediaSession!!.isActive = isActive - Timber.d("Setting the MediaSession to active = %s", isPlaying) + Timber.d("Setting the MediaSession to active = %s", isActive) } private fun createNotificationChannel() {