diff --git a/UAS.zip b/UAS.zip
new file mode 100644
index 0000000..68cc6a6
Binary files /dev/null and b/UAS.zip differ
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 8009364..c632581 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -40,7 +40,7 @@ android {
}
dependencies {
-
+ // Core dependencies
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.activity.compose)
@@ -53,11 +53,15 @@ dependencies {
implementation(libs.material)
implementation(libs.androidx.activity)
implementation(libs.androidx.constraintlayout)
+
+ // Test dependencies
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.ui.test.junit4)
+
+ // Debug dependencies
debugImplementation(libs.androidx.ui.tooling)
debugImplementation(libs.androidx.ui.test.manifest)
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/example/siamobile/Mhs202210715136.kt b/app/src/main/java/com/example/siamobile/Mhs202210715136.kt
new file mode 100644
index 0000000..d8094ce
--- /dev/null
+++ b/app/src/main/java/com/example/siamobile/Mhs202210715136.kt
@@ -0,0 +1,189 @@
+package com.example.siamobile
+
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.animation.animateContentSize
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.example.siamobile.ui.theme.SIAMobileTheme
+
+class Mhs202210715136 : ComponentActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ val mahasiswaName = intent.getStringExtra("mahasiswaName") ?: "NPM: 202210715136 Nama: Muhamad Rajwa Athoriq"
+ setContent {
+ SIAMobileTheme {
+ DetailMahasiswaScreen(mahasiswaName)
+ }
+ }
+ }
+}
+
+@Composable
+fun DetailMahasiswaScreenOld(mahasiswaName: String) {
+ val context = LocalContext.current
+ val matakuliahList = listOf(
+ Triple(1, "Aljabar Linear", 1),
+ Triple(2, "Character Building", 1),
+ Triple(3, "Dasar Pemrograman", 1),
+ Triple(4, "Fisika", 1),
+ Triple(5, "Kalkulus 1", 1),
+ Triple(6, "Kewarganegaraan", 1),
+ Triple(7, "Pengantar Teknologi Informasi", 1),
+ Triple(8, "Struktur Data dan Algoritma", 1),
+ Triple(9, "Bahasa Indonesia", 2),
+ Triple(10, "Desain dan Analisis Algoritma", 2),
+ Triple(11, "Kalkulus II", 2),
+ Triple(12, "Logika Matematika", 2),
+ Triple(13, "Matematika Diskrit", 2),
+ Triple(14, "Pendidikan Agama", 2),
+ Triple(15, "Sistem Basis Data", 2),
+ Triple(16, "Analisa Numerik", 3)
+ )
+
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(16.dp),
+ verticalArrangement = Arrangement.SpaceBetween
+ ) {
+ Column {
+ Text(
+ text = "KHS Mahasiswa",
+ style = MaterialTheme.typography.headlineMedium,
+ fontWeight = FontWeight.Bold
+ )
+ Spacer(modifier = Modifier.height(8.dp))
+ Text(
+ text = mahasiswaName,
+ style = MaterialTheme.typography.bodyLarge,
+ fontWeight = FontWeight.Medium
+ )
+ Spacer(modifier = Modifier.height(16.dp))
+
+ // Table Header
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .background(MaterialTheme.colorScheme.primaryContainer, RoundedCornerShape(8.dp))
+ .padding(vertical = 8.dp, horizontal = 16.dp),
+ horizontalArrangement = Arrangement.SpaceBetween
+ ) {
+ Text(
+ text = "No",
+ style = MaterialTheme.typography.bodyMedium.copy(
+ fontWeight = FontWeight.Bold,
+ color = MaterialTheme.colorScheme.onPrimaryContainer
+ ),
+ modifier = Modifier.weight(0.2f)
+ )
+ Text(
+ text = "Mata Kuliah",
+ style = MaterialTheme.typography.bodyMedium.copy(
+ fontWeight = FontWeight.Bold,
+ color = MaterialTheme.colorScheme.onPrimaryContainer
+ ),
+ modifier = Modifier.weight(0.6f)
+ )
+ Text(
+ text = "Sem.",
+ style = MaterialTheme.typography.bodyMedium.copy(
+ fontWeight = FontWeight.Bold,
+ color = MaterialTheme.colorScheme.onPrimaryContainer
+ ),
+ modifier = Modifier.weight(0.2f)
+ )
+ }
+ Spacer(modifier = Modifier.height(8.dp))
+
+ // Table Rows
+ LazyColumn(
+ modifier = Modifier.fillMaxWidth()
+ ) {
+ items(matakuliahList) { (no, course, semester) ->
+ var isSelected by remember { mutableStateOf(false) }
+
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(vertical = 4.dp)
+ .clickable {
+ isSelected = !isSelected
+ }
+ .background(
+ if (isSelected) MaterialTheme.colorScheme.secondaryContainer
+ else Color.Transparent,
+ RoundedCornerShape(8.dp)
+ )
+ .padding(vertical = 12.dp, horizontal = 16.dp)
+ .animateContentSize(),
+ horizontalArrangement = Arrangement.SpaceBetween
+ ) {
+ Text(
+ text = no.toString(),
+ style = MaterialTheme.typography.bodyMedium,
+ fontSize = 16.sp,
+ modifier = Modifier.weight(0.2f)
+ )
+ Text(
+ text = course,
+ style = MaterialTheme.typography.bodyMedium,
+ fontSize = 16.sp,
+ modifier = Modifier.weight(0.6f)
+ )
+ Text(
+ text = semester.toString(),
+ style = MaterialTheme.typography.bodyMedium,
+ fontSize = 16.sp,
+ modifier = Modifier.weight(0.2f)
+ )
+ }
+ }
+ }
+ }
+
+ // Interactive Back Button with visual feedback
+ Button(
+ onClick = { (context as? ComponentActivity)?.finish() },
+ modifier = Modifier
+ .align(Alignment.CenterHorizontally)
+ .padding(top = 16.dp),
+ colors = ButtonDefaults.buttonColors(
+ containerColor = MaterialTheme.colorScheme.primary,
+ contentColor = MaterialTheme.colorScheme.onPrimary
+ )
+ ) {
+ Text(text = "Kembali")
+ }
+ }
+}
+
+
diff --git a/app/src/main/res/layout/activity_mhs2.xml b/app/src/main/res/layout/activity_mhs2.xml
new file mode 100644
index 0000000..6666858
--- /dev/null
+++ b/app/src/main/res/layout/activity_mhs2.xml
@@ -0,0 +1,10 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_mhs202210715136.xml b/app/src/main/res/layout/activity_mhs202210715136.xml
new file mode 100644
index 0000000..6666858
--- /dev/null
+++ b/app/src/main/res/layout/activity_mhs202210715136.xml
@@ -0,0 +1,10 @@
+
+
+
+
\ No newline at end of file
diff --git a/panic button/PanicButton.zip b/panic button/PanicButton.zip
new file mode 100644
index 0000000..98fe692
Binary files /dev/null and b/panic button/PanicButton.zip differ