2019-04-20 05:29:45 +00:00
|
|
|
package code.name.monkey.retromusic.activities.base
|
2018-11-30 01:06:16 +00:00
|
|
|
|
|
|
|
import android.Manifest
|
2019-12-30 11:01:50 +00:00
|
|
|
import android.content.BroadcastReceiver
|
|
|
|
import android.content.ComponentName
|
|
|
|
import android.content.Context
|
|
|
|
import android.content.Intent
|
|
|
|
import android.content.IntentFilter
|
|
|
|
import android.content.ServiceConnection
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.os.IBinder
|
2018-11-30 01:06:16 +00:00
|
|
|
import code.name.monkey.retromusic.R
|
|
|
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
|
|
|
import code.name.monkey.retromusic.interfaces.MusicServiceEventListener
|
2019-12-30 11:01:50 +00:00
|
|
|
import code.name.monkey.retromusic.service.MusicService.FAVORITE_STATE_CHANGED
|
|
|
|
import code.name.monkey.retromusic.service.MusicService.MEDIA_STORE_CHANGED
|
|
|
|
import code.name.monkey.retromusic.service.MusicService.META_CHANGED
|
|
|
|
import code.name.monkey.retromusic.service.MusicService.PLAY_STATE_CHANGED
|
|
|
|
import code.name.monkey.retromusic.service.MusicService.QUEUE_CHANGED
|
|
|
|
import code.name.monkey.retromusic.service.MusicService.REPEAT_MODE_CHANGED
|
|
|
|
import code.name.monkey.retromusic.service.MusicService.SHUFFLE_MODE_CHANGED
|
2018-11-30 01:06:16 +00:00
|
|
|
import java.lang.ref.WeakReference
|
2019-12-30 11:01:50 +00:00
|
|
|
import java.util.ArrayList
|
2018-11-30 01:06:16 +00:00
|
|
|
|
2018-12-25 14:58:47 +00:00
|
|
|
abstract class AbsMusicServiceActivity : AbsBaseActivity(), MusicServiceEventListener {
|
2018-11-30 01:06:16 +00:00
|
|
|
|
2019-12-30 11:01:50 +00:00
|
|
|
private val mMusicServiceEventListeners = ArrayList<MusicServiceEventListener>()
|
|
|
|
|
|
|
|
private var serviceToken: MusicPlayerRemote.ServiceToken? = null
|
|
|
|
private var musicStateReceiver: MusicStateReceiver? = null
|
|
|
|
private var receiverRegistered: Boolean = false
|
|
|
|
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
|
super.onCreate(savedInstanceState)
|
|
|
|
serviceToken = MusicPlayerRemote.bindToService(this, object : ServiceConnection {
|
|
|
|
override fun onServiceConnected(name: ComponentName, service: IBinder) {
|
|
|
|
this@AbsMusicServiceActivity.onServiceConnected()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onServiceDisconnected(name: ComponentName) {
|
|
|
|
this@AbsMusicServiceActivity.onServiceDisconnected()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
setPermissionDeniedMessage(getString(R.string.permission_external_storage_denied))
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onDestroy() {
|
|
|
|
super.onDestroy()
|
|
|
|
MusicPlayerRemote.unbindFromService(serviceToken)
|
|
|
|
if (receiverRegistered) {
|
|
|
|
unregisterReceiver(musicStateReceiver)
|
|
|
|
receiverRegistered = false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fun addMusicServiceEventListener(listener: MusicServiceEventListener?) {
|
|
|
|
if (listener != null) {
|
|
|
|
mMusicServiceEventListeners.add(listener)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fun removeMusicServiceEventListener(listener: MusicServiceEventListener?) {
|
|
|
|
if (listener != null) {
|
|
|
|
mMusicServiceEventListeners.remove(listener)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onServiceConnected() {
|
|
|
|
if (!receiverRegistered) {
|
|
|
|
musicStateReceiver = MusicStateReceiver(this)
|
|
|
|
|
|
|
|
val filter = IntentFilter()
|
|
|
|
filter.addAction(PLAY_STATE_CHANGED)
|
|
|
|
filter.addAction(SHUFFLE_MODE_CHANGED)
|
|
|
|
filter.addAction(REPEAT_MODE_CHANGED)
|
|
|
|
filter.addAction(META_CHANGED)
|
|
|
|
filter.addAction(QUEUE_CHANGED)
|
|
|
|
filter.addAction(MEDIA_STORE_CHANGED)
|
|
|
|
filter.addAction(FAVORITE_STATE_CHANGED)
|
|
|
|
|
|
|
|
registerReceiver(musicStateReceiver, filter)
|
|
|
|
|
|
|
|
receiverRegistered = true
|
|
|
|
}
|
|
|
|
|
|
|
|
for (listener in mMusicServiceEventListeners) {
|
|
|
|
listener.onServiceConnected()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onServiceDisconnected() {
|
|
|
|
if (receiverRegistered) {
|
|
|
|
unregisterReceiver(musicStateReceiver)
|
|
|
|
receiverRegistered = false
|
|
|
|
}
|
|
|
|
|
|
|
|
for (listener in mMusicServiceEventListeners) {
|
|
|
|
listener.onServiceDisconnected()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onPlayingMetaChanged() {
|
|
|
|
for (listener in mMusicServiceEventListeners) {
|
|
|
|
listener.onPlayingMetaChanged()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onQueueChanged() {
|
|
|
|
for (listener in mMusicServiceEventListeners) {
|
|
|
|
listener.onQueueChanged()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onPlayStateChanged() {
|
|
|
|
for (listener in mMusicServiceEventListeners) {
|
|
|
|
listener.onPlayStateChanged()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onMediaStoreChanged() {
|
|
|
|
for (listener in mMusicServiceEventListeners) {
|
|
|
|
listener.onMediaStoreChanged()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onRepeatModeChanged() {
|
|
|
|
for (listener in mMusicServiceEventListeners) {
|
|
|
|
listener.onRepeatModeChanged()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onShuffleModeChanged() {
|
|
|
|
for (listener in mMusicServiceEventListeners) {
|
|
|
|
listener.onShuffleModeChanged()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onHasPermissionsChanged(hasPermissions: Boolean) {
|
|
|
|
super.onHasPermissionsChanged(hasPermissions)
|
|
|
|
val intent = Intent(MEDIA_STORE_CHANGED)
|
|
|
|
intent.putExtra(
|
|
|
|
"from_permissions_changed",
|
|
|
|
true
|
|
|
|
) // just in case we need to know this at some point
|
|
|
|
sendBroadcast(intent)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun getPermissionsToRequest(): Array<String> {
|
|
|
|
return arrayOf(
|
|
|
|
Manifest.permission.READ_EXTERNAL_STORAGE,
|
2020-02-17 17:40:28 +00:00
|
|
|
Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
|
|
|
Manifest.permission.BLUETOOTH
|
2019-12-30 11:01:50 +00:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
private class MusicStateReceiver(activity: AbsMusicServiceActivity) : BroadcastReceiver() {
|
|
|
|
|
|
|
|
private val reference: WeakReference<AbsMusicServiceActivity> = WeakReference(activity)
|
|
|
|
|
|
|
|
override fun onReceive(context: Context, intent: Intent) {
|
|
|
|
val action = intent.action
|
|
|
|
val activity = reference.get()
|
|
|
|
if (activity != null && action != null) {
|
|
|
|
when (action) {
|
|
|
|
FAVORITE_STATE_CHANGED, META_CHANGED -> activity.onPlayingMetaChanged()
|
|
|
|
QUEUE_CHANGED -> activity.onQueueChanged()
|
|
|
|
PLAY_STATE_CHANGED -> activity.onPlayStateChanged()
|
|
|
|
REPEAT_MODE_CHANGED -> activity.onRepeatModeChanged()
|
|
|
|
SHUFFLE_MODE_CHANGED -> activity.onShuffleModeChanged()
|
|
|
|
MEDIA_STORE_CHANGED -> activity.onMediaStoreChanged()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
companion object {
|
|
|
|
val TAG: String = AbsMusicServiceActivity::class.java.simpleName
|
|
|
|
}
|
2018-11-30 01:06:16 +00:00
|
|
|
}
|