From b0efc992a616c8728c777201fe25267bbd163dea Mon Sep 17 00:00:00 2001 From: Shecks Date: Wed, 12 Nov 2025 21:00:22 +0000 Subject: [PATCH] Improve bug report screen (#8025) --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 7 - .../CrashReportExceptionHandler.java | 20 ++ .../danoeh/antennapod/CrashReportWriter.java | 67 ---- .../java/de/danoeh/antennapod/PodcastApp.java | 2 +- .../danoeh/antennapod/PreferenceUpgrader.java | 1 + .../antennapod/RxJavaErrorHandlerSetup.java | 2 + .../antennapod/activity/SplashActivity.java | 3 +- .../screen/preferences/BugReportActivity.java | 126 ------- .../preferences/MainPreferencesFragment.java | 6 +- app/src/main/res/layout/bug_report.xml | 30 -- settings.gradle | 1 + system/build.gradle | 14 + .../antennapod/system/CrashReportWriter.java | 63 ++++ .../antennapod/system/utils/PackageUtils.java | 34 ++ .../ui/common/AnimatedFragment.java | 20 ++ .../antennapod/ui/common/ClipboardUtils.java | 64 ++++ ui/i18n/src/main/res/values/strings.xml | 18 +- ui/preferences/build.gradle | 1 + .../screen/about/AboutFragment.java | 2 +- .../screen/bugreport/BugReportFragment.java | 199 +++++++++++ .../screen/bugreport/BugReportViewModel.java | 204 +++++++++++ .../main/res/layout/bug_report_fragment.xml | 319 ++++++++++++++++++ .../src/main/res/xml/preferences.xml | 2 +- 24 files changed, 968 insertions(+), 238 deletions(-) create mode 100644 app/src/main/java/de/danoeh/antennapod/CrashReportExceptionHandler.java delete mode 100644 app/src/main/java/de/danoeh/antennapod/CrashReportWriter.java delete mode 100644 app/src/main/java/de/danoeh/antennapod/ui/screen/preferences/BugReportActivity.java delete mode 100644 app/src/main/res/layout/bug_report.xml create mode 100644 system/build.gradle create mode 100644 system/src/main/java/de/danoeh/antennapod/system/CrashReportWriter.java create mode 100644 system/src/main/java/de/danoeh/antennapod/system/utils/PackageUtils.java create mode 100644 ui/common/src/main/java/de/danoeh/antennapod/ui/common/AnimatedFragment.java create mode 100644 ui/common/src/main/java/de/danoeh/antennapod/ui/common/ClipboardUtils.java create mode 100644 ui/preferences/src/main/java/de/danoeh/antennapod/ui/preferences/screen/bugreport/BugReportFragment.java create mode 100644 ui/preferences/src/main/java/de/danoeh/antennapod/ui/preferences/screen/bugreport/BugReportViewModel.java create mode 100644 ui/preferences/src/main/res/layout/bug_report_fragment.xml diff --git a/app/build.gradle b/app/build.gradle index d772e8b96..ad1a24377 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -76,6 +76,7 @@ dependencies { implementation project(':storage:database-maintenance-service') implementation project(':storage:importexport') implementation project(':storage:preferences') + implementation project(':system') implementation project(':ui:app-start-intent') implementation project(':ui:common') implementation project(':ui:discovery') diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8f4c40a06..2554f2a78 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -164,13 +164,6 @@ - - - IntentUtils.openInBrowser( - BugReportActivity.this, "https://github.com/AntennaPod/AntennaPod/issues")); - - findViewById(R.id.btn_copy_log).setOnClickListener(v -> { - ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText(getString(R.string.bug_report_title), crashDetailsTextView.getText()); - clipboard.setPrimaryClip(clip); - if (Build.VERSION.SDK_INT < 32) { - Snackbar.make(findViewById(android.R.id.content), R.string.copied_to_clipboard, - Snackbar.LENGTH_SHORT).show(); - } - }); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.bug_report_options, menu); - return super.onCreateOptionsMenu(menu); - } - - @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { - if (item.getItemId() == R.id.export_logcat) { - MaterialAlertDialogBuilder alertBuilder = new MaterialAlertDialogBuilder(this); - alertBuilder.setMessage(R.string.confirm_export_log_dialog_message); - alertBuilder.setPositiveButton(R.string.confirm_label, (dialog, which) -> { - exportLog(); - dialog.dismiss(); - }); - alertBuilder.setNegativeButton(R.string.cancel_label, null); - alertBuilder.show(); - return true; - } - return super.onOptionsItemSelected(item); - } - - private void exportLog() { - try { - File filename = new File(UserPreferences.getDataFolder(null), "full-logs.txt"); - String cmd = "logcat -d -f " + filename.getAbsolutePath(); - Runtime.getRuntime().exec(cmd); - //share file - try { - String authority = getString(R.string.provider_authority); - Uri fileUri = FileProvider.getUriForFile(this, authority, filename); - - new ShareCompat.IntentBuilder(this) - .setType("text/*") - .addStream(fileUri) - .setChooserTitle(R.string.share_file_label) - .startChooser(); - } catch (Exception e) { - e.printStackTrace(); - int strResId = R.string.log_file_share_exception; - Snackbar.make(findViewById(android.R.id.content), strResId, Snackbar.LENGTH_LONG) - .show(); - } - } catch (IOException e) { - e.printStackTrace(); - Snackbar.make(findViewById(android.R.id.content), e.getMessage(), Snackbar.LENGTH_LONG).show(); - } - } - - -} diff --git a/app/src/main/java/de/danoeh/antennapod/ui/screen/preferences/MainPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/ui/screen/preferences/MainPreferencesFragment.java index e9b177f0f..ee7bfab9e 100644 --- a/app/src/main/java/de/danoeh/antennapod/ui/screen/preferences/MainPreferencesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/ui/screen/preferences/MainPreferencesFragment.java @@ -1,6 +1,5 @@ package de.danoeh.antennapod.ui.screen.preferences; -import android.content.Intent; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.os.Bundle; @@ -15,6 +14,7 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.ui.common.IntentUtils; import de.danoeh.antennapod.ui.preferences.screen.AnimatedPreferenceFragment; import de.danoeh.antennapod.ui.preferences.screen.about.AboutFragment; +import de.danoeh.antennapod.ui.preferences.screen.bugreport.BugReportFragment; public class MainPreferencesFragment extends AnimatedPreferenceFragment { @@ -118,7 +118,9 @@ public class MainPreferencesFragment extends AnimatedPreferenceFragment { return true; }); findPreference(PREF_SEND_BUG_REPORT).setOnPreferenceClickListener(preference -> { - startActivity(new Intent(getActivity(), BugReportActivity.class)); + getParentFragmentManager().beginTransaction() + .replace(R.id.settingsContainer, new BugReportFragment()) + .addToBackStack(getString(R.string.report_bug_title)).commit(); return true; }); } diff --git a/app/src/main/res/layout/bug_report.xml b/app/src/main/res/layout/bug_report.xml deleted file mode 100644 index 447ce911f..000000000 --- a/app/src/main/res/layout/bug_report.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - -