Media3: Fix notification actions and their position

This commit is contained in:
Bnyro 2023-05-18 16:16:40 +02:00
parent 95e65ae7e3
commit 03d712d834

View File

@ -12,6 +12,7 @@ import android.os.Bundle
import android.support.v4.media.MediaDescriptionCompat import android.support.v4.media.MediaDescriptionCompat
import android.support.v4.media.MediaMetadataCompat import android.support.v4.media.MediaMetadataCompat
import android.support.v4.media.session.MediaSessionCompat import android.support.v4.media.session.MediaSessionCompat
import android.util.Log
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.core.app.PendingIntentCompat import androidx.core.app.PendingIntentCompat
@ -203,11 +204,14 @@ class NowPlayingNotification(
controller: MediaSession.ControllerInfo, controller: MediaSession.ControllerInfo,
): MediaSession.ConnectionResult { ): MediaSession.ConnectionResult {
val connectionResult = super.onConnect(session, controller) val connectionResult = super.onConnect(session, controller)
val availablePlayerCommands = connectionResult.availablePlayerCommands.buildUpon() val availableSessionCommands = connectionResult.availableSessionCommands.buildUpon()
.remove(Player.COMMAND_SEEK_TO_PREVIOUS) val availablePlayerCommands = connectionResult.availablePlayerCommands // Player.Commands.Builder().add(Player.COMMAND_PLAY_PAUSE).build()
.build() getCustomActions().forEach { button ->
button.sessionCommand?.let { availableSessionCommands.add(it) }
}
session.setAvailableCommands(controller, availableSessionCommands.build(), availablePlayerCommands)
return MediaSession.ConnectionResult.accept( return MediaSession.ConnectionResult.accept(
connectionResult.availableSessionCommands, availableSessionCommands.build(),
availablePlayerCommands, availablePlayerCommands,
) )
} }
@ -221,6 +225,25 @@ class NowPlayingNotification(
handlePlayerAction(customCommand.customAction) handlePlayerAction(customCommand.customAction)
return super.onCustomCommand(session, controller, customCommand, args) return super.onCustomCommand(session, controller, customCommand, args)
} }
override fun onPlayerCommandRequest(
session: MediaSession,
controller: MediaSession.ControllerInfo,
playerCommand: Int
): Int {
if (playerCommand == Player.COMMAND_SEEK_TO_PREVIOUS) {
handlePlayerAction(PREV)
return SessionResult.RESULT_SUCCESS
}
return super.onPlayerCommandRequest(session, controller, playerCommand)
}
override fun onPostConnect(
session: MediaSession,
controller: MediaSession.ControllerInfo
) {
session.setCustomLayout(getCustomActions())
}
} }
mediaSession = MediaSession.Builder(context, player) mediaSession = MediaSession.Builder(context, player)
@ -230,7 +253,8 @@ class NowPlayingNotification(
} }
private fun getCustomActions() = mutableListOf( private fun getCustomActions() = mutableListOf(
createMediaSessionAction(R.drawable.ic_prev_outlined, PREV), // disabled and overwritten in onPlayerCommandRequest
// createMediaSessionAction(R.drawable.ic_prev_outlined, PREV),
createMediaSessionAction(R.drawable.ic_next_outlined, NEXT), createMediaSessionAction(R.drawable.ic_next_outlined, NEXT),
createMediaSessionAction(R.drawable.ic_rewind_md, REWIND), createMediaSessionAction(R.drawable.ic_rewind_md, REWIND),
createMediaSessionAction(R.drawable.ic_forward_md, FORWARD), createMediaSessionAction(R.drawable.ic_forward_md, FORWARD),
@ -330,6 +354,8 @@ class NowPlayingNotification(
setSmallIcon(R.drawable.ic_launcher_lockscreen) setSmallIcon(R.drawable.ic_launcher_lockscreen)
setUseNextAction(false) setUseNextAction(false)
setUsePreviousAction(false) setUsePreviousAction(false)
setUseRewindAction(false)
setUseFastForwardAction(false)
setUseStopAction(true) setUseStopAction(true)
} }
} }