diff options
Diffstat (limited to 'android/src/main')
| -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 + } +} |
