parent
60a0fe17dd
commit
2171c971a3
|
@ -84,8 +84,7 @@ class LocalMediaPlayer(private val audioFocusHandler: AudioFocusHandler, private
|
||||||
// Froyo or lower
|
// Froyo or lower
|
||||||
}
|
}
|
||||||
mediaPlayerLooper = Looper.myLooper()
|
mediaPlayerLooper = Looper.myLooper()
|
||||||
// FIXME: Looper null??
|
mediaPlayerHandler = Handler(mediaPlayerLooper!!)
|
||||||
mediaPlayerHandler = Handler(mediaPlayerLooper)
|
|
||||||
Looper.loop()
|
Looper.loop()
|
||||||
}.start()
|
}.start()
|
||||||
|
|
||||||
|
@ -267,18 +266,26 @@ class LocalMediaPlayer(private val audioFocusHandler: AudioFocusHandler, private
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The remote control API is deprecated in API 21
|
||||||
|
*/
|
||||||
private fun updateRemoteControl() {
|
private fun updateRemoteControl() {
|
||||||
if (!Util.isLockScreenEnabled(context)) {
|
if (!Util.isLockScreenEnabled(context)) {
|
||||||
clearRemoteControl()
|
clearRemoteControl()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (remoteControlClient != null) {
|
|
||||||
|
if (remoteControlClient == null) {
|
||||||
|
remoteControlClient = createRemoteControlClient()
|
||||||
|
} else {
|
||||||
|
// FIXME: This looks like a hack. Why is it needed?
|
||||||
audioManager.unregisterRemoteControlClient(remoteControlClient)
|
audioManager.unregisterRemoteControlClient(remoteControlClient)
|
||||||
audioManager.registerRemoteControlClient(remoteControlClient)
|
audioManager.registerRemoteControlClient(remoteControlClient)
|
||||||
} else {
|
|
||||||
setUpRemoteControlClient()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Timber.i("In updateRemoteControl, playerState: %s [%d]", playerState, playerPosition)
|
Timber.i("In updateRemoteControl, playerState: %s [%d]", playerState, playerPosition)
|
||||||
|
|
||||||
if (playerState === PlayerState.STARTED) {
|
if (playerState === PlayerState.STARTED) {
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
|
||||||
remoteControlClient!!.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING)
|
remoteControlClient!!.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING)
|
||||||
|
@ -292,6 +299,7 @@ class LocalMediaPlayer(private val audioFocusHandler: AudioFocusHandler, private
|
||||||
remoteControlClient!!.setPlaybackState(RemoteControlClient.PLAYSTATE_PAUSED, playerPosition.toLong(), 1.0f)
|
remoteControlClient!!.setPlaybackState(RemoteControlClient.PLAYSTATE_PAUSED, playerPosition.toLong(), 1.0f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentPlaying != null) {
|
if (currentPlaying != null) {
|
||||||
val currentSong = currentPlaying!!.song
|
val currentSong = currentPlaying!!.song
|
||||||
val lockScreenBitmap = FileUtil.getAlbumArtBitmap(context, currentSong, Util.getMinDisplayMetric(context), true)
|
val lockScreenBitmap = FileUtil.getAlbumArtBitmap(context, currentSong, Util.getMinDisplayMetric(context), true)
|
||||||
|
@ -322,30 +330,40 @@ class LocalMediaPlayer(private val audioFocusHandler: AudioFocusHandler, private
|
||||||
|
|
||||||
private fun setUpRemoteControlClient() {
|
private fun setUpRemoteControlClient() {
|
||||||
if (!Util.isLockScreenEnabled(context)) return
|
if (!Util.isLockScreenEnabled(context)) return
|
||||||
val componentName = ComponentName(context.packageName, MediaButtonIntentReceiver::class.java.name)
|
|
||||||
if (remoteControlClient == null) {
|
|
||||||
val mediaButtonIntent = Intent(Intent.ACTION_MEDIA_BUTTON)
|
|
||||||
mediaButtonIntent.component = componentName
|
|
||||||
val broadcast = PendingIntent.getBroadcast(context, 0, mediaButtonIntent, PendingIntent.FLAG_UPDATE_CURRENT)
|
|
||||||
remoteControlClient = RemoteControlClient(broadcast)
|
|
||||||
audioManager.registerRemoteControlClient(remoteControlClient)
|
|
||||||
|
|
||||||
// Flags for the media transport control that this client supports.
|
if (remoteControlClient == null) {
|
||||||
var flags = RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS or
|
remoteControlClient = createRemoteControlClient()
|
||||||
RemoteControlClient.FLAG_KEY_MEDIA_NEXT or
|
|
||||||
RemoteControlClient.FLAG_KEY_MEDIA_PLAY or
|
|
||||||
RemoteControlClient.FLAG_KEY_MEDIA_PAUSE or
|
|
||||||
RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE or
|
|
||||||
RemoteControlClient.FLAG_KEY_MEDIA_STOP
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
|
|
||||||
flags = flags or RemoteControlClient.FLAG_KEY_MEDIA_POSITION_UPDATE
|
|
||||||
remoteControlClient!!.setOnGetPlaybackPositionListener { mediaPlayer.currentPosition.toLong() }
|
|
||||||
remoteControlClient!!.setPlaybackPositionUpdateListener { newPositionMs -> seekTo(newPositionMs.toInt()) }
|
|
||||||
}
|
|
||||||
remoteControlClient!!.setTransportControlFlags(flags)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun createRemoteControlClient(): RemoteControlClient {
|
||||||
|
val componentName = ComponentName(context.packageName, MediaButtonIntentReceiver::class.java.name)
|
||||||
|
val mediaButtonIntent = Intent(Intent.ACTION_MEDIA_BUTTON)
|
||||||
|
mediaButtonIntent.component = componentName
|
||||||
|
|
||||||
|
val broadcast = PendingIntent.getBroadcast(context, 0, mediaButtonIntent, PendingIntent.FLAG_UPDATE_CURRENT)
|
||||||
|
val remoteControlClient = RemoteControlClient(broadcast)
|
||||||
|
audioManager.registerRemoteControlClient(remoteControlClient)
|
||||||
|
|
||||||
|
// Flags for the media transport control that this client supports.
|
||||||
|
var flags = RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS or
|
||||||
|
RemoteControlClient.FLAG_KEY_MEDIA_NEXT or
|
||||||
|
RemoteControlClient.FLAG_KEY_MEDIA_PLAY or
|
||||||
|
RemoteControlClient.FLAG_KEY_MEDIA_PAUSE or
|
||||||
|
RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE or
|
||||||
|
RemoteControlClient.FLAG_KEY_MEDIA_STOP
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
|
||||||
|
flags = flags or RemoteControlClient.FLAG_KEY_MEDIA_POSITION_UPDATE
|
||||||
|
remoteControlClient.setOnGetPlaybackPositionListener { mediaPlayer.currentPosition.toLong() }
|
||||||
|
remoteControlClient.setPlaybackPositionUpdateListener { newPositionMs -> seekTo(newPositionMs.toInt()) }
|
||||||
|
}
|
||||||
|
|
||||||
|
remoteControlClient.setTransportControlFlags(flags)
|
||||||
|
|
||||||
|
return remoteControlClient
|
||||||
|
}
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
fun seekTo(position: Int) {
|
fun seekTo(position: Int) {
|
||||||
try {
|
try {
|
||||||
|
@ -728,4 +746,5 @@ class LocalMediaPlayer(private val audioFocusHandler: AudioFocusHandler, private
|
||||||
mainHandler.post(myRunnable)
|
mainHandler.post(myRunnable)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue