diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-01-11 15:00:08 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-04-20 13:55:40 +0000 |
| commit | fda0d71fc634051027ceac503e1a3768e95207b1 (patch) | |
| tree | 1d7c31406edbc54c9da3a89de5d84baba56b0945 /android | |
| parent | 6e9ee9561085e43e1c859ec2d50c00cd740feab6 (diff) | |
| download | mullvadvpn-fda0d71fc634051027ceac503e1a3768e95207b1.tar.xz mullvadvpn-fda0d71fc634051027ceac503e1a3768e95207b1.zip | |
Create UI side `AuthTokenCache` helper class
Diffstat (limited to 'android')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/AuthTokenCache.kt | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/AuthTokenCache.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/AuthTokenCache.kt new file mode 100644 index 0000000000..29077e55f6 --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/AuthTokenCache.kt @@ -0,0 +1,42 @@ +package net.mullvad.mullvadvpn.ui.serviceconnection + +import android.os.Messenger +import java.util.LinkedList +import kotlinx.coroutines.CompletableDeferred +import net.mullvad.mullvadvpn.ipc.DispatchingHandler +import net.mullvad.mullvadvpn.ipc.Event +import net.mullvad.mullvadvpn.ipc.Request + +class AuthTokenCache(val connection: Messenger, eventDispatcher: DispatchingHandler<Event>) { + private val fetchQueue = LinkedList<CompletableDeferred<String>>() + + init { + eventDispatcher.registerHandler(Event.AuthToken::class) { event -> + synchronized(this@AuthTokenCache) { + fetchQueue.poll()?.complete(event.token ?: "") + } + } + } + + suspend fun fetchAuthToken(): String { + val authToken = CompletableDeferred<String>() + + synchronized(this) { + fetchQueue.offer(authToken) + } + + connection.send(Request.FetchAuthToken.message) + + return authToken.await() + } + + fun onDestroy() { + synchronized(this) { + for (pendingFetch in fetchQueue) { + pendingFetch.cancel() + } + + fetchQueue.clear() + } + } +} |
