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