From f85959cd89ea98d583a7be01c73a6313bd292113 Mon Sep 17 00:00:00 2001 From: Patrick Demers Date: Wed, 2 Nov 2022 07:16:23 -0500 Subject: [PATCH] add button to export logs to GitHub issue (#1180) --- .../settings/CrashReportsFragment.java | 39 +++++++++++++++++++ .../main/res/menu/crash_reports_fragment.xml | 6 +++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 46 insertions(+) diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/settings/CrashReportsFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/settings/CrashReportsFragment.java index 730e7a7a..602b8bdf 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/settings/CrashReportsFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/settings/CrashReportsFragment.java @@ -2,7 +2,10 @@ package ml.docilealligator.infinityforreddit.settings; import android.annotation.SuppressLint; import android.content.Context; +import android.content.Intent; import android.content.res.ColorStateList; +import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; @@ -20,10 +23,16 @@ import androidx.recyclerview.widget.RecyclerView; import com.crazylegend.crashyreporter.CrashyReporter; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.List; + import javax.inject.Inject; +import ml.docilealligator.infinityforreddit.BuildConfig; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; +import ml.docilealligator.infinityforreddit.activities.LinkResolverActivity; import ml.docilealligator.infinityforreddit.activities.SettingsActivity; import ml.docilealligator.infinityforreddit.adapters.CrashReportsRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; @@ -68,10 +77,40 @@ public class CrashReportsFragment extends Fragment { CrashyReporter.INSTANCE.purgeLogs(); Toast.makeText(activity, R.string.crash_reports_deleted, Toast.LENGTH_SHORT).show(); return true; + } else if (item.getItemId() == R.id.action_export_logs_crash_reports_fragment) { + return createGithubIssueWithLogs(); } return false; } + /** + * Fetch the logs from CrashyReporter and open browser to create GitHub issue page. + * Issue will have logs, device model, app version, and Android version prefilled. + * @return if successful + */ + private boolean createGithubIssueWithLogs() { + Intent intent = new Intent(getContext(), LinkResolverActivity.class); + String logs, model, appVersion, androidVersion; + try { + List logLines = CrashyReporter.INSTANCE.getLogsAsStrings(); + if (logLines == null) { + return false; + } + logs = String.join("\n", logLines); + // limit size to 6800 characters to avoid `414 URI Too Long` + logs = URLEncoder.encode("```\n" + (logs.length() > 0 ? logs.substring(0, Math.min(6800, logs.length())) : "No logs found.") + "\n```", "UTF-8"); + model = URLEncoder.encode(Build.MANUFACTURER + " " + Build.MODEL, "UTF-8"); + appVersion = URLEncoder.encode(BuildConfig.VERSION_NAME, "UTF-8"); + androidVersion = URLEncoder.encode(Build.VERSION.RELEASE, "UTF-8"); + } catch (UnsupportedEncodingException e) { + return false; + } + Uri githubIssueUri = Uri.parse(String.format("https://github.com/Docile-Alligator/Infinity-For-Reddit/issues/new?labels=possible-bug&device=%s&version=%s&android_version=%s&logs=%s&&template=BUG_REPORT.yml", model, appVersion, androidVersion, logs)); + intent.setData(githubIssueUri); + startActivity(intent); + return true; + } + @SuppressLint("RestrictedApi") protected boolean applyMenuItemTheme(Menu menu) { if (mCustomThemeWrapper != null) { diff --git a/app/src/main/res/menu/crash_reports_fragment.xml b/app/src/main/res/menu/crash_reports_fragment.xml index 67bc62b5..ad1c92ec 100644 --- a/app/src/main/res/menu/crash_reports_fragment.xml +++ b/app/src/main/res/menu/crash_reports_fragment.xml @@ -7,4 +7,10 @@ android:title="@string/action_delete_logs" android:icon="@drawable/ic_delete_24dp" app:showAsAction="ifRoom" /> + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 46ba6923..8ec9ee31 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -90,6 +90,7 @@ Open in browser Add to Post Filter Delete Logs + Create GitHub Issue Share RPAN Link Share Post Link Go to Wiki