Fix song transition in notification

This commit is contained in:
vfsfitvnm
2022-06-26 21:50:17 +02:00
parent 4e16d7b41d
commit f6b8cf937e

View File

@@ -1,6 +1,5 @@
package it.vfsfitvnm.vimusic.services package it.vfsfitvnm.vimusic.services
import android.annotation.SuppressLint
import android.app.Notification import android.app.Notification
import android.app.NotificationChannel import android.app.NotificationChannel
import android.app.NotificationManager import android.app.NotificationManager
@@ -19,6 +18,7 @@ import android.support.v4.media.session.PlaybackStateCompat
import android.support.v4.media.session.PlaybackStateCompat.* import android.support.v4.media.session.PlaybackStateCompat.*
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat.startForegroundService
import androidx.core.graphics.drawable.toBitmap import androidx.core.graphics.drawable.toBitmap
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.media.session.MediaButtonReceiver import androidx.media.session.MediaButtonReceiver
@@ -84,16 +84,10 @@ class PlayerService : Service(), Player.Listener, PlaybackStatsListener.Callback
private val songPendingLoudnessDb = mutableMapOf<String, Float?>() private val songPendingLoudnessDb = mutableMapOf<String, Float?>()
private val mediaControllerCallback = object : MediaControllerCompat.Callback() { private val mediaControllerCallback = object : MediaControllerCompat.Callback() {
@SuppressLint("SwitchIntDef")
override fun onPlaybackStateChanged(state: PlaybackStateCompat?) { override fun onPlaybackStateChanged(state: PlaybackStateCompat?) {
when (state?.state) { when (state?.state) {
STATE_PLAYING -> { STATE_PLAYING -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { startForegroundService(this@PlayerService, intent<PlayerService>())
startForegroundService(intent<PlayerService>())
} else {
startService(intent<PlayerService>())
}
startForeground(NotificationId, notification()) startForeground(NotificationId, notification())
} }
STATE_PAUSED -> { STATE_PAUSED -> {
@@ -103,13 +97,10 @@ class PlayerService : Service(), Player.Listener, PlaybackStatsListener.Callback
} }
} }
STATE_NONE -> { STATE_NONE -> {
if (player.duration != C.TIME_UNSET) { onPlaybackStateChanged(Player.STATE_READY)
metadataBuilder onIsPlayingChanged(player.playWhenReady)
.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, player.duration)
mediaSession.setMetadata(metadataBuilder.build())
}
notificationManager.notify(NotificationId, notification())
} }
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( override fun onPositionDiscontinuity(
oldPosition: Player.PositionInfo, oldPosition: Player.PositionInfo,
newPosition: Player.PositionInfo, newPosition: Player.PositionInfo,