summaryrefslogtreecommitdiffhomepage
path: root/android/src/main
diff options
context:
space:
mode:
authorAleksandr Granin <aleksandr@mullvad.net>2021-04-29 18:21:09 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-05-14 20:39:01 +0000
commit670522a1f85f24a56d7e4e97b2f5392423f8d856 (patch)
tree436530ac93cfd9a21937ee552c0358bc851cb713 /android/src/main
parenta1076abac6cb43941f01e16dbe0156c6eacd0361 (diff)
downloadmullvadvpn-670522a1f85f24a56d7e4e97b2f5392423f8d856.tar.xz
mullvadvpn-670522a1f85f24a56d7e4e97b2f5392423f8d856.zip
Create `Context.bindServiceFlow` extension method
Diffstat (limited to 'android/src/main')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt27
1 files changed, 27 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt
index 45c45f4e16..71ce51a005 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt
@@ -1,5 +1,10 @@
package net.mullvad.mullvadvpn.util
+import android.content.ComponentName
+import android.content.Context
+import android.content.Intent
+import android.content.ServiceConnection
+import android.os.IBinder
import android.view.animation.Animation
import kotlin.coroutines.EmptyCoroutineContext
import kotlinx.coroutines.Dispatchers
@@ -26,3 +31,25 @@ fun Animation.transitionFinished(): Flow<Unit> = callbackFlow<Unit> {
}
}
}.take(1)
+
+fun Context.bindServiceFlow(intent: Intent, flags: Int = 0): Flow<IBinder?> = callbackFlow {
+ val connectionCallback = object : ServiceConnection {
+ override fun onServiceConnected(className: ComponentName, binder: IBinder) {
+ safeOffer(binder)
+ }
+
+ override fun onServiceDisconnected(className: ComponentName) {
+ safeOffer(null)
+ }
+ }
+
+ bindService(intent, connectionCallback, flags)
+
+ awaitClose {
+ safeOffer(null)
+
+ Dispatchers.Default.dispatch(EmptyCoroutineContext) {
+ unbindService(connectionCallback)
+ }
+ }
+}