package com.gacy.android import android.Manifest import android.content.ClipData import android.content.ClipboardManager import android.content.Context import android.content.pm.PackageManager import android.os.Build import android.os.Bundle import android.widget.Toast import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.background import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.foundation.verticalScroll import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat import com.gacy.android.ui.screens.MainScreen import com.gacy.android.ui.theme.GaCyTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) CrashTracker.breadcrumb(this, "MainActivity: onCreate") // ซ่อน Status Bar val windowInsetsController = WindowCompat.getInsetsController(window, window.decorView) windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE windowInsetsController.hide(WindowInsetsCompat.Type.statusBars()) // ใช้ .systemBars() ถ้าต้องการซ่อน Navigation Bar ด้านล่างด้วย enableEdgeToEdge() requestAppPermissions() setContent { GaCyTheme { var crashReport by remember { mutableStateOf(CrashTracker.getLastCrash(this@MainActivity)) } MainScreen() if (crashReport != null) { AlertDialog( onDismissRequest = { CrashTracker.clearLastCrash(this@MainActivity) crashReport = null }, title = { Text( "⚠️ GaCy Crash Report", fontWeight = FontWeight.Bold, color = MaterialTheme.colorScheme.error ) }, text = { Column { Text( "A fatal error occurred in the previous session:", fontSize = 13.sp, color = Color.LightGray ) Spacer(modifier = Modifier.height(8.dp)) SelectionContainer { Text( text = crashReport ?: "", fontSize = 11.sp, fontFamily = FontFamily.Monospace, modifier = Modifier .fillMaxWidth() .heightIn(max = 300.dp) .verticalScroll(rememberScrollState()) .background(Color(0xFF1E1E1E), RoundedCornerShape(8.dp)) .padding(8.dp), color = Color(0xFFFF8A80) ) } } }, confirmButton = { Button( onClick = { val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager val clip = ClipData.newPlainText("GaCy Crash", crashReport) clipboard?.setPrimaryClip(clip) Toast.makeText(this@MainActivity, "Crash report copied!", Toast.LENGTH_SHORT).show() } ) { Text("Copy Log") } }, dismissButton = { TextButton( onClick = { CrashTracker.clearLastCrash(this@MainActivity) crashReport = null } ) { Text("Dismiss") } } ) } } } } private fun requestAppPermissions() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { if (ContextCompat.checkSelfPermission( this, Manifest.permission.POST_NOTIFICATIONS ) != PackageManager.PERMISSION_GRANTED ) { ActivityCompat.requestPermissions( this, arrayOf(Manifest.permission.POST_NOTIFICATIONS), 101 ) } } } }