summaryrefslogtreecommitdiffhomepage
path: root/android/src/main
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-01-04 17:58:22 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-04-12 13:19:37 +0000
commit772f9580de1d486db3e547fa459c88610c32a137 (patch)
tree7dfc9a5c975225c71bdbb15f4cb0a3f00d46d9e6 /android/src/main
parent948f88006f2b8baf9be0fc8eba37940fad113ec0 (diff)
downloadmullvadvpn-772f9580de1d486db3e547fa459c88610c32a137.tar.xz
mullvadvpn-772f9580de1d486db3e547fa459c88610c32a137.zip
Use an `Intermittent<Boolean>` for VPN permission
Diffstat (limited to 'android/src/main')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/ConnectionProxy.kt13
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt2
2 files changed, 8 insertions, 7 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ConnectionProxy.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ConnectionProxy.kt
index 5bfdb25f07..fc5e6c9366 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ConnectionProxy.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ConnectionProxy.kt
@@ -3,7 +3,6 @@ package net.mullvad.mullvadvpn.service
import android.content.Context
import android.content.Intent
import android.net.VpnService
-import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
@@ -15,6 +14,7 @@ import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.model.TunnelState
import net.mullvad.mullvadvpn.ui.MainActivity
+import net.mullvad.mullvadvpn.util.Intermittent
import net.mullvad.talpid.tunnel.ActionAfterDisconnect
import net.mullvad.talpid.util.EventNotifier
@@ -35,9 +35,10 @@ class ConnectionProxy(val context: Context, val daemon: MullvadDaemon) {
private val initialState: TunnelState = TunnelState.Disconnected
+ val vpnPermission = Intermittent<Boolean>()
+
var onStateChange = EventNotifier(initialState)
var onUiStateChange = EventNotifier(initialState)
- var vpnPermission = CompletableDeferred<Boolean>()
var state by onStateChange.notifiable()
private set
@@ -58,7 +59,6 @@ class ConnectionProxy(val context: Context, val daemon: MullvadDaemon) {
fun connect() {
if (anticipateConnectingState()) {
- requestVpnPermission()
commandChannel.sendBlocking(Command.CONNECT)
}
}
@@ -92,6 +92,7 @@ class ConnectionProxy(val context: Context, val daemon: MullvadDaemon) {
when (command) {
Command.CONNECT -> {
+ requestVpnPermission()
vpnPermission.await()
daemon.connect()
}
@@ -178,13 +179,13 @@ class ConnectionProxy(val context: Context, val daemon: MullvadDaemon) {
resetAnticipatedStateJob = newJob
}
- private fun requestVpnPermission() {
+ private suspend fun requestVpnPermission() {
val intent = VpnService.prepare(context)
- vpnPermission = CompletableDeferred()
+ vpnPermission.update(null)
if (intent == null) {
- vpnPermission.complete(true)
+ vpnPermission.update(true)
} else {
val activity = mainActivity
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
index 486e1d156c..110e9e68ee 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
@@ -231,6 +231,6 @@ open class MainActivity : FragmentActivity() {
}
private fun setVpnPermission(allow: Boolean) = GlobalScope.launch(Dispatchers.Default) {
- serviceConnection?.connectionProxy?.vpnPermission?.complete(allow)
+ serviceConnection?.connectionProxy?.vpnPermission?.update(allow)
}
}