diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-04-08 13:45:55 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-04-12 13:19:37 +0000 |
| commit | d54186c61f7534e7658662310af25ba5ca079fbd (patch) | |
| tree | 100125b6e17dd061a291aea8cb2c60ad63cc682d /android/src | |
| parent | 29b7d99e20b3a42f4f65cf2cca51a129e408ecfa (diff) | |
| download | mullvadvpn-d54186c61f7534e7658662310af25ba5ca079fbd.tar.xz mullvadvpn-d54186c61f7534e7658662310af25ba5ca079fbd.zip | |
Use new `VpnPermission` class
Diffstat (limited to 'android/src')
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) } } |
