diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-08-23 11:48:28 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-08-29 11:13:17 +0000 |
| commit | e9f28bba48483c1bcb9aca0a664100c8d175e0fb (patch) | |
| tree | c810f513a57daae568f19efd39d06cd4df0dc71b /android | |
| parent | db82563622aaf571a3750a3e2baf7d80ad2f432e (diff) | |
| download | mullvadvpn-e9f28bba48483c1bcb9aca0a664100c8d175e0fb.tar.xz mullvadvpn-e9f28bba48483c1bcb9aca0a664100c8d175e0fb.zip | |
Create `EventNotifier` helper class
Diffstat (limited to 'android')
| -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() + } + } +} |
