diff options
Diffstat (limited to 'android/src')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/VpnPermission.kt | 35 |
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) + } +} |
