summaryrefslogtreecommitdiffhomepage
path: root/android/lib
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2023-10-16 17:10:31 +0200
committerAlbin <albin@mullvad.net>2023-10-16 17:10:31 +0200
commitd32b6f81ceb8c383588678e8fbabe613fbac4142 (patch)
tree2a33ca74411ee5208619d763dcde2b21b49988c2 /android/lib
parentdc70ef89771a89d1b978516e3415ddf5d50cc033 (diff)
parent989f57e29d1f694d8bfda186d52697aaf85dcae4 (diff)
downloadmullvadvpn-d32b6f81ceb8c383588678e8fbabe613fbac4142.tar.xz
mullvadvpn-d32b6f81ceb8c383588678e8fbabe613fbac4142.zip
Merge branch 'expose-flexible-ipc-message-handling'
Diffstat (limited to 'android/lib')
-rw-r--r--android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/DispatchingHandler.kt7
1 files changed, 7 insertions, 0 deletions
diff --git a/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/DispatchingHandler.kt b/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/DispatchingHandler.kt
index 7f6195c61e..dd73f3c156 100644
--- a/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/DispatchingHandler.kt
+++ b/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/DispatchingHandler.kt
@@ -7,12 +7,18 @@ import android.util.Log
import java.util.concurrent.locks.ReentrantReadWriteLock
import kotlin.concurrent.withLock
import kotlin.reflect.KClass
+import kotlinx.coroutines.flow.MutableSharedFlow
+import kotlinx.coroutines.flow.asSharedFlow
class DispatchingHandler<T : Any>(looper: Looper, private val extractor: (Message) -> T?) :
Handler(looper), MessageDispatcher<T> {
private val handlers = HashMap<KClass<out T>, (T) -> Unit>()
private val lock = ReentrantReadWriteLock()
+ private val _parsedMessages = MutableSharedFlow<T>(extraBufferCapacity = 1)
+ val parsedMessages = _parsedMessages.asSharedFlow()
+
+ @Deprecated("Use parsedMessages instead.")
override fun <V : T> registerHandler(variant: KClass<V>, handler: (V) -> Unit) {
lock.writeLock().withLock {
handlers.put(variant) { instance -> @Suppress("UNCHECKED_CAST") handler(instance as V) }
@@ -27,6 +33,7 @@ class DispatchingHandler<T : Any>(looper: Looper, private val extractor: (Messag
val handler = handlers.get(instance::class)
handler?.invoke(instance)
+ _parsedMessages.tryEmit(instance)
} else {
Log.e("mullvad", "Dispatching handler received an unexpected message")
}