summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-01-11 15:00:08 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-04-20 13:55:40 +0000
commitfda0d71fc634051027ceac503e1a3768e95207b1 (patch)
tree1d7c31406edbc54c9da3a89de5d84baba56b0945
parent6e9ee9561085e43e1c859ec2d50c00cd740feab6 (diff)
downloadmullvadvpn-fda0d71fc634051027ceac503e1a3768e95207b1.tar.xz
mullvadvpn-fda0d71fc634051027ceac503e1a3768e95207b1.zip
Create UI side `AuthTokenCache` helper class
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/AuthTokenCache.kt42
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()
+ }
+ }
+}