aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/org/pacien/tincapp/activities/StatusActivity.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/org/pacien/tincapp/activities/StatusActivity.kt')
-rw-r--r--app/src/main/java/org/pacien/tincapp/activities/StatusActivity.kt88
1 files changed, 88 insertions, 0 deletions
diff --git a/app/src/main/java/org/pacien/tincapp/activities/StatusActivity.kt b/app/src/main/java/org/pacien/tincapp/activities/StatusActivity.kt
new file mode 100644
index 0000000..ca572ea
--- /dev/null
+++ b/app/src/main/java/org/pacien/tincapp/activities/StatusActivity.kt
@@ -0,0 +1,88 @@
1package org.pacien.tincapp.activities
2
3import android.content.Intent
4import android.os.Bundle
5import android.support.v7.app.AlertDialog
6import android.view.Menu
7import android.view.MenuItem
8import android.view.View
9import android.widget.AdapterView
10import android.widget.ArrayAdapter
11import android.widget.TextView
12import kotlinx.android.synthetic.main.base.*
13import kotlinx.android.synthetic.main.dialog_text_monopsace.view.*
14import kotlinx.android.synthetic.main.fragment_network_status_header.*
15import kotlinx.android.synthetic.main.page_status.*
16import org.pacien.tincapp.R
17import org.pacien.tincapp.commands.Tinc
18import org.pacien.tincapp.service.TincVpnService
19import org.pacien.tincapp.service.VpnInterfaceConfiguration
20
21/**
22 * @author pacien
23 */
24class StatusActivity : BaseActivity(), AdapterView.OnItemClickListener {
25
26 override fun onCreate(savedInstanceState: Bundle?) {
27 super.onCreate(savedInstanceState)
28 layoutInflater.inflate(R.layout.page_status, main_content)
29 writeContent()
30 }
31
32 override fun onCreateOptionsMenu(m: Menu): Boolean {
33 menuInflater.inflate(R.menu.menu_status, m)
34 return super.onCreateOptionsMenu(m)
35 }
36
37 override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
38 val nodeName = (view as TextView).text.toString()
39 val v = layoutInflater.inflate(R.layout.dialog_text_monopsace, main_content, false)
40 v.dialog_text_monospace.text = Tinc.info(TincVpnService.getCurrentNetName()!!, nodeName)
41
42 AlertDialog.Builder(this)
43 .setTitle(R.string.title_node_info)
44 .setView(v)
45 .setPositiveButton(R.string.action_close) { _, _ -> /* nop */ }
46 .show()
47 }
48
49 fun stopVpn(@Suppress("UNUSED_PARAMETER") i: MenuItem) {
50 TincVpnService.stopVpn()
51 startActivity(Intent(this, StartActivity::class.java).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
52 finish()
53 }
54
55 private fun TextView.setText(list: List<String>) {
56 if (list.isNotEmpty()) text = list.joinToString("\n")
57 else text = getString(R.string.value_none)
58 }
59
60 private fun getNodeNames() = Tinc.dumpNodes(TincVpnService.getCurrentNetName()!!).map { it.substringBefore(" ") }
61
62 private fun writeContent() {
63 node_list.addHeaderView(layoutInflater.inflate(R.layout.fragment_network_status_header, node_list, false), null, false)
64 node_list.addFooterView(View(this), null, false)
65 node_list.emptyView = node_list_empty
66 node_list.onItemClickListener = this
67 node_list.adapter = ArrayAdapter<String>(this, R.layout.fragment_list_item, getNodeNames())
68
69 text_network_name.text = TincVpnService.getCurrentNetName() ?: getString(R.string.value_none)
70 writeNetworkInfo(TincVpnService.getCurrentInterfaceCfg() ?: VpnInterfaceConfiguration())
71 }
72
73
74 private fun writeNetworkInfo(cfg: VpnInterfaceConfiguration) {
75 text_network_ip_addresses.setText(cfg.addresses.map { it.toString() })
76 text_network_routes.setText(cfg.routes.map { it.toString() })
77 text_network_dns_servers.setText(cfg.dnsServers)
78 text_network_search_domains.setText(cfg.searchDomains)
79 text_network_allow_bypass.text = getString(if (cfg.allowBypass) R.string.value_yes else R.string.value_no)
80
81 block_network_allowed_applications.visibility = if (cfg.allowedApplications.isNotEmpty()) View.VISIBLE else View.GONE
82 text_network_allowed_applications.setText(cfg.allowedApplications)
83
84 block_network_disallowed_applications.visibility = if (cfg.disallowedApplications.isNotEmpty()) View.VISIBLE else View.GONE
85 text_network_disallowed_applications.setText(cfg.disallowedApplications)
86 }
87
88}