# Sistem Absensi Akademik - Universitas Bhayangkara Jakarta Raya ## 📋 Deskripsi Aplikasi mobile berbasis Android untuk sistem absensi mahasiswa dengan validasi lokasi GPS dan verifikasi foto. ## 🚀 Fitur Utama ### ✅ Sudah Diimplementasikan: - 🔐 **Login Pengguna** - Autentikasi mahasiswa dengan NPM dan Password - 📍 **Pengambilan Koordinat Lokasi** - GPS Latitude & Longitude otomatis - 🏫 **Validasi Lokasi Absensi** - Validasi radius area kampus (100 meter) - 📸 **Pengambilan Foto Mahasiswa** - Foto wajib saat absensi - 🕒 **Pencatatan Waktu Absensi** - Timestamp otomatis - 📄 **Riwayat Kehadiran** - History absensi mahasiswa - ⚠️ **Notifikasi Ditolak** - Alert jika lokasi di luar radius atau error ## 📁 Struktur File ``` id.ac.ubharajaya.sistemakademik/ ├── LoginActivity.kt # Halaman login ├── MainActivity.kt # Halaman absensi utama ├── HistoryActivity.kt # Halaman riwayat kehadiran └── utils/ └── SessionManager.kt # Manajemen session login ``` ## 🔧 Setup & Instalasi ### 1. Buat File-File Berikut: Struktur folder: ``` app/src/main/java/id/ac/ubharajaya/sistemakademik/ ├── LoginActivity.kt ├── MainActivity.kt ├── HistoryActivity.kt └── utils/ └── SessionManager.kt ``` ### 2. Update AndroidManifest.xml Ganti file `AndroidManifest.xml` dengan yang sudah disediakan. ### 3. Dependencies (build.gradle) Pastikan dependencies berikut sudah ada di `build.gradle.kts (Module: app)`: ```kotlin dependencies { implementation("androidx.core:core-ktx:1.12.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0") implementation("androidx.activity:activity-compose:1.8.2") implementation(platform("androidx.compose:compose-bom:2024.02.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-graphics") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.material3:material3") implementation("androidx.compose.material:material-icons-extended") // Google Location Services implementation("com.google.android.gms:play-services-location:21.1.0") } ``` ### 4. Koordinat Kampus Di file `MainActivity.kt`, ganti koordinat kampus sesuai lokasi asli: ```kotlin val kampusLat = -6.200000 // Latitude kampus val kampusLon = 106.816666 // Longitude kampus val maxRadius = 100.0 // Radius dalam meter ``` ## 🌐 Endpoint API yang Dibutuhkan ### 1. Login Endpoint **POST** `https://n8n.lab.ubharajaya.ac.id/webhook/login-mahasiswa` **Request Body:** ```json { "npm": "202310715277", "password": "password123" } ``` **Response Success:** ```json { "success": true, "nama": "Lalu Muhammad Anggana Subhan", "prodi": "Teknik Informatika" } ``` **Response Failed:** ```json { "success": false, "message": "NPM atau Password salah" } ``` ### 2. Absensi Endpoint (Sudah Ada) **POST** `https://n8n.lab.ubharajaya.ac.id/webhook/23c6993d-1792-48fb-ad1c-ffc78a3e6254` **Request Body:** ```json { "npm": "202310715277", "nama": "Lalu Muhammad Anggana Subhan", "latitude": -6.200000, "longitude": 106.816666, "jarak_dari_kampus": 50, "timestamp": 1704067200000, "waktu": "14/01/2026 10:30:00", "foto_base64": "base64_encoded_image" } ``` ### 3. Riwayat Absensi Endpoint **GET** `https://n8n.lab.ubharajaya.ac.id/webhook/riwayat-absensi?npm=202310715277` **Response:** ```json [ { "id": "1", "npm": "202310715277", "nama": "Lalu Muhammad Anggana Subhan", "waktu": "14/01/2026 10:30:00", "latitude": -6.200000, "longitude": 106.816666, "jarak_dari_kampus": 50, "foto_base64": "..." } ] ``` ## 📱 Cara Menggunakan Aplikasi ### Login 1. Buka aplikasi 2. Masukkan NPM dan Password 3. Klik tombol "Login" 4. Jika berhasil, akan masuk ke halaman absensi ### Melakukan Absensi 1. Pastikan GPS aktif 2. Aplikasi otomatis mengambil lokasi 3. Klik "Ambil Foto" untuk foto selfie 4. Klik "Kirim Absensi" 5. Sistem akan validasi: - ✅ Valid jika dalam radius 100m dari kampus - ❌ Ditolak jika di luar radius ### Lihat Riwayat 1. Klik icon History (jam) di toolbar 2. Lihat daftar riwayat absensi 3. Status ditampilkan: - ✅ Valid (hijau) - ❌ Ditolak (merah) ### Logout 1. Klik icon Logout di toolbar ## 🔒 Keamanan - **Session Management**: Login session tersimpan di SharedPreferences - **Auto Login**: Otomatis login jika session masih aktif - **Location Validation**: Validasi radius GPS otomatis - **Photo Required**: Foto wajib untuk setiap absensi ## ⚙️ Pengaturan Validasi **Validasi Radius** (di `MainActivity.kt`): ```kotlin val maxRadius = 100.0 // Ubah sesuai kebutuhan (dalam meter) ``` **Koordinat Kampus:** ```kotlin val kampusLat = -6.200000 // Ganti dengan koordinat kampus val kampusLon = 106.816666 // Ganti dengan koordinat kampus ``` ## 🐛 Troubleshooting ### GPS Tidak Terdeteksi - Pastikan GPS/Location aktif di HP - Coba klik "Refresh Lokasi" - Pastikan permission lokasi sudah diberikan ### Absensi Ditolak - Cek jarak dari kampus di pesan error - Pastikan berada dalam radius yang ditentukan - Koordinat kampus mungkin salah, cek lagi ### Login Gagal - Cek koneksi internet - Pastikan server n8n aktif - Cek endpoint login sudah benar ### Foto Tidak Muncul - Pastikan permission kamera sudah diberikan - Coba ambil foto ulang ## 📝 Testing Checklist - [ ] Login dengan NPM dan Password valid - [ ] Login gagal dengan kredensial salah - [ ] Auto-login setelah restart app - [ ] Absensi berhasil dalam radius kampus - [ ] Absensi ditolak di luar radius - [ ] Refresh lokasi berfungsi - [ ] Ambil foto berfungsi - [ ] Preview foto tampil - [ ] Riwayat absensi tampil - [ ] Status valid/ditolak sesuai - [ ] Logout berfungsi ## 🎯 Future Improvements - Face Recognition untuk validasi foto - Notifikasi push untuk jadwal absensi - QR Code scanning - Offline mode dengan sync - Export riwayat ke PDF - Multi-language support - Dark mode - Fingerprint authentication ## 👨‍💻 Developer **Lalu Muhammad Anggana Subhan** NPM: 202310715277 Universitas Bhayangkara Jakarta Raya ## 📄 License Copyright © 2026 Universitas Bhayangkara Jakarta Raya ## 📞 Support Jika ada pertanyaan atau bug, hubungi tim IT: - **Email**: it@ubharajaya.ac.id - **Phone**: (021) xxx-xxxx --- **Version**: 1.0.0 **Last Updated**: 14 Januari 2026