104 lines
3.6 KiB
Kotlin
104 lines
3.6 KiB
Kotlin
package id.ac.ubharajaya.sistemakademik
|
|
|
|
import android.os.Bundle
|
|
import androidx.activity.ComponentActivity
|
|
import androidx.activity.compose.setContent
|
|
import androidx.activity.enableEdgeToEdge
|
|
import androidx.compose.foundation.layout.*
|
|
import androidx.compose.material.icons.Icons
|
|
import androidx.compose.material.icons.filled.*
|
|
import androidx.compose.material3.*
|
|
import androidx.compose.runtime.*
|
|
import androidx.compose.ui.Modifier
|
|
import id.ac.ubharajaya.sistemakademik.ui.screens.AbsensiScreen
|
|
import id.ac.ubharajaya.sistemakademik.ui.screens.LoginScreen
|
|
import id.ac.ubharajaya.sistemakademik.ui.screens.ProfilScreen
|
|
import id.ac.ubharajaya.sistemakademik.ui.screens.RiwayatScreen
|
|
import id.ac.ubharajaya.sistemakademik.ui.theme.SistemAkademikTheme
|
|
import id.ac.ubharajaya.sistemakademik.utils.SessionManager
|
|
|
|
class MainActivity : ComponentActivity() {
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
enableEdgeToEdge()
|
|
|
|
val sessionManager = SessionManager(this)
|
|
|
|
setContent {
|
|
SistemAkademikTheme {
|
|
var isLoggedIn by remember { mutableStateOf(sessionManager.isLoggedIn()) }
|
|
|
|
Surface(modifier = Modifier.fillMaxSize()) {
|
|
if (isLoggedIn) {
|
|
MainNavigation(
|
|
activity = this,
|
|
sessionManager = sessionManager,
|
|
onLogout = {
|
|
sessionManager.logout()
|
|
isLoggedIn = false
|
|
}
|
|
)
|
|
} else {
|
|
LoginScreen(
|
|
onLoginSuccess = {
|
|
isLoggedIn = true
|
|
},
|
|
sessionManager = sessionManager
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Composable
|
|
fun MainNavigation(
|
|
activity: ComponentActivity,
|
|
sessionManager: SessionManager,
|
|
onLogout: () -> Unit
|
|
) {
|
|
var selectedTab by remember { mutableStateOf(0) }
|
|
|
|
Scaffold(
|
|
bottomBar = {
|
|
NavigationBar {
|
|
NavigationBarItem(
|
|
selected = selectedTab == 0,
|
|
onClick = { selectedTab = 0 },
|
|
icon = { Icon(Icons.Default.CheckCircle, "Absensi") },
|
|
label = { Text("Absensi") }
|
|
)
|
|
NavigationBarItem(
|
|
selected = selectedTab == 1,
|
|
onClick = { selectedTab = 1 },
|
|
icon = { Icon(Icons.Default.List, "Riwayat") },
|
|
label = { Text("Riwayat") }
|
|
)
|
|
NavigationBarItem(
|
|
selected = selectedTab == 2,
|
|
onClick = { selectedTab = 2 },
|
|
icon = { Icon(Icons.Default.Person, "Profil") },
|
|
label = { Text("Profil") }
|
|
)
|
|
}
|
|
}
|
|
) { padding ->
|
|
when (selectedTab) {
|
|
0 -> AbsensiScreen(
|
|
modifier = Modifier.padding(padding),
|
|
activity = activity,
|
|
sessionManager = sessionManager
|
|
)
|
|
1 -> RiwayatScreen(
|
|
modifier = Modifier.padding(padding),
|
|
sessionManager = sessionManager
|
|
)
|
|
2 -> ProfilScreen(
|
|
modifier = Modifier.padding(padding),
|
|
sessionManager = sessionManager,
|
|
onLogout = onLogout
|
|
)
|
|
}
|
|
}
|
|
} |