diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-28 15:21:41 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-29 14:00:10 +0000 |
| commit | dcb94332ab4b9f881df1ba2fcf5d1ef449704fd4 (patch) | |
| tree | 58c4784ca316b8263f1596c475b8cc7f23e7d516 | |
| parent | 091ea2eccbb27032f4b5657fb52d84d78f8d1efc (diff) | |
| download | mullvadvpn-dcb94332ab4b9f881df1ba2fcf5d1ef449704fd4.tar.xz mullvadvpn-dcb94332ab4b9f881df1ba2fcf5d1ef449704fd4.zip | |
Request for VPN permissions before connecting
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectFragment.kt | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectFragment.kt index 4a853b2f7b..b288ecfdbc 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectFragment.kt @@ -7,7 +7,10 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job +import android.app.Activity import android.content.Context +import android.content.Intent +import android.net.VpnService import android.os.Bundle import android.os.Handler import android.support.v4.app.Fragment @@ -24,7 +27,10 @@ class ConnectFragment : Fragment() { private lateinit var notificationBanner: NotificationBanner private lateinit var status: ConnectionStatus + private lateinit var parentActivity: MainActivity + private var daemon = CompletableDeferred<MullvadDaemon>() + private var vpnPermission = CompletableDeferred<Unit>() private var generateWireguardKeyJob = generateWireguardKey() @@ -36,7 +42,8 @@ class ConnectFragment : Fragment() { override fun onAttach(context: Context) { super.onAttach(context) - waitForDaemonJob = waitForDaemon((context as MainActivity).asyncDaemon) + parentActivity = context as MainActivity + waitForDaemonJob = waitForDaemon(parentActivity.asyncDaemon) } override fun onCreateView( @@ -75,6 +82,12 @@ class ConnectFragment : Fragment() { super.onDestroyView() } + override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { + if (resultCode == Activity.RESULT_OK) { + vpnPermission.complete(Unit) + } + } + private fun waitForDaemon(asyncDaemon: Deferred<MullvadDaemon>) = GlobalScope.launch(Dispatchers.Default) { daemon.complete(asyncDaemon.await()) @@ -97,11 +110,26 @@ class ConnectFragment : Fragment() { } } + private fun requestVpnPermission() { + val intent = VpnService.prepare(parentActivity) + + vpnPermission = CompletableDeferred<Unit>() + + if (intent != null) { + startActivityForResult(intent, 0) + } else { + onActivityResult(0, Activity.RESULT_OK, null) + } + } + private fun connect() { updateViewToPreConnecting() activeAction?.cancel() + requestVpnPermission() + activeAction = GlobalScope.launch(Dispatchers.Default) { + vpnPermission.await() generateWireguardKeyJob.join() daemon.await().connect() } |
