summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/util/EventNotifier.kt42
1 files changed, 42 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/util/EventNotifier.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/util/EventNotifier.kt
new file mode 100644
index 0000000000..ca45ca96e6
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/util/EventNotifier.kt
@@ -0,0 +1,42 @@
+package net.mullvad.mullvadvpn.util
+
+class EventNotifier<T>(private val initialValue: T) {
+ private val listeners = HashMap<Int, (T) -> Unit>()
+
+ private var idCounter = 0
+ private var latestEvent = initialValue
+
+ fun notify(event: T) {
+ synchronized(this) {
+ for (listener in listeners.values) {
+ listener(event)
+ }
+
+ latestEvent = event
+ }
+ }
+
+ fun subscribe(listener: (T) -> Unit): Int {
+ synchronized(this) {
+ val id = idCounter
+
+ idCounter += 1
+ listeners.put(id, listener)
+ listener(latestEvent)
+
+ return id
+ }
+ }
+
+ fun unsubscribe(id: Int) {
+ synchronized(this) {
+ listeners.remove(id)
+ }
+ }
+
+ fun unsubscribeAll() {
+ synchronized(this) {
+ listeners.clear()
+ }
+ }
+}