feat: 优化崩溃页面的显示效果
This commit is contained in:
parent
62e804973e
commit
5911b9e67f
3 changed files with 66 additions and 27 deletions
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue