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") } } } } } ) } } } }