44 lines
1.2 KiB
Kotlin
44 lines
1.2 KiB
Kotlin
package com.looker.droidify.service
|
|
|
|
import android.content.ComponentName
|
|
import android.content.Context
|
|
import android.content.Intent
|
|
import android.content.ServiceConnection
|
|
import android.os.IBinder
|
|
|
|
class Connection<B : IBinder, S : ConnectionService<B>>(
|
|
private val serviceClass: Class<S>,
|
|
private val onBind: ((Connection<B, S>, B) -> Unit)? = null,
|
|
private val onUnbind: ((Connection<B, S>, B) -> Unit)? = null
|
|
) : ServiceConnection {
|
|
var binder: B? = null
|
|
private set
|
|
|
|
private fun handleUnbind() {
|
|
binder?.let {
|
|
binder = null
|
|
onUnbind?.invoke(this, it)
|
|
}
|
|
}
|
|
|
|
override fun onServiceConnected(componentName: ComponentName, binder: IBinder) {
|
|
@Suppress("UNCHECKED_CAST")
|
|
binder as B
|
|
this.binder = binder
|
|
onBind?.invoke(this, binder)
|
|
}
|
|
|
|
override fun onServiceDisconnected(componentName: ComponentName) {
|
|
handleUnbind()
|
|
}
|
|
|
|
fun bind(context: Context) {
|
|
context.bindService(Intent(context, serviceClass), this, Context.BIND_AUTO_CREATE)
|
|
}
|
|
|
|
fun unbind(context: Context) {
|
|
context.unbindService(this)
|
|
handleUnbind()
|
|
}
|
|
}
|