diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-07-19 18:21:42 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-07-22 21:32:39 +0000 |
| commit | a26b62f9dabf12fcfd3c71612ab9417665cac77b (patch) | |
| tree | 51ac345da326f073ee7b32a0fb05ced0de581072 /android | |
| parent | 0347ddb088c2fa67ea65fa41f39c887af831bedb (diff) | |
| download | mullvadvpn-a26b62f9dabf12fcfd3c71612ab9417665cac77b.tar.xz mullvadvpn-a26b62f9dabf12fcfd3c71612ab9417665cac77b.zip | |
Create `KeyStatusListener` helper class
Diffstat (limited to 'android')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt new file mode 100644 index 0000000000..1279f59567 --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt @@ -0,0 +1,45 @@ +package net.mullvad.mullvadvpn.dataproxy + +import kotlinx.coroutines.launch +import kotlinx.coroutines.Deferred +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope + +import net.mullvad.mullvadvpn.MullvadDaemon +import net.mullvad.mullvadvpn.model.KeygenEvent + +class KeyStatusListener(val asyncDaemon: Deferred<MullvadDaemon>) { + private var daemon: MullvadDaemon? = null + + private val setUpJob = setUp() + + var keyStatus: KeygenEvent? = null + private set(value) { + synchronized(this) { + field = value + + if (value != null) { + onKeyStatusChange?.invoke(value) + } + } + } + + var onKeyStatusChange: ((KeygenEvent) -> Unit)? = null + set(value) { + field = value + + synchronized(this) { + keyStatus?.let { status -> value?.invoke(status) } + } + } + + private fun setUp() = GlobalScope.launch(Dispatchers.Default) { + daemon = asyncDaemon.await() + daemon?.onKeygenEvent = { event -> keyStatus = event } + } + + fun onDestroy() { + setUpJob.cancel() + daemon?.onKeygenEvent = null + } +} |
