293 lines
8.6 KiB
Kotlin

package com.example.siamobile
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.siamobile.ui.theme.SIAMobileTheme
import android.content.Intent
import androidx.compose.ui.platform.LocalContext
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
SIAMobileTheme {
AppNavigator()
}
}
}
}
@Composable
fun AppNavigator() {
var currentScreen by remember { mutableStateOf("MainMenu") }
when (currentScreen) {
"MainMenu" -> MainMenuScreen(
onMenuClick = { selectedMenu ->
when (selectedMenu) {
"About" -> currentScreen = "AboutScreen"
"Pengaturan" -> currentScreen = "SettingsScreen"
"Bantuan" -> currentScreen = "HelpScreen"
}
}
)
"AboutScreen" -> AboutScreen(onBackClick = { currentScreen = "MainMenu" })
"SettingsScreen" -> SettingsScreen(onBackClick = { currentScreen = "MainMenu" })
"HelpScreen" -> HelpScreen(onBackClick = { currentScreen = "MainMenu" })
}
}
@Composable
fun MainMenuScreen(onMenuClick: (String) -> Unit, modifier: Modifier = Modifier) {
val context = LocalContext.current
Column(
modifier = modifier
.fillMaxSize()
.padding(16.dp),
verticalArrangement = Arrangement.SpaceBetween
) {
Column(verticalArrangement = Arrangement.spacedBy(12.dp)) {
Text(
text = "Selamat Datang di Aplikasi Akademik",
style = MaterialTheme.typography.headlineMedium,
fontWeight = FontWeight.Bold
)
Text(
text = "Pilih menu di bawah untuk melanjutkan:",
style = MaterialTheme.typography.bodyMedium
)
Spacer(modifier = Modifier.height(8.dp))
val menuItems = listOf(
"Kartu Hasil Studi",
"Jadwal Kuliah",
"Pengaturan",
"Bantuan",
"About"
)
menuItems.forEach { menu ->
MenuCard(menuTitle = menu) {
when (menu) {
"Kartu Hasil Studi" -> {
// Membuka KHSActivity
context.startActivity(Intent(context, KHSActivity::class.java))
}
else -> {
// Menu lainnya menggunakan handler onMenuClick
onMenuClick(menu)
}
}
}
}
}
Footer(version = "1.0.0", copyright = "© 2025")
}
}
@Composable
fun MenuCard(menuTitle: String, onClick: () -> Unit) {
Card(
shape = RoundedCornerShape(12.dp),
modifier = Modifier
.fillMaxWidth()
.clickable { onClick() },
elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
) {
Box(
modifier = Modifier
.padding(16.dp)
.fillMaxWidth(),
contentAlignment = Alignment.CenterStart
) {
Text(
text = menuTitle,
style = MaterialTheme.typography.bodyLarge,
fontWeight = FontWeight.Medium
)
}
}
}
@Composable
fun AboutScreen(onBackClick: () -> Unit) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
verticalArrangement = Arrangement.SpaceBetween
) {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = "Tentang Aplikasi",
style = MaterialTheme.typography.headlineMedium,
fontWeight = FontWeight.Bold
)
Spacer(modifier = Modifier.height(8.dp))
Text(
text = "Aplikasi Akademik ini dibuat untuk membantu mahasiswa mengakses informasi akademik seperti jadwal, presensi, dan berita kampus. Dikembangkan oleh Fasilkom Ubharajaya.",
style = MaterialTheme.typography.bodyMedium,
textAlign = TextAlign.Center
)
Spacer(modifier = Modifier.height(16.dp))
Text(
text = "Versi 1.0.0",
style = MaterialTheme.typography.bodySmall,
fontWeight = FontWeight.Light,
textAlign = TextAlign.Center
)
Spacer(modifier = Modifier.height(8.dp))
Text(
text = "© 2025 Fasilkom Ubharajaya",
style = MaterialTheme.typography.bodySmall,
fontWeight = FontWeight.Light,
textAlign = TextAlign.Center
)
}
Button(
onClick = onBackClick,
modifier = Modifier.align(Alignment.CenterHorizontally)
) {
Text(text = "Kembali ke Menu Utama")
}
}
}
@Composable
fun SettingsScreen(onBackClick: () -> Unit) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
verticalArrangement = Arrangement.SpaceBetween
) {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = "Pengaturan",
style = MaterialTheme.typography.headlineMedium,
fontWeight = FontWeight.Bold
)
Spacer(modifier = Modifier.height(8.dp))
Text(
text = "Atur preferensi aplikasi Anda di sini.",
style = MaterialTheme.typography.bodyMedium,
textAlign = TextAlign.Center
)
}
Button(
onClick = onBackClick,
modifier = Modifier.align(Alignment.CenterHorizontally)
) {
Text(text = "Kembali ke Menu Utama")
}
}
}
@Composable
fun HelpScreen(onBackClick: () -> Unit) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
verticalArrangement = Arrangement.SpaceBetween
) {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = "Bantuan",
style = MaterialTheme.typography.headlineMedium,
fontWeight = FontWeight.Bold
)
Spacer(modifier = Modifier.height(8.dp))
Text(
text = "Jika Anda membutuhkan bantuan, silakan hubungi tim IT kampus Anda atau lihat panduan pengguna.",
style = MaterialTheme.typography.bodyMedium,
textAlign = TextAlign.Center
)
}
Button(
onClick = onBackClick,
modifier = Modifier.align(Alignment.CenterHorizontally)
) {
Text(text = "Kembali ke Menu Utama")
}
}
}
@Composable
fun Footer(version: String, copyright: String) {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = "Versi $version",
style = MaterialTheme.typography.bodySmall,
textAlign = TextAlign.Center
)
Text(
text = copyright,
style = MaterialTheme.typography.bodySmall,
textAlign = TextAlign.Center
)
}
}
@Preview(showBackground = true)
@Composable
fun MainMenuScreenPreview() {
SIAMobileTheme {
MainMenuScreen(onMenuClick = {})
}
}
@Preview(showBackground = true)
@Composable
fun AboutScreenPreview() {
SIAMobileTheme {
AboutScreen(onBackClick = {})
}
}
@Preview(showBackground = true)
@Composable
fun SettingsScreenPreview() {
SIAMobileTheme {
SettingsScreen(onBackClick = {})
}
}
@Preview(showBackground = true)
@Composable
fun HelpScreenPreview() {
SIAMobileTheme {
HelpScreen(onBackClick = {})
}
}