summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-04-08 13:45:55 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-04-12 13:19:37 +0000
commitd54186c61f7534e7658662310af25ba5ca079fbd (patch)
tree100125b6e17dd061a291aea8cb2c60ad63cc682d /android/src
parent29b7d99e20b3a42f4f65cf2cca51a129e408ecfa (diff)
downloadmullvadvpn-d54186c61f7534e7658662310af25ba5ca079fbd.tar.xz
mullvadvpn-d54186c61f7534e7658662310af25ba5ca079fbd.zip
Use new `VpnPermission` class
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/ConnectionProxy.kt37
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt6
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt2
3 files changed, 9 insertions, 36 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 adbe991673..aedacc8667 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ConnectionProxy.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ConnectionProxy.kt
@@ -1,8 +1,5 @@
package net.mullvad.mullvadvpn.service
-import android.content.Context
-import android.content.Intent
-import android.net.VpnService
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
@@ -13,6 +10,7 @@ import kotlinx.coroutines.channels.sendBlocking
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.model.TunnelState
+import net.mullvad.mullvadvpn.service.endpoint.VpnPermission
import net.mullvad.mullvadvpn.ui.MainActivity
import net.mullvad.mullvadvpn.util.Intermittent
import net.mullvad.talpid.tunnel.ActionAfterDisconnect
@@ -20,7 +18,7 @@ import net.mullvad.talpid.util.EventNotifier
val ANTICIPATED_STATE_TIMEOUT_MS = 1500L
-class ConnectionProxy(val context: Context, val daemon: Intermittent<MullvadDaemon>) {
+class ConnectionProxy(val vpnPermission: VpnPermission, val daemon: Intermittent<MullvadDaemon>) {
private enum class Command {
CONNECT,
RECONNECT,
@@ -35,8 +33,6 @@ class ConnectionProxy(val context: Context, val daemon: Intermittent<MullvadDaem
private val initialState: TunnelState = TunnelState.Disconnected
- val vpnPermission = Intermittent<Boolean>()
-
var onStateChange = EventNotifier(initialState)
var onUiStateChange = EventNotifier(initialState)
@@ -88,8 +84,7 @@ class ConnectionProxy(val context: Context, val daemon: Intermittent<MullvadDaem
when (command) {
Command.CONNECT -> {
- requestVpnPermission()
- vpnPermission.await()
+ vpnPermission.request()
daemon.await().connect()
}
Command.RECONNECT -> daemon.await().reconnect()
@@ -183,32 +178,6 @@ class ConnectionProxy(val context: Context, val daemon: Intermittent<MullvadDaem
resetAnticipatedStateJob = newJob
}
- private suspend fun requestVpnPermission() {
- val intent = VpnService.prepare(context)
-
- vpnPermission.update(null)
-
- if (intent == null) {
- vpnPermission.update(true)
- } else {
- val activity = mainActivity
-
- if (activity != null) {
- activity.requestVpnPermission(intent)
- } else {
- val activityIntent = Intent(context, MainActivity::class.java).apply {
- addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
- putExtra(MainActivity.KEY_SHOULD_CONNECT, true)
- }
-
- uiState = state
-
- context.startActivity(activityIntent)
- }
- }
- }
-
private fun fetchInitialState() = GlobalScope.launch(Dispatchers.Default) {
val currentState = daemon.await().getState()
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
index 132b998156..d287a811f1 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
@@ -15,6 +15,7 @@ import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.model.Settings
import net.mullvad.mullvadvpn.service.endpoint.ServiceEndpoint
+import net.mullvad.mullvadvpn.service.endpoint.VpnPermission
import net.mullvad.mullvadvpn.service.notifications.AccountExpiryNotification
import net.mullvad.mullvadvpn.service.persistence.SplitTunnelingPersistence
import net.mullvad.mullvadvpn.service.tunnelstate.TunnelStateUpdater
@@ -75,6 +76,7 @@ class MullvadVpnService : TalpidVpnService() {
private lateinit var keyguardManager: KeyguardManager
private lateinit var notificationManager: ForegroundNotificationManager
private lateinit var tunnelStateUpdater: TunnelStateUpdater
+ private lateinit var vpnPermission: VpnPermission
private var pendingAction by observable<PendingAction?>(null) { _, _, _ ->
val connectionProxy = instance?.connectionProxy
@@ -124,6 +126,8 @@ class MullvadVpnService : TalpidVpnService() {
start()
}
+
+ vpnPermission = VpnPermission(this)
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
@@ -230,7 +234,7 @@ class MullvadVpnService : TalpidVpnService() {
}
private suspend fun setUpInstance(daemon: MullvadDaemon, settings: Settings) {
- val connectionProxy = ConnectionProxy(this, daemonInstance.intermittentDaemon)
+ val connectionProxy = ConnectionProxy(vpnPermission, daemonInstance.intermittentDaemon)
val customDns = CustomDns(daemon, endpoint.settingsListener)
endpoint.splitTunneling.onChange.subscribe(this@MullvadVpnService) { excludedApps ->
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 110e9e68ee..7e660a18cc 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?.update(allow)
+ serviceConnection?.connectionProxy?.vpnPermission?.grant(allow)
}
}