diff options
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.kt | 36 |
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 | ||
3 | import android.app.Activity | 3 | import android.app.Activity |
4 | import android.content.Intent | 4 | import android.content.Intent |
5 | import android.net.Uri | ||
5 | import android.net.VpnService | 6 | import android.net.VpnService |
6 | import android.os.Bundle | 7 | import android.os.Bundle |
8 | import org.pacien.tincapp.BuildConfig | ||
7 | import org.pacien.tincapp.context.App | 9 | import org.pacien.tincapp.context.App |
10 | import org.pacien.tincapp.intent.action.ACTION_CONNECT | ||
11 | import org.pacien.tincapp.intent.action.ACTION_DISCONNECT | ||
12 | import org.pacien.tincapp.intent.action.TINC_SCHEME | ||
8 | import org.pacien.tincapp.service.TincVpnService | 13 | import 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 | } |