diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-12-02 11:03:14 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-12-02 11:03:14 -0300 |
| commit | a1f42024a130a87be8a3400cc38114e686f96888 (patch) | |
| tree | affce653753c543438fb0bcb58604fe519e88280 | |
| parent | 5cba8a22891e6871cdaca92709fb652829020582 (diff) | |
| parent | 793f8c9cdc00b05e5695e758bfd3459205b813ee (diff) | |
| download | mullvadvpn-a1f42024a130a87be8a3400cc38114e686f96888.tar.xz mullvadvpn-a1f42024a130a87be8a3400cc38114e686f96888.zip | |
Merge branch 'view-logs-screen'
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> |
