summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/VpnPermission.kt35
1 files changed, 35 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/VpnPermission.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/VpnPermission.kt
new file mode 100644
index 0000000000..1c59a51cfe
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/VpnPermission.kt
@@ -0,0 +1,35 @@
+package net.mullvad.mullvadvpn.service.endpoint
+
+import android.content.Context
+import android.content.Intent
+import android.net.VpnService
+import net.mullvad.mullvadvpn.ui.MainActivity
+import net.mullvad.mullvadvpn.util.Intermittent
+
+class VpnPermission(private val context: Context) {
+ private val isGranted = Intermittent<Boolean>()
+
+ suspend fun request(): Boolean {
+ val intent = VpnService.prepare(context)
+
+ if (intent == null) {
+ isGranted.update(true)
+ } 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)
+ }
+
+ isGranted.update(null)
+
+ context.startActivity(activityIntent)
+ }
+
+ return isGranted.await()
+ }
+
+ suspend fun grant(permission: Boolean) {
+ isGranted.update(permission)
+ }
+}