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"
minSdk = 24
targetSdk = 36
versionCode = 633
versionCode = 634
versionName = "2.1.2"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

View file

@ -1,6 +1,5 @@
package cn.super12138.todo.ui.activities
import android.os.Build
import android.os.Bundle
import androidx.activity.ComponentActivity
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.theme.PaletteStyle
import cn.super12138.todo.ui.theme.ToDoTheme
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
class CrashActivity : ComponentActivity() {
companion object {
@ -39,26 +35,6 @@ class CrashActivity : ComponentActivity() {
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 {
val darkMode = DarkMode.fromId(GlobalValues.darkMode)
val darkTheme = when (darkMode) {
@ -82,7 +58,7 @@ class CrashActivity : ComponentActivity() {
dynamicColor = GlobalValues.dynamicColor
) {
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() },
modifier = Modifier.fillMaxSize()
)

View file

@ -1,5 +1,6 @@
package cn.super12138.todo.ui.pages.crash
import android.os.Build
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.WindowInsets
@ -24,13 +25,26 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
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.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.dp
import cn.super12138.todo.R
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 java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@ -73,6 +87,24 @@ fun CrashPage(
},
contentWindowInsets = WindowInsets.safeContent
) { 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(
modifier = Modifier
.padding(innerPadding)
@ -83,7 +115,38 @@ fun CrashPage(
Spacer(Modifier.height(5.dp))
SelectionContainer {
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,
style = MaterialTheme.typography.bodyMedium
)