# Sistem Akademik - Aplikasi Absensi Mahasiswa Aplikasi mobile untuk sistem absensi akademik dengan fitur GPS tracking, pengambilan foto, dan manajemen mata kuliah. Dibangun menggunakan **Kotlin** dan **Jetpack Compose** dengan Material Design 3. ## 🎯 Fitur Utama ### 1. **Absensi Akademik** - Pengambilan lokasi real-time menggunakan GPS - Capture foto selfie untuk verifikasi kehadiran - Pemilihan mata kuliah yang sedang diambil - Submit absensi langsung ke server N8N - Riwayat kehadiran dengan detail lengkap ### 2. **Manajemen Mata Kuliah** - Daftar mata kuliah dengan informasi lengkap - Detail dosen pengampu - Lokasi/ruangan kuliah - Jumlah SKS (Sistem Kredit Semester) ### 3. **Profil Mahasiswa** - Informasi dasar mahasiswa - Program studi - Tahun akademik dan semester - Status akademik ### 4. **Keamanan** - Login dengan NPM dan password - Permission handling untuk camera dan lokasi - Data encryption untuk komunikasi server ## 📋 Requirements - **Android SDK**: 24 (API Level 24 - Android 7.0) atau lebih tinggi - **Kotlin**: 1.9+ - **Compose**: 1.5.3+ - **Google Play Services**: Location API v21.0.1 ## 🚀 Instalasi ### 1. Clone Repository ```bash git clone cd sistem-akademik ``` ### 2. Setup Build.gradle Copy seluruh kode dari artifact `build.gradle (Module: app)` ke file: ``` app/build.gradle ``` Kemudian sync gradle: - Klik **"Sync Now"** di Android Studio ### 3. Copy File Kotlin Salin 3 file Kotlin ke folder: `app/src/main/java/id/ac/ubharajaya/sistemakademik/` Files: - `Absensi.kt` - Data class untuk absensi - `LoginActivity.kt` - Login screen - `MainActivity.kt` - Main application ### 4. Update AndroidManifest.xml Lokasi: `app/src/main/AndroidManifest.xml` Pastikan sudah ada: ```xml ``` ### 5. Clean & Build ``` Build → Clean Project Build → Rebuild Project ``` ### 6. Run Aplikasi - Tekan **Shift + F10** atau klik tombol **Run** - Pilih emulator atau device - Tunggu app launch ## 🔐 Login Credentials **Demo Account:** - **NPM**: `202310715038` - **Password**: `Nuryuda28` > ⚠️ Untuk production, ganti dengan system backend authentication yang proper! ## 📱 Cara Penggunaan ### Tab 1: Absensi Akademik 1. **Ambil Lokasi** - Aplikasi otomatis mengambil lokasi GPS saat pertama kali dibuka - Izinkan akses lokasi saat diminta 2. **Ambil Foto** - Klik tombol "Ambil Foto" - Izinkan akses kamera - Ambil selfie untuk verifikasi 3. **Kirim Absensi** - Pastikan semua data lengkap (lokasi, foto, mata kuliah) - Klik tombol "Kirim Absensi" - Tunggu konfirmasi dari server 4. **Lihat Riwayat** - Scroll ke bawah untuk melihat riwayat kehadiran - Setiap record menampilkan detail lengkap ### Tab 2: Profil - Informasi dasar mahasiswa - Program studi - Status akademik - Tahun akademik dan semester ## 🔄 Integrasi Server ### N8N Webhook Aplikasi mengirim data absensi ke webhook N8N: ``` URL: https://n8n.lab.ubharajaya.ac.id/webhook/23c6993d-1792-48fb-ad1c-ffc78a3e6254 Method: POST Content-Type: application/json ``` **Data yang dikirim:** ```json { "npm": "202310715038", "nama": "Nuryuda Maulana Fahmi", "latitude": -6.123456, "longitude": 106.123456, "timestamp": 1705225800000, "waktu": "14 Jan 2024 10:30:00", "foto_base64": "base64_encoded_image_data" } ``` ## 🛠️ Troubleshooting ### Error: "Cannot find symbol 'School'" **Solusi:** Pastikan import icons di MainActivity.kt sudah benar ```kotlin import androidx.compose.material.icons.filled.School import androidx.compose.material.icons.filled.CameraAlt ``` ### Error: "LocationServices not found" **Solusi:** Pastikan dependency play-services-location ada di build.gradle: ```gradle implementation 'com.google.android.gms:play-services-location:21.0.1' ``` ### Error: "Permission denied untuk camera/lokasi" **Solusi:** - Untuk emulator: Settings > Apps > Permissions > izinkan akses - Untuk device: Buka Settings > Apps > Sistem Akademik > Permissions ### Error: "Gradle Sync Failed" **Solusi:** ``` 1. File → Invalidate Caches and Restart 2. Atau close & open ulang Android Studio 3. Build → Clean Project 4. Build → Sync with File System ``` ### Foto tidak keluar di riwayat **Solusi:** Pastikan bitmap compression berhasil, check logcat untuk error ### Lokasi menunjukkan "Lokasi tidak tersedia" **Solusi:** - Emulator: Gunakan GPS emulation di Android Virtual Device - Device: Turn on Location services & izinkan akses GPS ## 📊 Struktur Project ``` sistemakademik/ ├── Absensi.kt # Data class absensi ├── LoginActivity.kt # Login screen ├── MainActivity.kt # Main app dengan 3 tab ├── ui/ │ └── theme/ │ └── Theme.kt # Material Design 3 theme ├── res/ │ ├── values/ │ │ └── strings.xml │ └── drawable/ └── AndroidManifest.xml ``` ## 🔧 Customization ### Ganti Data Mata Kuliah Edit function `getDaftarMataKuliah()` di MainActivity.kt: ```kotlin fun getDaftarMataKuliah(): List { return listOf( MataKuliah( id = "1", nama = "Nama Mata Kuliah", kode = "IF-401", dosen = "Nama Dosen", ruangan = "Lokasi Ruang", sks = 3 ), // Tambah lebih banyak mata kuliah ) } ``` ### Ganti Webhook URL Edit di MainActivity.kt function `kirimKeN8n()`: ```kotlin val url = URL("https://your-webhook-url-here") ``` ### Ganti Data Mahasiswa Edit di AbsensiScreen function: ```kotlin val absensi = Absensi( npm = "NPM_KAMU", nama = "NAMA_KAMU", latitude = latitude!!, longitude = longitude!!, waktu = waktu, foto = foto!! ) ``` ## 📦 Dependencies | Library | Version | Purpose | |---------|---------|---------| | androidx.compose.ui | 1.5.3 | UI Framework | | androidx.compose.material3 | 1.1.1 | Material Design 3 | | com.google.android.gms:play-services-location | 21.0.1 | GPS Location | | org.json | 20230227 | JSON Handling | ## 🎨 Design - **Material Design 3** dengan sistem warna yang konsisten - **Bottom Navigation Bar** untuk navigasi antar halaman - **Card-based Layout** untuk presentasi data - **Rounded Corners** di semua elemen UI - **Icon-based Navigation** untuk UX yang lebih baik ## 📝 License Proyek ini dibuat untuk keperluan akademik di Universitas Bhayangkara Jakarta Raya. ## 👥 Author - **Name**: Nuryuda Maulana Fahmi - **NPM**: 202310715038 - **University**: Universitas Bhayangkara Jakarta Raya ## 📞 Support Untuk pertanyaan atau issue: 1. Cek bagian **Troubleshooting** di atas 2. Lihat logcat untuk error details 3. Hubungi tim development ## ✨ Fitur yang Akan Datang - [ ] Backend authentication server - [ ] Database lokal dengan Room - [ ] Geofencing untuk verifikasi lokasi - [ ] Attendance analytics & reporting - [ ] QR code scanning - [ ] Push notifications - [ ] Offline mode dengan sync kemudian --- **Last Updated**: January 2024 **Status**: Production Ready ✅