Created
June 26, 2018 07:26
-
-
Save ziginsider/447ade2833f92bda45e9ce6591d50ff5 to your computer and use it in GitHub Desktop.
MainActivityMediaSession.kt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MainActivity : AppCompatActivity() { | |
private var mediaServiceBinder: MediaService.PlayerServiceBinder? = null | |
private var mediaController: MediaControllerCompat? = null | |
private var callback: MediaControllerCompat.Callback? = null | |
private var serviceConnection: ServiceConnection? = null | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_main) | |
callback = object : MediaControllerCompat.Callback() { | |
override fun onPlaybackStateChanged(state: PlaybackStateCompat?) { | |
state?.let { | |
val playing = state.state == PlaybackStateCompat.STATE_PLAYING | |
playButton.isEnabled = !playing | |
pauseButton.isEnabled = playing | |
stopButton.isEnabled = playing | |
} | |
} | |
} | |
serviceConnection = object : ServiceConnection { | |
override fun onServiceConnected(className: ComponentName?, service: IBinder?) { | |
mediaServiceBinder = service as MediaService.PlayerServiceBinder | |
try { | |
mediaController = MediaControllerCompat(this@MainActivity, | |
mediaServiceBinder?.getMediaSessionToken()!!) | |
mediaController?.registerCallback(callback as MediaControllerCompat.Callback) | |
callback?.onPlaybackStateChanged(mediaController?.playbackState) | |
} catch (e: RemoteException) { | |
mediaController = null | |
} | |
} | |
override fun onServiceDisconnected(className: ComponentName?) { | |
mediaServiceBinder = null | |
if (mediaController != null) { | |
mediaController?.unregisterCallback(callback as MediaControllerCompat.Callback) | |
mediaController = null | |
} | |
} | |
} | |
bindService(Intent(this, MediaService::class.java), serviceConnection, Context.BIND_AUTO_CREATE) | |
previousButton.setOnClickListener { previousTrack() } | |
playButton.setOnClickListener { playTrack() } | |
stopButton.setOnClickListener { stopPlaying() } | |
pauseButton.setOnClickListener { pausePlaying() } | |
nextButton.setOnClickListener { nextTrack() } | |
} | |
private fun nextTrack() { | |
mediaController?.let { | |
it.transportControls.skipToNext() | |
outputTextView.append("next track ${mediaController?.metadata?.description?.title} was chosen...\n") | |
buttonChangeColor(BUTTON_NEXT) | |
} | |
} | |
private fun pausePlaying() { | |
mediaController?.let { | |
it.transportControls.pause() | |
outputTextView.append("track ${mediaController?.metadata?.description?.title} was paused...\n") | |
buttonChangeColor(BUTTON_PAUSE) | |
} | |
} | |
private fun stopPlaying() { | |
mediaController?.let { | |
it.transportControls.stop() | |
outputTextView.append("track ${mediaController?.metadata?.description?.title} was stopped...\n") | |
buttonChangeColor(BUTTON_STOP) | |
} | |
} | |
private fun playTrack() { | |
mediaController?.let { | |
it.transportControls.play() | |
outputTextView.append("track ${mediaController?.metadata?.description?.title} is playing...\n") | |
buttonChangeColor(BUTTON_PLAY) | |
} | |
} | |
private fun previousTrack() { | |
mediaController?.let { | |
it.transportControls.skipToPrevious() | |
outputTextView.append("previous track ${mediaController?.metadata?.description?.title} was chosen...\n") | |
buttonChangeColor(BUTTON_PREVIOUS) | |
} | |
} | |
fun buttonChangeColor(typeButton: Int) { | |
pauseButton.setBackgroundResource(android.R.drawable.btn_default) | |
playButton.setBackgroundResource(android.R.drawable.btn_default) | |
stopButton.setBackgroundResource(android.R.drawable.btn_default) | |
nextButton.setBackgroundResource(android.R.drawable.btn_default) | |
previousButton.setBackgroundResource(android.R.drawable.btn_default) | |
when (typeButton) { | |
BUTTON_PLAY -> playButton.setBackgroundResource(R.color.colorButtonClick) | |
BUTTON_PAUSE -> pauseButton.setBackgroundResource(R.color.colorButtonClick) | |
BUTTON_STOP -> stopButton.setBackgroundResource(R.color.colorButtonClick) | |
BUTTON_NEXT -> nextButton.setBackgroundResource(R.color.colorButtonClick) | |
BUTTON_PREVIOUS -> previousButton.setBackgroundResource(R.color.colorButtonClick) | |
} | |
} | |
override fun onDestroy() { | |
super.onDestroy() | |
mediaServiceBinder = null | |
if (mediaController != null) { | |
mediaController?.unregisterCallback(callback as MediaControllerCompat.Callback) | |
mediaController = null | |
} | |
unbindService(serviceConnection) | |
} | |
companion object { | |
private const val BUTTON_PLAY = 1 | |
private const val BUTTON_STOP = 2 | |
private const val BUTTON_PAUSE = 3 | |
private const val BUTTON_NEXT = 4 | |
private const val BUTTON_PREVIOUS = 5 | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment