aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/org/pacien/tincapp/activities/PromptActivity.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/org/pacien/tincapp/activities/PromptActivity.kt')
-rw-r--r--app/src/main/java/org/pacien/tincapp/activities/PromptActivity.kt36
1 files changed, 25 insertions, 11 deletions
diff --git a/app/src/main/java/org/pacien/tincapp/activities/PromptActivity.kt b/app/src/main/java/org/pacien/tincapp/activities/PromptActivity.kt
index 6906ead..6310d63 100644
--- a/app/src/main/java/org/pacien/tincapp/activities/PromptActivity.kt
+++ b/app/src/main/java/org/pacien/tincapp/activities/PromptActivity.kt
@@ -2,9 +2,14 @@ package org.pacien.tincapp.activities
2 2
3import android.app.Activity 3import android.app.Activity
4import android.content.Intent 4import android.content.Intent
5import android.net.Uri
5import android.net.VpnService 6import android.net.VpnService
6import android.os.Bundle 7import android.os.Bundle
8import org.pacien.tincapp.BuildConfig
7import org.pacien.tincapp.context.App 9import org.pacien.tincapp.context.App
10import org.pacien.tincapp.intent.action.ACTION_CONNECT
11import org.pacien.tincapp.intent.action.ACTION_DISCONNECT
12import org.pacien.tincapp.intent.action.TINC_SCHEME
8import org.pacien.tincapp.service.TincVpnService 13import org.pacien.tincapp.service.TincVpnService
9 14
10/** 15/**
@@ -15,35 +20,44 @@ class PromptActivity : Activity() {
15 override fun onCreate(savedInstanceState: Bundle?) { 20 override fun onCreate(savedInstanceState: Bundle?) {
16 super.onCreate(savedInstanceState) 21 super.onCreate(savedInstanceState)
17 22
18 when (intent.getSerializableExtra(INTENT_EXTRA_ACTION) as Action) { 23 when (intent.action) {
19 Action.REQUEST_PERMISSION -> requestVpnPermission() 24 ACTION_CONNECT -> connect()
25 ACTION_DISCONNECT -> disconnect()
20 } 26 }
21 } 27 }
22 28
23 override fun onActivityResult(request: Int, result: Int, data: Intent?) { 29 override fun onActivityResult(request: Int, result: Int, data: Intent?) {
24 if (result == Activity.RESULT_OK) TincVpnService.startVpn(intent.getStringExtra(INTENT_EXTRA_NET_NAME)) 30 if (result == Activity.RESULT_OK) TincVpnService.startVpn(intent.data.schemeSpecificPart)
25 finish() 31 finish()
26 } 32 }
27 33
28 private fun requestVpnPermission() = VpnService.prepare(this).let { 34 private fun connect() = VpnService.prepare(this).let {
29 if (it != null) 35 if (it != null)
30 startActivityForResult(it, 0) 36 startActivityForResult(it, 0)
31 else 37 else
32 onActivityResult(0, Activity.RESULT_OK, Intent()) 38 onActivityResult(0, Activity.RESULT_OK, null)
39 }
40
41 private fun disconnect() {
42 TincVpnService.stopVpn()
43 finish()
33 } 44 }
34 45
35 companion object { 46 companion object {
36 private val INTENT_EXTRA_ACTION = "action"
37 private val INTENT_EXTRA_NET_NAME = "netName"
38 47
39 private enum class Action { REQUEST_PERMISSION } 48 fun connect(netName: String) {
49 App.getContext().startActivity(Intent(App.getContext(), PromptActivity::class.java)
50 .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
51 .setAction(ACTION_CONNECT)
52 .setData(Uri.Builder().scheme(TINC_SCHEME).opaquePart(netName).build()))
53 }
40 54
41 fun requestVpnPermission(netName: String) { 55 fun disconnect() {
42 App.getContext().startActivity(Intent(App.getContext(), PromptActivity::class.java) 56 App.getContext().startActivity(Intent(App.getContext(), PromptActivity::class.java)
43 .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 57 .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
44 .putExtra(INTENT_EXTRA_ACTION, Action.REQUEST_PERMISSION) 58 .setAction(ACTION_DISCONNECT))
45 .putExtra(INTENT_EXTRA_NET_NAME, netName))
46 } 59 }
60
47 } 61 }
48 62
49} 63}