aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/org/pacien/tincapp/activities/StartActivity.kt
blob: 709989b8c38fd0632ad7aa129caabb0e9724ef88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package org.pacien.tincapp.activities

import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
import android.net.VpnService
import android.os.Bundle
import android.support.v7.app.AlertDialog
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.EditText
import android.widget.FrameLayout
import kotlinx.android.synthetic.main.base.*

import org.pacien.tincapp.R
import org.pacien.tincapp.context.AppPaths
import org.pacien.tincapp.service.TincVpnService

/**
 * @author pacien
 */
class StartActivity : BaseActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        layoutInflater.inflate(R.layout.page_start, main_content)
    }

    override fun onCreateOptionsMenu(m: Menu): Boolean {
        menuInflater.inflate(R.menu.menu_start, m)
        return super.onCreateOptionsMenu(m)
    }

    override fun onActivityResult(request: Int, result: Int, data: Intent?) {
        notify(if (result == Activity.RESULT_OK) R.string.message_vpn_permissions_granted else R.string.message_vpn_permissions_denied)
    }

    fun requestVpnPermission(@Suppress("UNUSED_PARAMETER") v: View) {
        val askPermIntent = VpnService.prepare(this)

        if (askPermIntent != null)
            startActivityForResult(askPermIntent, 0)
        else
            onActivityResult(0, Activity.RESULT_OK, null)
    }

    fun startVpnDialog(@Suppress("UNUSED_PARAMETER") v: View) {
        val i = EditText(this)
        i.layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)
        i.setHint(R.string.field_net_name)

        @SuppressLint("InflateParams")
        val vg = layoutInflater.inflate(R.layout.dialog_frame, main_content, false) as ViewGroup
        vg.addView(i)

        AlertDialog.Builder(this)
                .setTitle(R.string.title_connect_to_network)
                .setView(vg)
                .setPositiveButton(R.string.action_connect) { _, _ -> startVpn(i.text.toString()) }
                .setNegativeButton(R.string.action_close) { _, _ -> /* nop */ }
                .show()
    }

    fun openConfigureActivity(@Suppress("UNUSED_PARAMETER") i: MenuItem) = startActivity(Intent(this, ConfigureActivity::class.java))

    private fun startVpn(netName: String) {
        startService(Intent(this, TincVpnService::class.java).putExtra(TincVpnService.INTENT_EXTRA_NET_CONF,
                if (netName.startsWith("external/")) AppPaths.NetConf(AppPaths.Storage.EXTERNAL, netName.substringAfter("/"))
                else AppPaths.NetConf(AppPaths.Storage.INTERNAL, netName)))
    }

}