Added share error stack function in AppErrorsDetailActivity

This commit is contained in:
2022-06-01 05:57:26 +08:00
parent 973b3aa98f
commit 108fd9e4ea
12 changed files with 59 additions and 4 deletions

View File

@@ -107,10 +107,29 @@ data class AppErrorsInfoBean(
val dateTime get() = SimpleDateFormat.getDateTimeInstance().format(Date(timestamp)) ?: "DateTime not found"
/**
* 获取异常堆栈模板
* 获取异常堆栈分享模板
* @return [String]
*/
val stackOutputContent
val stackOutputShareContent
get() = "Generated by AppErrorsTracking\n" +
"Project Url: https://github.com/KitsunePie/AppErrorsTracking\n" +
"===============\n" +
"[Device Brand]: ${Build.BRAND}\n" +
"[Device Model]: ${Build.MODEL}\n" +
"[Display]: ${Build.DISPLAY}\n" +
"[Android Version]: ${Build.VERSION.RELEASE}\n" +
"[API Version]: ${Build.VERSION.SDK_INT}\n" +
"[Package Name]: $packageName\n" +
"[Error Type]: ${if (isNativeCrash) "Native" else "Jvm"}\n" +
"[Crash Time]: $dateTime\n" +
"[Stack Trace]:\n" +
stackTrace
/**
* 获取异常堆栈文件模板
* @return [String]
*/
val stackOutputFileContent
get() = "================================================================\n" +
" Generated by AppErrorsTracking\n" +
" Project Url: https://github.com/KitsunePie/AppErrorsTracking\n" +

View File

@@ -334,4 +334,10 @@ object LocaleString {
/** @string Automatic generated */
fun crashProcess(vararg objArrs: Any) = R.string.crash_process.bind(*objArrs)
/** @string Automatic generated */
val shareErrorStack get() = shareErrorStack()
/** @string Automatic generated */
fun shareErrorStack(vararg objArrs: Any) = R.string.share_error_stack.bind(*objArrs)
}

View File

@@ -68,7 +68,7 @@ class AppErrorsDetailActivity : BaseActivity<ActivityAppErrorsDetailBinding>() {
}
binding.copyIcon.setOnClickListener { copyToClipboard(appErrorsInfo.stackTrace) }
binding.exportIcon.setOnClickListener {
stackTrace = appErrorsInfo.stackOutputContent
stackTrace = appErrorsInfo.stackOutputFileContent
runCatching {
startActivityForResult(Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
@@ -77,6 +77,12 @@ class AppErrorsDetailActivity : BaseActivity<ActivityAppErrorsDetailBinding>() {
}, WRITE_REQUEST_CODE)
}.onFailure { toast(msg = "Start Android SAF failed") }
}
binding.shareIcon.setOnClickListener {
startActivity(Intent.createChooser(Intent(Intent.ACTION_SEND).apply {
type = "text/plain"
putExtra(Intent.EXTRA_TEXT, appErrorsInfo.stackOutputShareContent)
}, LocaleString.shareErrorStack))
}
binding.appIcon.setImageDrawable(appIcon(appErrorsInfo.packageName))
binding.appNameText.text = appName(appErrorsInfo.packageName)
binding.appVersionText.text = appVersion(appErrorsInfo.packageName)

View File

@@ -136,7 +136,7 @@ class AppErrorsRecordActivity : BaseActivity<ActivityAppErrorsRecordBinding>() {
("${cacheDir.absolutePath}/temp").also { path ->
File(path).mkdirs()
listData.takeIf { it.isNotEmpty() }?.forEach {
File("$path/${it.packageName}_${it.timestamp}.log").writeText(it.stackOutputContent)
File("$path/${it.packageName}_${it.timestamp}.log").writeText(it.stackOutputFileContent)
}
outPutFilePath = "${cacheDir.absolutePath}/temp_${System.currentTimeMillis()}.zip"
ZipFileTool.zipMultiFile(path, outPutFilePath)

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="150dp"
android:height="150dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:pathData="M579.2,736.9l-218,-118.9a149.3,149.3 0,1 1,0 -212l218,-118.9a149.3,149.3 0,1 1,40.9 74.9l-218,118.9a149.9,149.9 0,0 1,0 62.2l218,118.9a149.3,149.3 0,1 1,-40.9 74.9z"
android:fillColor="#ffffff"/>
</vector>

View File

@@ -68,6 +68,15 @@
android:src="@drawable/ic_export"
android:tint="@color/colorTextGray"
android:tooltipText="@string/export_to_file" />
<androidx.constraintlayout.utils.widget.ImageFilterView
android:id="@+id/share_icon"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_marginEnd="10dp"
android:src="@drawable/ic_share"
android:tint="@color/colorTextGray"
android:tooltipText="@string/share_error_stack" />
</LinearLayout>
<androidx.core.widget.NestedScrollView

View File

@@ -71,4 +71,5 @@
<string name="month_ago">月前</string>
<string name="year_ago">年前</string>
<string name="crash_process">エラープロセス「%1$s」</string>
<string name="share_error_stack">エラースタックをシェアする</string>
</resources>

View File

@@ -71,4 +71,5 @@
<string name="month_ago">月前</string>
<string name="year_ago">年前</string>
<string name="crash_process">异常进程 \"%1$s\"</string>
<string name="share_error_stack">分享异常堆栈</string>
</resources>

View File

@@ -71,4 +71,5 @@
<string name="month_ago">月前</string>
<string name="year_ago">年前</string>
<string name="crash_process">異常進程 \"%1$s\"</string>
<string name="share_error_stack">分享異常堆棧</string>
</resources>

View File

@@ -71,4 +71,5 @@
<string name="month_ago">月前</string>
<string name="year_ago">年前</string>
<string name="crash_process">異常進程 \"%1$s\"</string>
<string name="share_error_stack">分享異常堆棧</string>
</resources>

View File

@@ -71,4 +71,5 @@
<string name="month_ago">月前</string>
<string name="year_ago">年前</string>
<string name="crash_process">異常進程 \"%1$s\"</string>
<string name="share_error_stack">分享異常堆棧</string>
</resources>

View File

@@ -71,4 +71,5 @@
<string name="month_ago">month ago</string>
<string name="year_ago">year ago</string>
<string name="crash_process">Crash Process \"%1$s\"</string>
<string name="share_error_stack">Share error stack</string>
</resources>