diff --git a/README.md b/README.md index fb2e62e..3746b7d 100644 --- a/README.md +++ b/README.md @@ -1,102 +1,74 @@ -# πŸ“± Aplikasi Absensi Akademik Berbasis Koordinat dan Foto (Mobile)## πŸ‘€ Identitas Mahasiswa -- **Nama:** Fadlan Rivaldi -- **NPM:** 202310715280 +# πŸ“± Aplikasi Absensi Akademik Berbasis Koordinat dan Foto (Mobile) ---- +## πŸ‘€ Identitas Mahasiswa +- **Nama:** Dirson Ali Wardana +- **NPM:** 202310715246--- ## πŸ“Œ Deskripsi Proyek -Proyek ini merupakan **Tugas Project Akhir Mata Kuliah Pemrograman Mobile** yang bertujuan untuk membangun **aplikasi akademik berbasis mobile** dengan fokus pada **fitur absensi menggunakan data koordinat (GPS) dan pengambilan foto mahasiswa**. +Proyek ini merupakan **Tugas Akhir / Project Akhir Mata Kuliah Pemrograman Mobile**. Aplikasi ini dikembangkan untuk mengelola absensi mahasiswa secara cerdas dengan validasi ganda: **Lokasi GPS (Geofencing)** dan **Verifikasi Wajah (Selfie)**. -Aplikasi ini dirancang untuk meningkatkan **validitas kehadiran mahasiswa**, dengan memastikan bahwa absensi hanya dapat dilakukan apabila mahasiswa: -1. Berada pada **lokasi yang telah ditentukan**, dan -2. Melakukan **pengambilan foto (selfie) secara langsung saat absensi** +Aplikasi memastikan kehadiran mahasiswa valid apabila mahasiswa berada dalam radius lokasi kampus dan melakukan pengambilan foto selfie sebagai bukti kehadiran fisik yang kemudian dikirimkan ke server pemantau (n8n & Google Sheets). --- -## 🎯 Tujuan Proyek -- Mengimplementasikan **Location-Based Service (LBS)** pada aplikasi mobile -- Mengintegrasikan **kamera perangkat** untuk dokumentasi absensi -- Mencegah kecurangan absensi (titip absen) -- Mengembangkan aplikasi mobile akademik berbasis Android -- Melatih kemampuan perancangan dan implementasi aplikasi mobile +## πŸ“ Change Log (Modifikasi & Pengembangan) +Berdasarkan *starter project* yang disediakan, berikut adalah catatan perubahan signifikan yang telah saya implementasikan: + +I. **Dropdown Mata Kuliah & Integrasi Data**: Menambahkan fitur pilihan mata kuliah dan memastikan data `namaMatkul` terkirim dengan benar ke server melalui payload JSON. +II. **Fragment Preview (History Logic)**: Mengimplementasikan `PreviewFragment` yang merangkum seluruh data (Foto, Koordinat, Timestamp) sebelum dikirim, serta menambahkan logika penyimpanan otomatis ke `DataHolder.historyList` setelah pengiriman berhasil. +III. **Konversi Base64**: Mengimplementasikan fungsi `base64ToBitmap` dan pengiriman `foto_base64` agar foto selfie mahasiswa dapat tersimpan dan dilihat di server. +IV. **Modernisasi UI (Material Card & Progress Bar)**: Menggunakan `MaterialCardView` untuk tampilan foto preview dan menambahkan `ProgressBar` (Loading) untuk memberikan feedback visual saat proses pengiriman data ke server. +V. **Network Threading**: Menggunakan `kotlin.concurrent.thread` untuk menangani proses pengiriman data ke Webhook agar aplikasi tidak *freeze* (ANR) saat melakukan request jaringan. --- ## πŸš€ Fitur Utama -- πŸ” **Login Pengguna (Mahasiswa)** -- πŸ“ **Pengambilan Koordinat Lokasi (Latitude & Longitude)** -- 🏫 **Validasi Lokasi Absensi (Radius Area)** -- πŸ“Έ **Pengambilan Foto Mahasiswa Saat Absensi** -- πŸ•’ **Pencatatan Waktu Absensi** -- πŸ“„ **Riwayat Kehadiran Mahasiswa** -- ⚠️ **Notifikasi Absensi Ditolak jika Tidak Valid** - ---- - -## πŸ—ΊοΈ Mekanisme Absensi Berbasis Lokasi dan Foto -1. Mahasiswa melakukan **login** -2. Memilih menu **Absensi** -3. Sistem meminta: - - Izin **akses lokasi** - - Izin **akses kamera** -4. Aplikasi mengambil: - - πŸ“ **Koordinat lokasi mahasiswa** - - πŸ“Έ **Foto mahasiswa secara real-time** -5. Sistem melakukan validasi: - - Lokasi berada dalam **radius absensi** - - Foto berhasil diambil -6. Jika valid β†’ **Absensi berhasil** -7. Jika tidak valid β†’ **Absensi ditolak** - ---- - -## πŸ“Έ Pengambilan Foto Saat Absensi -- Foto diambil menggunakan **kamera depan (selfie)** -- Foto hanya dapat diambil **saat proses absensi** -- Foto disimpan sebagai **bukti kehadiran** -- Foto dapat digunakan untuk verifikasi manual dan dokumentasi akademik. +- πŸ” **Login Mahasiswa**: Autentikasi otomatis dengan data profil tetap (Hardcoded). +- πŸŽ“ **Mata Kuliah Selector**: Memilih mata kuliah aktif sebelum melakukan absensi. +- πŸ“ **GPS Tracking**: Pengambilan koordinat Latitude dan Longitude secara presisi. +- πŸ“Έ **Selfie Verification**: Pratinjau foto selfie sebelum data dikirim ke server. +- πŸ“„ **Real-time History**: Daftar riwayat absensi yang langsung terupdate menggunakan `RecyclerView` / `LazyColumn`. +- πŸ“‘ **Webhook Integration**: Pengiriman data langsung ke sistem n8n Ubhara Jaya. --- ## πŸ› οΈ Teknologi yang Digunakan -- **Platform**: Android -- **Bahasa Pemrograman**: Kotlin -- **Location Service**: Google Maps API / Fused Location Provider -- **Camera API**: CameraX -- **Architecture**: MVVM / View System & Jetpack Compose -- **IDE**: Android Studio +- **Bahasa**: Kotlin +- **UI Framework**: Android XML (View System) & Jetpack Compose (Interoperability). +- **Network**: `HttpURLConnection` dengan format data **JSON**. +- **Kamera**: CameraX API. +- **Lokasi**: Fused Location Provider Client. +- **Data Manager**: `DataHolder` (Singleton) untuk manajemen data antar layar. + +--- + +## πŸ—ΊοΈ Mekanisme Absensi +1. Mahasiswa memilih mata kuliah. +2. Aplikasi mengambil lokasi dan mahasiswa melakukan foto selfie. +3. Di halaman **Preview**, mahasiswa memvalidasi data (Nama, NPM, Lokasi, dan Foto). +4. Klik **Submit**: Data dikonversi ke JSON dan dikirim ke Webhook. +5. Jika berhasil (Response 200), data otomatis masuk ke menu **Riwayat**. --- ## πŸ” Izin Aplikasi (Permissions) -Aplikasi memerlukan izin berikut: -- `ACCESS_FINE_LOCATION` & `ACCESS_COARSE_LOCATION` -- `CAMERA` -- `INTERNET` +Aplikasi memerlukan akses berikut: +- `android.permission.CAMERA`: Untuk mengambil foto selfie. +- `android.permission.ACCESS_FINE_LOCATION`: Untuk validasi lokasi presisi. +- `android.permission.INTERNET`: Untuk mengirim data absensi ke n8n. --- -## πŸ“‚ Mockup -![mockup](Mockup.png) -*Gambar mockup dibuat oleh AI* +## ⚠️ Disclaimer & Catatan +- **PENGGUNAAN AI**: Proyek ini dikembangkan dengan bantuan **Kecerdasan Buatan (AI)** (ChatGPT/Claude) dalam proses debugging Gradle, perbaikan error `XMLStreamException`, dan penyusunan struktur pengiriman data JSON pada `PreviewFragment.kt`. +- **PENGEMBANGAN**: Aplikasi ini merupakan hasil modifikasi intensif dari *starter project* yang disediakan untuk memenuhi standar capaian project akhir EAS 2025/2026. --- -## ⚠️ Disclaimer & Catatan Penting -- **PENGGUNAAN AI**: Proyek ini dikembangkan dengan bantuan **Kecerdasan Buatan (AI)** dalam proses debugging, pembuatan starter project, dan penyusunan dokumentasi. -- **PENGEMBANGAN**: Proyek ini dikembangkan dari *starter project* yang disediakan dan tidak dibuat dari nol. -- **PRIVASI KOORDINAT**: Untuk alasan keamanan/privasi, angka koordinat GPS dapat dimodifikasi sedikit agar tidak menunjukkan lokasi rumah pribadi secara presisi. - ---- - -## πŸ”— Link Pengecekan & Webhook -- **Monitoring**: [ntfy.ubharajaya.ac.id/EAS](https://ntfy.ubharajaya.ac.id/EAS) -- **Data Spreadsheet**: [Google Sheets](https://docs.google.com/spreadsheets/d/1jH15MfnNgpPGuGeid0hYfY7fFUHCEFbCmg8afTyyLZs/edit?gid=0#gid=0) +## πŸ”— Link Monitoring & Data +- **Monitoring (ntfy)**: [ntfy.ubharajaya.ac.id/EAS](https://ntfy.ubharajaya.ac.id/EAS) +- **Data Spreadsheet**: [Cek Data Absensi](https://docs.google.com/spreadsheets/d/1jH15MfnNgpPGuGeid0hYfY7fFUHCEFbCmg8afTyyLZs/edit?gid=0#gid=0) - **Webhook Production**: `https://n8n.lab.ubharajaya.ac.id/webhook/23c6993d-1792-48fb-ad1c-ffc78a3e6254` --- -β€œβš οΈ Disclaimer & Catatan Penting” -Proyek ini dikembangkan dengan bantuan Kecerdasan Buatan (AI) sebagai asisten dalam proses debugging dan dokumentasi. Seluruh implementasi, pemahaman konsep, -dan pengembangan fitur dilakukan oleh penulis secara mandiri. - -*Dibuat untuk memenuhi Tugas Project Akhir EAS 2025/2026.* \ No newline at end of file +*Dibuat untuk memenuhi Tugas Project Akhir Mata Kuliah Pemrograman Mobile.* \ No newline at end of file diff --git a/app/src/main/java/id/ac/ubharajaya/sistemakademik/data/MataKuliah.kt b/app/src/main/java/id/ac/ubharajaya/sistemakademik/data/MataKuliah.kt new file mode 100644 index 0000000..dd00b9c --- /dev/null +++ b/app/src/main/java/id/ac/ubharajaya/sistemakademik/data/MataKuliah.kt @@ -0,0 +1,2 @@ +package id.ac.ubharajaya.sistemakademik.data + diff --git a/app/src/main/java/id/ac/ubharajaya/sistemakademik/utils/DummyData.kt b/app/src/main/java/id/ac/ubharajaya/sistemakademik/utils/DummyData.kt new file mode 100644 index 0000000..b94cdbb --- /dev/null +++ b/app/src/main/java/id/ac/ubharajaya/sistemakademik/utils/DummyData.kt @@ -0,0 +1,2 @@ +package id.ac.ubharajaya.sistemakademik.utils +