diff --git a/app/build.gradle.kts b/app/build.gradle.kts index dac829f..56a6a49 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -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" diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/activities/CrashActivity.kt b/app/src/main/kotlin/cn/super12138/todo/ui/activities/CrashActivity.kt index 2e900c3..88a93d3 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/activities/CrashActivity.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/activities/CrashActivity.kt @@ -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() ) diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/crash/CrashPage.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/crash/CrashPage.kt index 0bca644..65b98de 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/crash/CrashPage.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/crash/CrashPage.kt @@ -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 )