aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/org/pacien/tincapp/activities/ViewLogActivity.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/org/pacien/tincapp/activities/ViewLogActivity.kt')
-rw-r--r--app/src/main/java/org/pacien/tincapp/activities/ViewLogActivity.kt90
1 files changed, 90 insertions, 0 deletions
diff --git a/app/src/main/java/org/pacien/tincapp/activities/ViewLogActivity.kt b/app/src/main/java/org/pacien/tincapp/activities/ViewLogActivity.kt
new file mode 100644
index 0000000..67df51b
--- /dev/null
+++ b/app/src/main/java/org/pacien/tincapp/activities/ViewLogActivity.kt
@@ -0,0 +1,90 @@
1package org.pacien.tincapp.activities
2
3import android.os.Bundle
4import android.text.method.ScrollingMovementMethod
5import android.view.Menu
6import android.view.MenuItem
7import kotlinx.android.synthetic.main.base.*
8import kotlinx.android.synthetic.main.page_viewlog.*
9import org.pacien.tincapp.R
10import org.pacien.tincapp.commands.Executor
11import org.pacien.tincapp.commands.Tinc
12import org.pacien.tincapp.service.TincVpnService
13
14/**
15 * @author pacien
16 */
17class ViewLogActivity : BaseActivity() {
18 companion object {
19 private const val LOG_LEVEL = 4
20 private const val NEW_LINE = "\n"
21 }
22
23 private var logger: Process? = null
24
25 override fun onCreate(savedInstanceState: Bundle?) {
26 super.onCreate(savedInstanceState)
27 supportActionBar!!.setDisplayHomeAsUpEnabled(true)
28 layoutInflater.inflate(R.layout.page_viewlog, main_content)
29 startLogging()
30 }
31
32 override fun onCreateOptionsMenu(m: Menu): Boolean {
33 menuInflater.inflate(R.menu.menu_viewlog, m)
34 return super.onCreateOptionsMenu(m)
35 }
36
37 override fun onSupportNavigateUp(): Boolean {
38 finish()
39 return true
40 }
41
42 override fun onDestroy() {
43 stopLogging()
44 super.onDestroy()
45 }
46
47 fun toggleLogging(menuItem: MenuItem) {
48 if (logger == null) {
49 startLogging()
50 text_log.movementMethod = null
51 text_log.setTextIsSelectable(false)
52 menuItem.setIcon(R.drawable.ic_pause_circle_outline_primary_24dp)
53 } else {
54 stopLogging()
55 text_log.movementMethod = ScrollingMovementMethod.getInstance()
56 text_log.setTextIsSelectable(true)
57 menuItem.setIcon(R.drawable.ic_pause_circle_filled_primary_24dp)
58 }
59 }
60
61 private fun startLogging(level: Int = LOG_LEVEL) {
62 text_log.append(NEW_LINE)
63 text_log.append(resources.getString(R.string.message_log_level_set, level))
64 text_log.append(NEW_LINE)
65
66 Tinc.log(TincVpnService.getCurrentNetName()!!, level).let { process ->
67 logger = process
68 Executor.runAsyncTask { printLog(process) }
69 }
70 }
71
72 private fun stopLogging() {
73 logger?.destroy()
74 logger = null
75 }
76
77 private fun printLog(logger: Process) {
78 logger.inputStream?.use { inputStream ->
79 inputStream.bufferedReader().useLines { lines ->
80 lines.forEach {
81 text_log.post {
82 text_log.append(NEW_LINE)
83 text_log.append(it)
84 text_log.append(NEW_LINE)
85 }
86 }
87 }
88 }
89 }
90}