# πŸ“± Aplikasi Absensi Akademik Berbasis Koordinat dan Foto ## πŸ“‹ Deskripsi Proyek Aplikasi mobile Android untuk sistem absensi akademik yang menggunakan **lokasi GPS** dan **pengambilan foto** untuk validasi kehadiran mahasiswa. Aplikasi ini dirancang untuk mencegah kecurangan absensi dan meningkatkan integritas sistem kehadiran. ## ✨ Fitur Utama - πŸ” **Login Pengguna** - Autentikasi mahasiswa - πŸ“ **Tracking Lokasi Real-time** - Menggunakan Fused Location Provider - 🏫 **Validasi Area Absensi** - Radius-based location validation - πŸ“Έ **Pengambilan Foto Selfie** - Dokumentasi kehadiran - βœ“ **Validasi Data** - Memastikan semua data lengkap sebelum submit - πŸ“‘ **Integrasi N8n Webhook** - Pengiriman data ke server - ⚠️ **Error Handling** - Pesan error yang user-friendly - πŸ”„ **Loading States** - Visual feedback untuk proses async ## πŸ› οΈ Tech Stack - **Platform**: Android 12+ (API 28+) - **Language**: Kotlin - **UI Framework**: Jetpack Compose - **Location Services**: Google Play Services (Fused Location Provider) - **Camera**: Android Camera Intent - **Networking**: HttpURLConnection + JSON - **Build Tool**: Gradle Kotlin DSL ## πŸ“¦ Struktur Proyek ``` app/src/main/ β”œβ”€β”€ java/id/ac/ubharajaya/sistemakademik/ β”‚ β”œβ”€β”€ MainActivity.kt # Main UI dan Activity β”‚ β”œβ”€β”€ config/ β”‚ β”‚ └── AttendanceConfig.kt # Konfigurasi aplikasi β”‚ β”œβ”€β”€ models/ β”‚ β”‚ └── AttendanceRecord.kt # Data models β”‚ β”œβ”€β”€ network/ β”‚ β”‚ └── N8nService.kt # API service untuk N8n β”‚ β”œβ”€β”€ utils/ β”‚ β”‚ β”œβ”€β”€ LocationValidator.kt # Validasi lokasi β”‚ β”‚ └── ErrorHandler.kt # Error handling β”‚ └── ui/ β”‚ β”œβ”€β”€ components/ β”‚ β”‚ └── AttendanceComponents.kt # Reusable UI components β”‚ └── theme/ β”‚ └── Theme.kt # Material 3 theme └── res/ # Resources ``` ## πŸš€ Cara Menjalankan ### Prerequisites - Android Studio (Flamingo atau lebih baru) - Android SDK 28 atau lebih baru - Device/Emulator dengan Google Play Services ### Setup 1. **Clone atau buka project** ```bash cd Starter-EAS-2025-2026 ``` 2. **Sinkronisasi Gradle** - Android Studio akan otomatis sinkronisasi atau jalankan: ```bash ./gradlew sync ``` 3. **Update Konfigurasi** (opsional) - Edit `AttendanceConfig.kt` untuk mengubah: - Koordinat referensi kampus - Radius area absensi - NPM dan Nama mahasiswa - Webhook URL 4. **Build & Run** ```bash ./gradlew installDebug ``` atau gunakan tombol "Run" di Android Studio ## βš™οΈ Konfigurasi ### AttendanceConfig.kt File ini berisi semua konfigurasi aplikasi: ```kotlin // Lokasi kampus (latitude, longitude) const val REFERENCE_LATITUDE = -7.0 const val REFERENCE_LONGITUDE = 110.4 // Radius area absensi (meter) const val ALLOWED_RADIUS_METERS = 100.0 // Data mahasiswa const val STUDENT_NPM = "202310715082" const val STUDENT_NAMA = "Fazri Abdurrahman" // Webhook endpoints const val WEBHOOK_PRODUCTION = "https://n8n.lab.ubharajaya.ac.id/webhook/..." const val WEBHOOK_TEST = "https://n8n.lab.ubharajaya.ac.id/webhook-test/..." ``` ### Mengubah Koordinat Referensi 1. Buka `AttendanceConfig.kt` 2. Update `REFERENCE_LATITUDE` dan `REFERENCE_LONGITUDE` 3. Atur `ALLOWED_RADIUS_METERS` sesuai kebutuhan 4. Rebuild aplikasi ## πŸ” Permissions Aplikasi memerlukan permissions berikut: - `ACCESS_FINE_LOCATION` - Untuk GPS precision - `ACCESS_COARSE_LOCATION` - Fallback lokasi - `CAMERA` - Untuk pengambilan foto - `INTERNET` - Untuk komunikasi dengan server Semua permissions diminta secara runtime (Android 6+). ## πŸ“‘ API Integration ### Webhook N8n Aplikasi mengirim data ke N8n webhook dengan format: ```json { "npm": "202310715082", "nama": "Fazri Abdurrahman", "latitude": -7.0251, "longitude": 110.4105, "timestamp": 1705250400000, "foto_base64": "base64_encoded_image_string" } ``` ### Response Handling - **Status 200**: Absensi diterima, akan reset form setelah 2 detik - **Status lain**: Error, tampilkan pesan error ## 🎨 UI Components ### 1. PhotoPreviewCard Menampilkan preview foto yang diambil dengan opsi untuk ambil ulang. ### 2. LocationStatusCard Menampilkan status lokasi, koordinat, dan jarak dari titik referensi. ### 3. ErrorAlertCard Card untuk menampilkan error messages yang dismissable. ### 4. SubmitButtonWithLoader Button dengan loading indicator untuk submit. ## πŸ”§ Validasi Lokasi ### Haversine Formula Aplikasi menggunakan Haversine formula untuk menghitung jarak antara dua koordinat GPS: ```kotlin d = 2 * R * asin(sqrt(sinΒ²(Δφ/2) + cos(Ο†1) * cos(Ο†2) * sinΒ²(Δλ/2))) ``` ### Proses Validasi 1. Ambil koordinat mahasiswa dari GPS 2. Hitung jarak ke koordinat referensi 3. Bandingkan dengan ALLOWED_RADIUS_METERS 4. Tampilkan status valid/invalid ## πŸ› Troubleshooting ### GPS tidak berfungsi - Pastikan aplikasi memiliki izin GPS - Nyalakan location services di device - Gunakan device dengan Google Play Services ### Foto tidak terakses - Pastikan izin CAMERA granted - Coba restart aplikasi ### Koneksi ke N8n gagal - Cek internet connection - Verifikasi webhook URL di `AttendanceConfig.kt` - Test dengan `WEBHOOK_TEST` terlebih dahulu ### Lokasi selalu invalid - Update koordinat referensi di `AttendanceConfig.kt` - Tingkatkan `ALLOWED_RADIUS_METERS` jika diperlukan ## πŸ“Š Testing ### Test dengan N8n Webhook Test 1. Set `isTest = true` di MainActivity submit button 2. Data akan dikirim ke `WEBHOOK_TEST` 3. Lihat response di N8n dashboard ### Manual Testing Checklist - [ ] Permission request berfungsi - [ ] GPS location terakses - [ ] Camera foto terakses - [ ] Foto preview ditampilkan - [ ] Validasi lokasi bekerja - [ ] Submit ke webhook berhasil - [ ] Error handling tampil dengan baik ## πŸ“ Notes ### Privacy & Security - Foto disimpan sebagai JPEG dengan quality 80% - Koordinat dapat di-offset untuk privacy (lihat `AttendanceConfig.LATITUDE_OFFSET`) - Gunakan HTTPS untuk komunikasi dengan server - Implementasikan authentication token di N8n ### Future Improvements - [ ] Attendance history dengan Room Database - [ ] User login screen - [ ] Multiple course support - [ ] Biometric verification - [ ] Offline mode dengan sync - [ ] Push notifications untuk deadline - [ ] QR code verification ## πŸ“§ Support Untuk pertanyaan atau masalah, silakan hubungi: - **Institusi**: Universitas Bhakti Raharya - **Mata Kuliah**: Pemrograman Mobile - **Tahun Ajaran**: 2025-2026 ## πŸ“„ License Project ini dibuat sebagai tugas akademik. Gunakan dengan bijak. --- **Version**: 1.0 **Last Updated**: January 14, 2026