diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutController.kt index f2d2e1775..99c208022 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutController.kt @@ -1,7 +1,6 @@ package eu.kanade.tachiyomi.ui.more import android.app.Dialog -import android.os.Build import android.os.Bundle import androidx.core.os.bundleOf import androidx.preference.PreferenceScreen @@ -15,6 +14,7 @@ import eu.kanade.tachiyomi.data.updater.github.GithubUpdateChecker import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.ui.base.controller.openInBrowser import eu.kanade.tachiyomi.ui.setting.SettingsController +import eu.kanade.tachiyomi.util.CrashLogUtil import eu.kanade.tachiyomi.util.lang.launchNow import eu.kanade.tachiyomi.util.lang.toDateTimestampString import eu.kanade.tachiyomi.util.preference.onClick @@ -201,19 +201,10 @@ class AboutController : SettingsController() { } private fun copyDebugInfo() { - val deviceInfo = - """ - App version: ${BuildConfig.VERSION_NAME} (${BuildConfig.FLAVOR}, ${BuildConfig.COMMIT_SHA}, ${BuildConfig.VERSION_CODE}) - Android version: ${Build.VERSION.RELEASE} (SDK ${Build.VERSION.SDK_INT}) - Android build ID: ${Build.DISPLAY} - Device brand: ${Build.BRAND} - Device manufacturer: ${Build.MANUFACTURER} - Device name: ${Build.DEVICE} - Device model: ${Build.MODEL} - Device product name: ${Build.PRODUCT} - """.trimIndent() - - activity?.copyToClipboard("Debug information", deviceInfo) + activity?.let { + val deviceInfo = CrashLogUtil(it).getDebugInfo() + activity?.copyToClipboard("Debug information", deviceInfo) + } } private fun getFormattedBuildTime(): String { diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt b/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt index 46535b565..8b32ec43c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt @@ -2,15 +2,18 @@ package eu.kanade.tachiyomi.util import android.content.Context import android.net.Uri +import android.os.Build +import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications +import eu.kanade.tachiyomi.util.lang.launchIO +import eu.kanade.tachiyomi.util.lang.withUIContext import eu.kanade.tachiyomi.util.storage.getUriCompat import eu.kanade.tachiyomi.util.system.createFileInCacheDir import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notificationManager import eu.kanade.tachiyomi.util.system.toast -import java.io.IOException class CrashLogUtil(private val context: Context) { @@ -19,16 +22,32 @@ class CrashLogUtil(private val context: Context) { } fun dumpLogs() { - try { - val file = context.createFileInCacheDir("tachiyomi_crash_logs.txt") - Runtime.getRuntime().exec("logcat *:E -d -f ${file.absolutePath}") + launchIO { + try { + val file = context.createFileInCacheDir("tachiyomi_crash_logs.txt") + Runtime.getRuntime().exec("logcat *:E -d -f ${file.absolutePath}").waitFor() + file.appendText(getDebugInfo()) - showNotification(file.getUriCompat(context)) - } catch (e: IOException) { - context.toast("Failed to get logs") + showNotification(file.getUriCompat(context)) + } catch (e: Throwable) { + withUIContext { context.toast("Failed to get logs") } + } } } + fun getDebugInfo(): String { + return """ + App version: ${BuildConfig.VERSION_NAME} (${BuildConfig.FLAVOR}, ${BuildConfig.COMMIT_SHA}, ${BuildConfig.VERSION_CODE}) + Android version: ${Build.VERSION.RELEASE} (SDK ${Build.VERSION.SDK_INT}) + Android build ID: ${Build.DISPLAY} + Device brand: ${Build.BRAND} + Device manufacturer: ${Build.MANUFACTURER} + Device name: ${Build.DEVICE} + Device model: ${Build.MODEL} + Device product name: ${Build.PRODUCT} + """.trimIndent() + } + private fun showNotification(uri: Uri) { context.notificationManager.cancel(Notifications.ID_CRASH_LOGS)