summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-12-02 11:03:14 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-12-02 11:03:14 -0300
commita1f42024a130a87be8a3400cc38114e686f96888 (patch)
treeaffce653753c543438fb0bcb58604fe519e88280
parent5cba8a22891e6871cdaca92709fb652829020582 (diff)
parent793f8c9cdc00b05e5695e758bfd3459205b813ee (diff)
downloadmullvadvpn-a1f42024a130a87be8a3400cc38114e686f96888.tar.xz
mullvadvpn-a1f42024a130a87be8a3400cc38114e686f96888.zip
Merge branch 'view-logs-screen'
-rw-r--r--CHANGELOG.md4
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/MullvadProblemReport.kt13
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ProblemReportFragment.kt18
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ViewLogsFragment.kt56
-rw-r--r--android/src/main/res/layout/problem_report.xml7
-rw-r--r--android/src/main/res/layout/view_logs.xml33
-rw-r--r--android/src/main/res/values/strings.xml1
7 files changed, 131 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 68f3f38605..dc8a5495a6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -23,6 +23,10 @@ Line wrap the file at 100 chars. Th
## [Unreleased]
+### Added
+#### Android
+- Add a screen to view the logs included in a problem report.
+
### Changed
- Upgrade wireguard-go to v0.0.20201118.
- Reduce logging about time outs when conneting to a WireGuard tunnel.
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/MullvadProblemReport.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/MullvadProblemReport.kt
index bebac103d7..12dd4cd43b 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/MullvadProblemReport.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/MullvadProblemReport.kt
@@ -57,6 +57,18 @@ class MullvadProblemReport {
}
}
+ suspend fun load(): String {
+ if (collectJob == null) {
+ collect()
+ }
+
+ if (collectJob?.await() ?: false) {
+ return problemReportPath.await().readText()
+ } else {
+ return "Failed to collect logs for problem report"
+ }
+ }
+
fun send(): Deferred<Boolean> {
synchronized(this) {
var currentJob = sendJob
@@ -92,6 +104,7 @@ class MullvadProblemReport {
val job = GlobalScope.launch(Dispatchers.Default) {
oldDeleteJob?.join()
problemReportPath.await().delete()
+ collectJob = null
}
deleteJob = job
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ProblemReportFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ProblemReportFragment.kt
index 67786151f9..491f0d53fc 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ProblemReportFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ProblemReportFragment.kt
@@ -95,6 +95,10 @@ class ProblemReportFragment : Fragment() {
editMessageButton = view.findViewById<Button>(R.id.edit_message_button)
tryAgainButton = view.findViewById<Button>(R.id.try_again_button)
+ view.findViewById<Button>(R.id.view_logs).setOnClickListener {
+ showLogs()
+ }
+
sendButton.setOnClickListener {
jobTracker.newUiJob("sendReport") {
sendReport(true)
@@ -139,6 +143,20 @@ class ProblemReportFragment : Fragment() {
super.onDetach()
}
+ private fun showLogs() {
+ fragmentManager?.beginTransaction()?.apply {
+ setCustomAnimations(
+ R.anim.fragment_enter_from_right,
+ R.anim.fragment_half_exit_to_left,
+ R.anim.fragment_half_enter_from_left,
+ R.anim.fragment_exit_to_right
+ )
+ replace(R.id.main_fragment, ViewLogsFragment())
+ addToBackStack(null)
+ commit()
+ }
+ }
+
private suspend fun sendReport(shouldConfirmNoEmail: Boolean) {
val userEmail = userEmailInput.text.trim().toString()
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ViewLogsFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ViewLogsFragment.kt
new file mode 100644
index 0000000000..30a81111b9
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ViewLogsFragment.kt
@@ -0,0 +1,56 @@
+package net.mullvad.mullvadvpn.ui
+
+import android.content.Context
+import android.os.Bundle
+import android.support.v4.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.EditText
+import net.mullvad.mullvadvpn.R
+import net.mullvad.mullvadvpn.dataproxy.MullvadProblemReport
+import net.mullvad.mullvadvpn.util.JobTracker
+
+class ViewLogsFragment : Fragment() {
+ private val jobTracker = JobTracker()
+
+ private lateinit var problemReport: MullvadProblemReport
+
+ private lateinit var logArea: EditText
+
+ override fun onAttach(context: Context) {
+ super.onAttach(context)
+
+ val parentActivity = context as MainActivity
+
+ problemReport = parentActivity.problemReport
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ val view = inflater.inflate(R.layout.view_logs, container, false)
+
+ view.findViewById<View>(R.id.back).setOnClickListener {
+ activity?.onBackPressed()
+ }
+
+ logArea = view.findViewById<EditText>(R.id.log_area)
+
+ return view
+ }
+
+ override fun onStart() {
+ super.onStart()
+
+ jobTracker.newUiJob("showLogs") {
+ val logs = jobTracker.runOnBackground {
+ problemReport.load()
+ }
+
+ logArea.setText(logs)
+ }
+ }
+}
diff --git a/android/src/main/res/layout/problem_report.xml b/android/src/main/res/layout/problem_report.xml
index c2bf03f1a7..fd0ce0864a 100644
--- a/android/src/main/res/layout/problem_report.xml
+++ b/android/src/main/res/layout/problem_report.xml
@@ -75,9 +75,14 @@
android:hint="@string/user_message_hint"
android:gravity="top"
style="@style/InputText" />
+ <Button android:id="@+id/view_logs"
+ android:layout_marginHorizontal="@dimen/side_margin"
+ android:layout_marginVertical="@dimen/button_separation"
+ android:enabled="true"
+ android:text="@string/view_logs"
+ style="@style/BlueButton" />
<Button android:id="@+id/send_button"
android:layout_marginHorizontal="@dimen/side_margin"
- android:layout_marginTop="@dimen/button_separation"
android:layout_marginBottom="@dimen/screen_vertical_margin"
android:enabled="false"
android:text="@string/send"
diff --git a/android/src/main/res/layout/view_logs.xml b/android/src/main/res/layout/view_logs.xml
new file mode 100644
index 0000000000..1175e2da17
--- /dev/null
+++ b/android/src/main/res/layout/view_logs.xml
@@ -0,0 +1,33 @@
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:mullvad="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/darkBlue"
+ android:gravity="left"
+ android:elevation="3dp"
+ android:orientation="vertical">
+ <net.mullvad.mullvadvpn.ui.widget.BackButton android:id="@+id/back"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ mullvad:text="@string/report_a_problem" />
+ <TextView android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="0"
+ android:layout_marginTop="2dp"
+ android:layout_marginHorizontal="@dimen/side_margin"
+ android:text="@string/view_logs"
+ style="@style/SettingsExpandedHeader" />
+ <EditText android:id="@+id/log_area"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:layout_marginTop="@dimen/vertical_space"
+ android:layout_marginHorizontal="@dimen/side_margin"
+ android:layout_marginBottom="@dimen/screen_vertical_margin"
+ android:editable="false"
+ android:textIsSelectable="true"
+ android:singleLine="false"
+ android:gravity="top"
+ style="@style/InputText" />
+</LinearLayout>
diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml
index 37d0747cb3..f39e93bba0 100644
--- a/android/src/main/res/values/strings.xml
+++ b/android/src/main/res/values/strings.xml
@@ -76,6 +76,7 @@
before being sent over an encrypted channel.</string>
<string name="user_email_hint">Your email (optional)</string>
<string name="user_message_hint">Describe your problem</string>
+ <string name="view_logs">View app logs</string>
<string name="send">Send</string>
<string name="sending">Sending...</string>
<string name="sent">Sent</string>