feat: 优化崩溃页面的显示效果

This commit is contained in:
Super12138 2025-04-20 20:31:35 +08:00
parent 62e804973e
commit 5911b9e67f
3 changed files with 66 additions and 27 deletions

View file

@ -34,7 +34,7 @@ android {
applicationId = "cn.super12138.todo" applicationId = "cn.super12138.todo"
minSdk = 24 minSdk = 24
targetSdk = 36 targetSdk = 36
versionCode = 633 versionCode = 634
versionName = "2.1.2" versionName = "2.1.2"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

View file

@ -1,6 +1,5 @@
package cn.super12138.todo.ui.activities package cn.super12138.todo.ui.activities
import android.os.Build
import android.os.Bundle import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
@ -20,9 +19,6 @@ import cn.super12138.todo.logic.model.DarkMode.Light
import cn.super12138.todo.ui.pages.crash.CrashPage import cn.super12138.todo.ui.pages.crash.CrashPage
import cn.super12138.todo.ui.theme.PaletteStyle import cn.super12138.todo.ui.theme.PaletteStyle
import cn.super12138.todo.ui.theme.ToDoTheme import cn.super12138.todo.ui.theme.ToDoTheme
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
class CrashActivity : ComponentActivity() { class CrashActivity : ComponentActivity() {
companion object { companion object {
@ -39,26 +35,6 @@ class CrashActivity : ComponentActivity() {
val crashLogs = intent.getStringExtra("crash_logs") val crashLogs = intent.getStringExtra("crash_logs")
val deviceBrand = Build.BRAND
val deviceModel = Build.MODEL
val sdkLevel = Build.VERSION.SDK_INT
val currentDateTime = Calendar.getInstance().time
val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
val formattedDateTime = formatter.format(currentDateTime)
val deviceInfo = StringBuilder().apply {
append(BRAND_PREFIX).append("").append(deviceBrand).append('\n')
append(MODEL_PREFIX).append(deviceModel).append('\n')
append(DEVICE_SDK_PREFIX).append(sdkLevel).append('\n').append('\n')
append(CRASH_TIME_PREFIX).append(formattedDateTime).append('\n').append('\n')
append(BEGINNING_CRASH).append('\n')
}
val crashLogFormatted = StringBuilder().apply {
append(deviceInfo)
append(crashLogs)
}.toString()
setContent { setContent {
val darkMode = DarkMode.fromId(GlobalValues.darkMode) val darkMode = DarkMode.fromId(GlobalValues.darkMode)
val darkTheme = when (darkMode) { val darkTheme = when (darkMode) {
@ -82,7 +58,7 @@ class CrashActivity : ComponentActivity() {
dynamicColor = GlobalValues.dynamicColor dynamicColor = GlobalValues.dynamicColor
) { ) {
CrashPage( CrashPage(
crashLog = if (crashLogs == null) stringResource(R.string.tip_no_crash_logs) else crashLogFormatted, crashLog = crashLogs ?: stringResource(R.string.tip_no_crash_logs),
exitApp = { finishAffinity() }, exitApp = { finishAffinity() },
modifier = Modifier.fillMaxSize() modifier = Modifier.fillMaxSize()
) )

View file

@ -1,5 +1,6 @@
package cn.super12138.todo.ui.pages.crash package cn.super12138.todo.ui.pages.crash
import android.os.Build
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsets
@ -24,13 +25,26 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import cn.super12138.todo.R import cn.super12138.todo.R
import cn.super12138.todo.ui.TodoDefaults import cn.super12138.todo.ui.TodoDefaults
import cn.super12138.todo.ui.activities.CrashActivity.Companion.BEGINNING_CRASH
import cn.super12138.todo.ui.activities.CrashActivity.Companion.BRAND_PREFIX
import cn.super12138.todo.ui.activities.CrashActivity.Companion.CRASH_TIME_PREFIX
import cn.super12138.todo.ui.activities.CrashActivity.Companion.DEVICE_SDK_PREFIX
import cn.super12138.todo.ui.activities.CrashActivity.Companion.MODEL_PREFIX
import cn.super12138.todo.ui.components.AnimatedExtendedFloatingActionButton import cn.super12138.todo.ui.components.AnimatedExtendedFloatingActionButton
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -73,6 +87,24 @@ fun CrashPage(
}, },
contentWindowInsets = WindowInsets.safeContent contentWindowInsets = WindowInsets.safeContent
) { innerPadding -> ) { innerPadding ->
val context = LocalContext.current
val packageName = context.packageName
val deviceBrand = Build.BRAND
val deviceModel = Build.MODEL
val sdkLevel = Build.VERSION.SDK_INT
val currentDateTime = Calendar.getInstance().time
val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
val formattedDateTime = formatter.format(currentDateTime)
val deviceInfo = StringBuilder().apply {
append(BRAND_PREFIX).append(deviceBrand).append("\n")
append(MODEL_PREFIX).append(deviceModel).append("\n")
append(DEVICE_SDK_PREFIX).append(sdkLevel).append("\n").append("\n")
append(CRASH_TIME_PREFIX).append(formattedDateTime).append("\n").append("\n")
append(BEGINNING_CRASH).append("\n")
}
Column( Column(
modifier = Modifier modifier = Modifier
.padding(innerPadding) .padding(innerPadding)
@ -83,7 +115,38 @@ fun CrashPage(
Spacer(Modifier.height(5.dp)) Spacer(Modifier.height(5.dp))
SelectionContainer { SelectionContainer {
Text( Text(
text = crashLog, text = buildAnnotatedString {
/*append(crashLog)
val index = crashLog.indexOf(packageName)
if (index != -1) {
addStyle(
style = SpanStyle(
fontWeight = FontWeight.Bold,
background = MaterialTheme.colorScheme.primary
),
start = index,
end = index + packageName.length
)
}*/
append(deviceInfo)
val splitLines = crashLog.lines()
splitLines.forEach {
if (it.contains(packageName)) {
withStyle(
SpanStyle(
color = MaterialTheme.colorScheme.onPrimaryContainer,
background = MaterialTheme.colorScheme.primaryContainer,
fontWeight = FontWeight.Bold,
)
) {
append(it)
}
} else {
append(it)
}
append("\n")
}
},
fontFamily = FontFamily.Monospace, fontFamily = FontFamily.Monospace,
style = MaterialTheme.typography.bodyMedium style = MaterialTheme.typography.bodyMedium
) )