diff options
Diffstat (limited to 'android/src/main')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/util/EventNotifier.kt | 42 |
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() + } + } +} |
