summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/talpid/util/EventNotifier.kt13
1 files changed, 13 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/talpid/util/EventNotifier.kt b/android/src/main/kotlin/net/mullvad/talpid/util/EventNotifier.kt
index 581078ab58..405722f010 100644
--- a/android/src/main/kotlin/net/mullvad/talpid/util/EventNotifier.kt
+++ b/android/src/main/kotlin/net/mullvad/talpid/util/EventNotifier.kt
@@ -55,3 +55,16 @@ class EventNotifier<T>(private val initialValue: T) {
notify(newValue)
}
}
+
+fun <T> autoSubscribable(id: Any, fallback: T, listener: (T) -> Unit) =
+ observable<EventNotifier<T>?>(null) { _, old, new ->
+ if (old != new) {
+ old?.unsubscribe(id)
+
+ if (new == null) {
+ listener.invoke(fallback)
+ } else {
+ new.subscribe(id, listener)
+ }
+ }
+ }