293 lines
8.6 KiB
Kotlin
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 = {})
|
|
}
|
|
}
|