108 lines
4.9 KiB
Kotlin
108 lines
4.9 KiB
Kotlin
package su.reya.coop
|
|
|
|
import android.content.ClipData
|
|
import android.content.ClipboardManager
|
|
import android.os.Bundle
|
|
import androidx.activity.ComponentActivity
|
|
import androidx.activity.compose.setContent
|
|
import androidx.compose.foundation.layout.Arrangement
|
|
import androidx.compose.foundation.layout.Box
|
|
import androidx.compose.foundation.layout.Column
|
|
import androidx.compose.foundation.layout.Row
|
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
import androidx.compose.foundation.layout.fillMaxWidth
|
|
import androidx.compose.foundation.layout.padding
|
|
import androidx.compose.foundation.rememberScrollState
|
|
import androidx.compose.foundation.verticalScroll
|
|
import androidx.compose.material3.Button
|
|
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
|
|
import androidx.compose.material3.FilledTonalButton
|
|
import androidx.compose.material3.MaterialExpressiveTheme
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.material3.Scaffold
|
|
import androidx.compose.material3.Surface
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.text.font.FontFamily
|
|
import androidx.compose.ui.unit.dp
|
|
import androidx.compose.ui.unit.sp
|
|
import kotlin.system.exitProcess
|
|
|
|
class CrashActivity : ComponentActivity() {
|
|
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
val errorText = intent.getStringExtra("error") ?: "Unknown error"
|
|
|
|
setContent {
|
|
MaterialExpressiveTheme {
|
|
Scaffold(
|
|
content = { innerPadding ->
|
|
Surface(
|
|
modifier = Modifier
|
|
.fillMaxSize()
|
|
.padding(innerPadding),
|
|
color = MaterialTheme.colorScheme.background
|
|
) {
|
|
Column(
|
|
modifier = Modifier
|
|
.fillMaxSize()
|
|
.padding(16.dp),
|
|
verticalArrangement = Arrangement.spacedBy(16.dp)
|
|
) {
|
|
Column {
|
|
Text(
|
|
"App Crashed",
|
|
style = MaterialTheme.typography.titleMediumEmphasized,
|
|
color = MaterialTheme.colorScheme.error
|
|
)
|
|
Text(
|
|
"Please copy the log below and send it to the developer.",
|
|
style = MaterialTheme.typography.bodySmall
|
|
)
|
|
}
|
|
Box(
|
|
modifier = Modifier
|
|
.weight(1f)
|
|
.fillMaxWidth()
|
|
.verticalScroll(rememberScrollState())
|
|
) {
|
|
Text(
|
|
text = errorText,
|
|
fontFamily = FontFamily.Monospace,
|
|
fontSize = 12.sp
|
|
)
|
|
}
|
|
Row(
|
|
modifier = Modifier.fillMaxWidth(),
|
|
horizontalArrangement = Arrangement.spacedBy(8.dp)
|
|
) {
|
|
FilledTonalButton(
|
|
onClick = {
|
|
finish();
|
|
exitProcess(0)
|
|
},
|
|
modifier = Modifier.weight(1f)
|
|
) {
|
|
Text("Exit")
|
|
}
|
|
Button(
|
|
onClick = {
|
|
val clipboard =
|
|
getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
|
|
val data = ClipData.newPlainText("Crash Log", errorText)
|
|
clipboard.setPrimaryClip(data)
|
|
},
|
|
modifier = Modifier.weight(1f)
|
|
) {
|
|
Text("Copy")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
)
|
|
}
|
|
}
|
|
}
|
|
} |