diff options
| author | Aleksandr Granin <aleksandr@mullvad.net> | 2021-04-29 18:21:09 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-05-14 20:39:01 +0000 |
| commit | 670522a1f85f24a56d7e4e97b2f5392423f8d856 (patch) | |
| tree | 436530ac93cfd9a21937ee552c0358bc851cb713 /android/src/main | |
| parent | a1076abac6cb43941f01e16dbe0156c6eacd0361 (diff) | |
| download | mullvadvpn-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.kt | 27 |
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) + } + } +} |
