From f6b8cf937e7e1c4829ea30bcdf72779c8074c6f7 Mon Sep 17 00:00:00 2001 From: vfsfitvnm Date: Sun, 26 Jun 2022 21:50:17 +0200 Subject: [PATCH] Fix song transition in notification --- .../vimusic/services/PlayerService.kt | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/services/PlayerService.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/services/PlayerService.kt index d696006..5da0fd0 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/services/PlayerService.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/services/PlayerService.kt @@ -1,6 +1,5 @@ package it.vfsfitvnm.vimusic.services -import android.annotation.SuppressLint import android.app.Notification import android.app.NotificationChannel import android.app.NotificationManager @@ -19,6 +18,7 @@ import android.support.v4.media.session.PlaybackStateCompat import android.support.v4.media.session.PlaybackStateCompat.* import androidx.annotation.DrawableRes import androidx.core.app.NotificationCompat +import androidx.core.content.ContextCompat.startForegroundService import androidx.core.graphics.drawable.toBitmap import androidx.core.net.toUri import androidx.media.session.MediaButtonReceiver @@ -84,16 +84,10 @@ class PlayerService : Service(), Player.Listener, PlaybackStatsListener.Callback private val songPendingLoudnessDb = mutableMapOf() private val mediaControllerCallback = object : MediaControllerCompat.Callback() { - @SuppressLint("SwitchIntDef") override fun onPlaybackStateChanged(state: PlaybackStateCompat?) { when (state?.state) { STATE_PLAYING -> { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - startForegroundService(intent()) - } else { - startService(intent()) - } - + startForegroundService(this@PlayerService, intent()) startForeground(NotificationId, notification()) } STATE_PAUSED -> { @@ -103,13 +97,10 @@ class PlayerService : Service(), Player.Listener, PlaybackStatsListener.Callback } } STATE_NONE -> { - if (player.duration != C.TIME_UNSET) { - metadataBuilder - .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, player.duration) - mediaSession.setMetadata(metadataBuilder.build()) - } - notificationManager.notify(NotificationId, notification()) + onPlaybackStateChanged(Player.STATE_READY) + onIsPlayingChanged(player.playWhenReady) } + else -> {} } } } @@ -264,6 +255,16 @@ class PlayerService : Service(), Player.Listener, PlaybackStatsListener.Callback } } + override fun onPlaybackStateChanged(@Player.State playbackState: Int) { + if (playbackState == Player.STATE_READY) { + if (player.duration != C.TIME_UNSET) { + metadataBuilder + .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, player.duration) + mediaSession.setMetadata(metadataBuilder.build()) + } + } + } + override fun onPositionDiscontinuity( oldPosition: Player.PositionInfo, newPosition: Player.PositionInfo,