summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-08-23 11:48:28 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-08-29 11:13:17 +0000
commite9f28bba48483c1bcb9aca0a664100c8d175e0fb (patch)
treec810f513a57daae568f19efd39d06cd4df0dc71b /android
parentdb82563622aaf571a3750a3e2baf7d80ad2f432e (diff)
downloadmullvadvpn-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.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()
+ }
+ }
+}