mirror of
https://gitlab.com/ultrasonic/ultrasonic.git
synced 2025-05-06 18:41:05 +03:00
Emulate keycode for the Session callbacks
This commit is contained in:
parent
8004bc31fe
commit
cd27734c04
@ -73,7 +73,6 @@ class MediaPlayerService : Service() {
|
|||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
|
|
||||||
initMediaSessions()
|
|
||||||
downloader.onCreate()
|
downloader.onCreate()
|
||||||
shufflePlayBuffer.onCreate()
|
shufflePlayBuffer.onCreate()
|
||||||
localMediaPlayer.init()
|
localMediaPlayer.init()
|
||||||
@ -115,7 +114,8 @@ class MediaPlayerService : Service() {
|
|||||||
localMediaPlayer.release()
|
localMediaPlayer.release()
|
||||||
downloader.stop()
|
downloader.stop()
|
||||||
shufflePlayBuffer.onDestroy()
|
shufflePlayBuffer.onDestroy()
|
||||||
mediaSession!!.release()
|
mediaSession?.release()
|
||||||
|
mediaSession == null
|
||||||
} catch (ignored: Throwable) {
|
} catch (ignored: Throwable) {
|
||||||
}
|
}
|
||||||
Timber.i("MediaPlayerService stopped")
|
Timber.i("MediaPlayerService stopped")
|
||||||
@ -473,6 +473,9 @@ class MediaPlayerService : Service() {
|
|||||||
|
|
||||||
private fun updateMediaSession(currentPlaying: DownloadFile?, playerState: PlayerState) {
|
private fun updateMediaSession(currentPlaying: DownloadFile?, playerState: PlayerState) {
|
||||||
Timber.w("Updating the MediaSession")
|
Timber.w("Updating the MediaSession")
|
||||||
|
|
||||||
|
if (mediaSession == null) initMediaSessions()
|
||||||
|
|
||||||
// Set Metadata
|
// Set Metadata
|
||||||
val metadata = MediaMetadataCompat.Builder()
|
val metadata = MediaMetadataCompat.Builder()
|
||||||
val context = applicationContext
|
val context = applicationContext
|
||||||
@ -502,16 +505,19 @@ class MediaPlayerService : Service() {
|
|||||||
val state: Int
|
val state: Int
|
||||||
val isPlaying = (playerState === PlayerState.STARTED)
|
val isPlaying = (playerState === PlayerState.STARTED)
|
||||||
|
|
||||||
var actions: Long = PlaybackStateCompat.ACTION_PLAY_PAUSE or
|
var actions: Long = PlaybackStateCompat.ACTION_PLAY_PAUSE
|
||||||
PlaybackStateCompat.ACTION_SKIP_TO_NEXT or
|
// or
|
||||||
PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS
|
// PlaybackStateCompat.ACTION_SKIP_TO_NEXT or
|
||||||
|
// PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS
|
||||||
|
|
||||||
// Map our playerState to native PlaybackState
|
// Map our playerState to native PlaybackState
|
||||||
// TODO: Synchronize these APIs
|
// TODO: Synchronize these APIs
|
||||||
when (playerState) {
|
when (playerState) {
|
||||||
PlayerState.STARTED -> {
|
PlayerState.STARTED -> {
|
||||||
state = PlaybackStateCompat.STATE_PLAYING
|
state = PlaybackStateCompat.STATE_PLAYING
|
||||||
actions = actions or PlaybackStateCompat.ACTION_PAUSE or PlaybackStateCompat.ACTION_STOP
|
actions = actions or
|
||||||
|
PlaybackStateCompat.ACTION_PAUSE or
|
||||||
|
PlaybackStateCompat.ACTION_STOP
|
||||||
}
|
}
|
||||||
PlayerState.COMPLETED,
|
PlayerState.COMPLETED,
|
||||||
PlayerState.STOPPED -> {
|
PlayerState.STOPPED -> {
|
||||||
@ -523,7 +529,9 @@ class MediaPlayerService : Service() {
|
|||||||
}
|
}
|
||||||
PlayerState.PAUSED -> {
|
PlayerState.PAUSED -> {
|
||||||
state = PlaybackStateCompat.STATE_PAUSED
|
state = PlaybackStateCompat.STATE_PAUSED
|
||||||
actions = actions or PlaybackStateCompat.ACTION_PLAY or PlaybackStateCompat.ACTION_STOP
|
actions = actions or
|
||||||
|
PlaybackStateCompat.ACTION_PLAY or
|
||||||
|
PlaybackStateCompat.ACTION_STOP
|
||||||
}
|
}
|
||||||
else -> state = PlaybackStateCompat.STATE_PAUSED
|
else -> state = PlaybackStateCompat.STATE_PAUSED
|
||||||
}
|
}
|
||||||
@ -619,7 +627,10 @@ class MediaPlayerService : Service() {
|
|||||||
|
|
||||||
// Use the Media Style, to enable native Android support for playback notification
|
// Use the Media Style, to enable native Android support for playback notification
|
||||||
val style = androidx.media.app.NotificationCompat.MediaStyle()
|
val style = androidx.media.app.NotificationCompat.MediaStyle()
|
||||||
style.setMediaSession(mediaSessionToken)
|
|
||||||
|
if (mediaSessionToken != null) {
|
||||||
|
style.setMediaSession(mediaSessionToken)
|
||||||
|
}
|
||||||
|
|
||||||
// Clear old actions
|
// Clear old actions
|
||||||
notificationBuilder!!.clearActions()
|
notificationBuilder!!.clearActions()
|
||||||
@ -779,6 +790,11 @@ class MediaPlayerService : Service() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun initMediaSessions() {
|
private fun initMediaSessions() {
|
||||||
|
@Suppress("MagicNumber")
|
||||||
|
val keycode = 110
|
||||||
|
|
||||||
|
Timber.w("Creating media session")
|
||||||
|
|
||||||
mediaSession = MediaSessionCompat(applicationContext, "UltrasonicService")
|
mediaSession = MediaSessionCompat(applicationContext, "UltrasonicService")
|
||||||
mediaSessionToken = mediaSession!!.sessionToken
|
mediaSessionToken = mediaSession!!.sessionToken
|
||||||
// mediaController = new MediaControllerCompat(getApplicationContext(), mediaSessionToken);
|
// mediaController = new MediaControllerCompat(getApplicationContext(), mediaSessionToken);
|
||||||
@ -786,19 +802,33 @@ class MediaPlayerService : Service() {
|
|||||||
mediaSession!!.setCallback(object : MediaSessionCompat.Callback() {
|
mediaSession!!.setCallback(object : MediaSessionCompat.Callback() {
|
||||||
override fun onPlay() {
|
override fun onPlay() {
|
||||||
super.onPlay()
|
super.onPlay()
|
||||||
play()
|
|
||||||
|
getPendingIntentForMediaAction(
|
||||||
|
applicationContext,
|
||||||
|
KeyEvent.KEYCODE_MEDIA_PLAY,
|
||||||
|
keycode
|
||||||
|
).send()
|
||||||
|
|
||||||
Timber.w("Media Session Callback: onPlay")
|
Timber.w("Media Session Callback: onPlay")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
super.onPause()
|
super.onPause()
|
||||||
pause()
|
getPendingIntentForMediaAction(
|
||||||
|
applicationContext,
|
||||||
|
KeyEvent.KEYCODE_MEDIA_PAUSE,
|
||||||
|
keycode
|
||||||
|
).send()
|
||||||
Timber.w("Media Session Callback: onPause")
|
Timber.w("Media Session Callback: onPause")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
super.onStop()
|
super.onStop()
|
||||||
stop()
|
getPendingIntentForMediaAction(
|
||||||
|
applicationContext,
|
||||||
|
KeyEvent.KEYCODE_MEDIA_STOP,
|
||||||
|
keycode
|
||||||
|
).send()
|
||||||
Timber.w("Media Session Callback: onStop")
|
Timber.w("Media Session Callback: onStop")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user