update readme
This commit is contained in:
parent
ce05e1a617
commit
8cc6685816
50
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
50
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
@ -0,0 +1,50 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="ComposePreviewDimensionRespectsLimit" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="composableFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="ComposePreviewMustBeTopLevelFunction" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="composableFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="ComposePreviewNeedsComposableAnnotation" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="composableFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="ComposePreviewNotSupportedInUnitTestFiles" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="composableFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="GlancePreviewDimensionRespectsLimit" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="composableFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="GlancePreviewMustBeTopLevelFunction" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="composableFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="GlancePreviewNeedsComposableAnnotation" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="composableFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="GlancePreviewNotSupportedInUnitTestFiles" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="composableFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="PreviewAnnotationInFunctionWithParameters" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="composableFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="PreviewApiLevelMustBeValid" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="composableFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="PreviewDeviceShouldUseNewSpec" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||
<option name="composableFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="PreviewFontScaleMustBeGreaterThanZero" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="composableFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="PreviewMultipleParameterProviders" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="composableFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="PreviewParameterProviderOnFirstParameter" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="composableFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="PreviewPickerAnnotation" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="composableFile" value="true" />
|
||||
</inspection_tool>
|
||||
</profile>
|
||||
</component>
|
||||
374
README.md
374
README.md
@ -8,8 +8,12 @@ Aplikasi ini dirancang untuk meningkatkan **validitas kehadiran mahasiswa**, den
|
||||
2. Melakukan **pengambilan foto (selfie) secara langsung saat absensi**
|
||||
|
||||
---
|
||||
Nama : HAGA DALPINTO GINTING
|
||||
NPM : 202310715176
|
||||
|
||||
**Nama**: HAGA DALPINTO GINTING
|
||||
**NPM**: 202310715176
|
||||
**Kampus**: Universitas Bhayangkara Jakarta Raya - Bekasi Utara
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Tujuan Proyek
|
||||
- Mengimplementasikan **Location-Based Service (LBS)** pada aplikasi mobile
|
||||
@ -21,77 +25,341 @@ NPM : 202310715176
|
||||
---
|
||||
|
||||
## 🚀 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**
|
||||
|
||||
### ✅ Fitur yang Sudah Dikembangkan:
|
||||
- 🔐 **Login & Authentication** dengan validasi NPM dan session management
|
||||
- 📋 **Dashboard Menu** dengan navigasi lengkap
|
||||
- 📅 **Jadwal Kuliah Lengkap** dengan data real mahasiswa
|
||||
- 🎓 **Pemilihan Mata Kuliah** sebelum absensi (filter hari ini + prevent duplicate)
|
||||
- 📍 **Deteksi Lokasi GPS Real-time** dengan Fused Location Provider
|
||||
- 🏫 **Validasi Radius Lokasi** (100m dari kampus) dengan Haversine Formula
|
||||
- 📸 **Pengambilan Foto Selfie** dengan preview
|
||||
- 💾 **Penyimpanan Offline** menggunakan Room Database
|
||||
- 🕒 **Pencatatan Lengkap** (NPM, Nama, MK, Lokasi, Foto, Timestamp)
|
||||
- 📄 **Riwayat Kehadiran** dengan detail mata kuliah
|
||||
- ☁️ **Pengiriman ke Server** (webhook n8n)
|
||||
- ⚠️ **Validasi Lengkap** (lokasi, foto, duplicate check)
|
||||
|
||||
---
|
||||
|
||||
## 🗺️ Mekanisme Absensi Berbasis Lokasi dan Foto
|
||||
## 🗺️ Mekanisme Absensi
|
||||
|
||||
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 oleh dosen
|
||||
- Dokumentasi akademik
|
||||
2. Memilih menu **"Mulai Absensi"**
|
||||
3. Memilih **mata kuliah** dari jadwal hari ini
|
||||
4. Sistem meminta izin **akses lokasi** dan **akses kamera**
|
||||
5. Aplikasi mengambil:
|
||||
- 📍 **Koordinat lokasi mahasiswa** (GPS)
|
||||
- 📸 **Foto mahasiswa secara real-time** (selfie)
|
||||
6. Sistem melakukan validasi:
|
||||
- ✅ Lokasi berada dalam **radius 100m** dari kampus
|
||||
- ✅ Foto berhasil diambil
|
||||
- ✅ Belum pernah absen untuk MK yang sama hari ini
|
||||
7. Jika valid → **Absensi berhasil** → Data tersimpan + terkirim ke server
|
||||
8. Jika tidak valid → **Absensi ditolak** dengan notifikasi
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Teknologi yang Digunakan
|
||||
|
||||
- **Platform**: Android
|
||||
- **Bahasa Pemrograman** : Kotlin / Java
|
||||
- **Bahasa Pemrograman**: Kotlin
|
||||
- **UI Framework**: Jetpack Compose
|
||||
- **Arsitektur**: MVVM (Model-View-ViewModel)
|
||||
- **Navigation**: Navigation Compose
|
||||
- **Location Service**:
|
||||
- Google Maps API
|
||||
- Google Play Services Location 21.1.0
|
||||
- Fused Location Provider
|
||||
- **Camera API** : CameraX / Camera2
|
||||
- **Database** : Firebase / SQLite / MySQL
|
||||
- **Storage** : Firebase Storage / Local Storage
|
||||
- **Camera API**: Android Camera Intent
|
||||
- **Database**: Room Database 2.6.1 (SQLite)
|
||||
- **Storage**: DataStore Preferences 1.0.0
|
||||
- **Network**: HttpURLConnection + JSON
|
||||
- **Image Processing**: Bitmap + Base64 Encoding
|
||||
- **Additional Libraries**:
|
||||
- Gson 2.10.1 (JSON serialization)
|
||||
- Kotlinx Coroutines (async operations)
|
||||
- Lifecycle Runtime Compose
|
||||
- **IDE**: Android Studio
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Izin Aplikasi (Permissions)
|
||||
|
||||
Aplikasi memerlukan izin berikut:
|
||||
- `ACCESS_FINE_LOCATION`
|
||||
- `ACCESS_COARSE_LOCATION`
|
||||
- `CAMERA`
|
||||
- `INTERNET`
|
||||
- `WRITE_EXTERNAL_STORAGE` (jika diperlukan)
|
||||
- `ACCESS_FINE_LOCATION` - Untuk GPS akurat
|
||||
- `ACCESS_COARSE_LOCATION` - Untuk lokasi network-based
|
||||
- `CAMERA` - Untuk pengambilan foto selfie
|
||||
- `INTERNET` - Untuk pengiriman data ke server
|
||||
- `ACCESS_NETWORK_STATE` - Untuk cek status koneksi
|
||||
|
||||
---
|
||||
|
||||
## 📂 Mockup
|
||||

|
||||
## 📊 Koordinat Kampus
|
||||
|
||||
## Catatan:
|
||||
- Kembangkan project dari starter yang sudah disediakan, tidak membuat dari awal.
|
||||
- Untuk koordinat bisa ditambah/kurangi angka tertentu agar tidak memunculkan koordinat rumah masing-masing, data awal tetap dari GPS.
|
||||
- **Universitas**: Universitas Bhayangkara Jakarta Raya
|
||||
- **Lokasi**: Bekasi Utara, Jawa Barat
|
||||
- **Alamat**: Jl. Raya Perjuangan No.81, Marga Mulya
|
||||
- **Koordinat GPS**:
|
||||
- Latitude: `-6.224190375334469`
|
||||
- Longitude: `107.00928773168418`
|
||||
- **Radius Validasi**: 100 meter
|
||||
|
||||
## Pengecekan:
|
||||
- https://ntfy.ubharajaya.ac.id/EAS
|
||||
- https://docs.google.com/spreadsheets/d/1jH15MfnNgpPGuGeid0hYfY7fFUHCEFbCmg8afTyyLZs/edit?gid=0#gid=0
|
||||
---
|
||||
|
||||
## Webhook:
|
||||
- test: https://n8n.lab.ubharajaya.ac.id/webhook-test/23c6993d-1792-48fb-ad1c-ffc78a3e6254
|
||||
- production: https://n8n.lab.ubharajaya.ac.id/webhook/23c6993d-1792-48fb-ad1c-ffc78a3e6254
|
||||
## 🎨 Struktur Aplikasi
|
||||
|
||||
```
|
||||
app/src/main/java/id/ac/ubharajaya/sistemakademik/
|
||||
├── MainActivity.kt # Main activity dengan navigation
|
||||
├── data/ # Data layer
|
||||
│ ├── AbsensiEntity.kt # Database entity
|
||||
│ ├── AbsensiDao.kt # Database DAO
|
||||
│ ├── AppDatabase.kt # Database configuration
|
||||
│ ├── UserPreferences.kt # Session storage
|
||||
│ └── MataKuliah.kt # MK data class
|
||||
├── screens/ # UI screens
|
||||
│ ├── LoginScreen.kt # Login
|
||||
│ ├── DashboardScreen.kt # Dashboard menu
|
||||
│ ├── ScheduleScreen.kt # Jadwal kuliah
|
||||
│ ├── SelectMatakuliahScreen.kt # Pilih MK
|
||||
│ ├── AbsensiScreen.kt # Absensi (GPS + foto)
|
||||
│ ├── SuccessScreen.kt # Konfirmasi sukses
|
||||
│ └── HistoryScreen.kt # Riwayat absensi
|
||||
├── utils/ # Utilities
|
||||
│ ├── Constants.kt # Konstanta
|
||||
│ └── LocationValidator.kt # Validasi lokasi
|
||||
└── ui/theme/ # Theme files
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📱 Flow Aplikasi
|
||||
|
||||
```
|
||||
Login (NPM + Password)
|
||||
↓
|
||||
Dashboard (Menu utama)
|
||||
├─→ Jadwal Kuliah (lihat jadwal)
|
||||
├─→ Mulai Absensi
|
||||
│ ↓
|
||||
│ Pilih Mata Kuliah (dari jadwal hari ini)
|
||||
│ ↓
|
||||
│ Absensi Screen
|
||||
│ ├─ Validasi Lokasi GPS
|
||||
│ ├─ Ambil Foto Selfie
|
||||
│ └─ Kirim Absensi
|
||||
│ ↓
|
||||
│ Success Screen
|
||||
│
|
||||
└─→ Riwayat Absensi (lihat history)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 CHANGELOG - Pengembangan dari Starter
|
||||
|
||||
### ✨ Fitur Baru yang Ditambahkan:
|
||||
|
||||
#### 1. **Authentication & Session Management**
|
||||
- ✅ Implementasi LoginScreen dengan validasi NPM
|
||||
- ✅ Session management menggunakan DataStore Preferences
|
||||
- ✅ Auto-login jika sudah pernah login
|
||||
- ✅ Logout functionality
|
||||
|
||||
#### 2. **Database & Offline Storage**
|
||||
- ✅ Setup Room Database untuk offline storage
|
||||
- ✅ AbsensiEntity dengan field lengkap (NPM, Nama, MK, Lokasi, Foto, Timestamp)
|
||||
- ✅ AbsensiDao dengan query CRUD lengkap
|
||||
- ✅ Query khusus: get absensi hari ini, count absensi, filter by MK
|
||||
- ✅ UserPreferences untuk menyimpan data login
|
||||
|
||||
#### 3. **Location-Based Service (LBS)**
|
||||
- ✅ Integrasi Google Play Services Location
|
||||
- ✅ Implementasi Fused Location Provider
|
||||
- ✅ LocationValidator dengan Haversine Formula
|
||||
- ✅ Validasi radius 100 meter dari koordinat kampus
|
||||
- ✅ Visual indicator status lokasi (hijau/merah)
|
||||
- ✅ Tampilan jarak real-time dari kampus
|
||||
- ✅ Error handling untuk GPS errors
|
||||
|
||||
#### 4. **Fitur Mata Kuliah**
|
||||
- ✅ Data class MataKuliah dengan Parcelable
|
||||
- ✅ SelectMatakuliahScreen untuk pilih MK sebelum absen
|
||||
- ✅ Filter otomatis: hanya tampil jadwal HARI INI
|
||||
- ✅ Auto-disable MK yang sudah diabsen (prevent duplicate)
|
||||
- ✅ Tampilan jadwal lengkap dengan data real
|
||||
- ✅ Passing MK data via Navigation (JSON + URL encode)
|
||||
- ✅ Database menyimpan info lengkap MK per absensi
|
||||
|
||||
#### 5. **Enhanced UI/UX**
|
||||
- ✅ Modern design dengan Material Design 3
|
||||
- ✅ Consistent color scheme (hijau akademik: #2E7D32)
|
||||
- ✅ LoginScreen dengan form validation
|
||||
- ✅ DashboardScreen dengan menu cards & info user
|
||||
- ✅ ScheduleScreen dengan jadwal real (9 mata kuliah)
|
||||
- ✅ SelectMatakuliahScreen dengan filter & disable logic
|
||||
- ✅ AbsensiScreen dengan info MK + status lokasi + preview foto
|
||||
- ✅ SuccessScreen dengan konfirmasi visual
|
||||
- ✅ HistoryScreen dengan detail MK & grouping
|
||||
- ✅ Loading indicators untuk semua async operations
|
||||
- ✅ Toast messages untuk feedback
|
||||
|
||||
#### 6. **Navigation**
|
||||
- ✅ Setup Navigation Compose
|
||||
- ✅ Navigation graph dengan 7 routes
|
||||
- ✅ Type-safe navigation arguments
|
||||
- ✅ Back stack management
|
||||
- ✅ Deep linking support
|
||||
|
||||
#### 7. **Camera Integration**
|
||||
- ✅ Camera Intent untuk selfie
|
||||
- ✅ Preview foto sebelum kirim
|
||||
- ✅ Image compression & Base64 encoding
|
||||
- ✅ Runtime permission handling
|
||||
|
||||
#### 8. **Network & API**
|
||||
- ✅ HTTP POST ke webhook n8n
|
||||
- ✅ JSON payload dengan data lengkap
|
||||
- ✅ Background thread untuk network operations
|
||||
- ✅ Error handling & retry mechanism
|
||||
- ✅ Status tracking (terkirim/pending)
|
||||
|
||||
#### 9. **Validations**
|
||||
- ✅ Validasi NPM saat login
|
||||
- ✅ Validasi lokasi dengan radius
|
||||
- ✅ Validasi foto harus ada
|
||||
- ✅ Validasi prevent duplicate: 1 MK = 1 absensi per hari
|
||||
- ✅ Form validation di semua input
|
||||
|
||||
#### 10. **Data Management**
|
||||
- ✅ AbsensiEntity diperluas dengan 5 field MK
|
||||
- ✅ MataKuliah data class
|
||||
- ✅ UserPreferences data class
|
||||
- ✅ Constants untuk konfigurasi terpusat
|
||||
- ✅ Flow untuk reactive data
|
||||
|
||||
---
|
||||
|
||||
### 🔧 Update File yang Sudah Ada:
|
||||
|
||||
1. **MainActivity.kt**
|
||||
- ✅ Diganti dengan Navigation Compose
|
||||
- ✅ Setup navigation graph
|
||||
- ✅ Handling argument passing
|
||||
|
||||
2. **AndroidManifest.xml**
|
||||
- ✅ Tambah permissions lengkap
|
||||
- ✅ Location permissions
|
||||
- ✅ Camera permission
|
||||
- ✅ Internet permission
|
||||
|
||||
3. **build.gradle.kts**
|
||||
- ✅ Tambah Navigation Compose dependency
|
||||
- ✅ Tambah Room Database dependencies
|
||||
- ✅ Tambah DataStore Preferences
|
||||
- ✅ Tambah Google Play Services Location
|
||||
- ✅ Tambah Gson untuk JSON
|
||||
- ✅ Setup kapt plugin untuk Room
|
||||
|
||||
---
|
||||
|
||||
### 📦 File Baru yang Dibuat:
|
||||
|
||||
#### Data Layer (5 files):
|
||||
1. ✅ `data/AbsensiEntity.kt` - Database entity
|
||||
2. ✅ `data/AbsensiDao.kt` - Database queries
|
||||
3. ✅ `data/AppDatabase.kt` - Database config
|
||||
4. ✅ `data/UserPreferences.kt` - Session storage
|
||||
5. ✅ `data/MataKuliah.kt` - MK data class
|
||||
|
||||
#### Screens (6 files):
|
||||
1. ✅ `screens/LoginScreen.kt` - Login UI
|
||||
2. ✅ `screens/DashboardScreen.kt` - Dashboard UI
|
||||
3. ✅ `screens/ScheduleScreen.kt` - Jadwal UI
|
||||
4. ✅ `screens/SelectMatakuliahScreen.kt` - Pilih MK UI
|
||||
5. ✅ `screens/SuccessScreen.kt` - Success UI
|
||||
6. ✅ `screens/HistoryScreen.kt` - History UI
|
||||
|
||||
#### Utils (2 files):
|
||||
1. ✅ `utils/Constants.kt` - Konstanta
|
||||
2. ✅ `utils/LocationValidator.kt` - Location logic
|
||||
|
||||
---
|
||||
|
||||
### 📊 Statistik Pengembangan:
|
||||
|
||||
- **Total Files Created**: 13 files baru
|
||||
- **Total Files Updated**: 4 files
|
||||
- **Total Lines of Code**: ~3,000+ lines
|
||||
- **Screens Developed**: 6 screens
|
||||
- **Database Tables**: 1 table (absensi)
|
||||
- **Navigation Routes**: 6 routes
|
||||
- **Permissions Required**: 5 permissions
|
||||
- **API Endpoints**: 1 webhook
|
||||
- **Features Implemented**: 10+ major features
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Testing
|
||||
|
||||
### Di Emulator:
|
||||
1. Set koordinat manual di Emulator Settings
|
||||
2. Latitude: `-6.224190375334469`
|
||||
3. Longitude: `107.00928773168418`
|
||||
4. Atau ubah `RADIUS_METER` di Constants.kt jadi lebih besar untuk testing
|
||||
|
||||
### Di HP Fisik:
|
||||
1. Gunakan Fake GPS app untuk testing di rumah
|
||||
2. Atau berada di area kampus untuk testing real
|
||||
|
||||
### Testing Credentials:
|
||||
- **NPM**: `202310715176`
|
||||
- **Password**: Bebas (minimal 4 karakter)
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Links
|
||||
- **Repository**: https://git.lab.ubharajaya.ac.id/202310715176-HAGA-DALPINTO-GINTING/EAS-202310715176-HagaDalpintoGinting.git
|
||||
- **Webhook Production**: https://n8n.lab.ubharajaya.ac.id/webhook/23c6993d-1792-48fb-ad1c-ffc78a3e6254
|
||||
- **Webhook Test**: https://n8n.lab.ubharajaya.ac.id/webhook-test/23c6993d-1792-48fb-ad1c-ffc78a3e6254
|
||||
- **Monitoring**: https://ntfy.ubharajaya.ac.id/EAS
|
||||
- **Google Sheet**: https://docs.google.com/spreadsheets/d/1jH15MfnNgpPGuGeid0hYfY7fFUHCEFbCmg8afTyyLZs/edit?gid=0#gid=0
|
||||
|
||||
---
|
||||
|
||||
## 📝 Catatan Penting
|
||||
|
||||
1. **Database Migration**: Karena struktur AbsensiEntity berubah (tambah 5 field MK), disarankan uninstall app lama sebelum install yang baru.
|
||||
|
||||
2. **Koordinat Real**: Koordinat kampus menggunakan data real dari Google Maps (Universitas Bhayangkara Jakarta Raya - Bekasi Utara).
|
||||
|
||||
3. **Jadwal Real**: Jadwal mata kuliah disesuaikan dengan jadwal real mahasiswa (9 mata kuliah).
|
||||
|
||||
4. **Prevent Duplicate**: Sistem otomatis mencegah absensi duplikat untuk mata kuliah yang sama dalam satu hari.
|
||||
|
||||
5. **Offline First**: Data tersimpan di local database terlebih dahulu, baru dikirim ke server. Jadi tetap bisa lihat history meskipun offline.
|
||||
|
||||
---
|
||||
|
||||
🤖 Acknowledgment - AI Assistance
|
||||
Aplikasi ini dikembangkan dengan bantuan Claude AI (Anthropic) sebagai coding assistant dan learning companion.
|
||||
|
||||
✅ Code Generation: Membantu generate boilerplate code dan struktur awal aplikasi
|
||||
✅ Problem Solving: Membantu debugging dan troubleshooting errors
|
||||
✅ Best Practices: Memberikan saran implementasi mengikuti Android best practices
|
||||
✅ Documentation: Membantu membuat dokumentasi lengkap dan changelog
|
||||
✅ Learning Resource: Menjelaskan konsep-konsep seperti Room Database, Navigation Compose, Location Services, dll
|
||||
|
||||
## 👨💻 Developer
|
||||
|
||||
- **Nama**: HAGA DALPINTO GINTING
|
||||
- **NPM**: 202310715176
|
||||
- **Jurusan**: Informatika
|
||||
- **Fakultas**: Ilmu Komputer
|
||||
- **Universitas**: Universitas Bhayangkara Jakarta Raya
|
||||
|
||||
---
|
||||
|
||||
## 📜 License
|
||||
|
||||
Educational Project - Universitas Bhayangkara Jakarta Raya
|
||||
|
||||
@ -658,6 +658,18 @@ private fun kirimKeWebhook(
|
||||
val json = JSONObject().apply {
|
||||
put("npm", absensi.npm)
|
||||
put("nama", absensi.nama)
|
||||
|
||||
put("mata_kuliah", absensi.namaMatakuliah)
|
||||
|
||||
|
||||
// 🔥 TAMBAH INI
|
||||
put("kode_matakuliah", absensi.kodeMatakuliah)
|
||||
put("nama_matakuliah", absensi.namaMatakuliah)
|
||||
put("dosen", absensi.dosenMatakuliah)
|
||||
put("ruangan", absensi.ruanganMatakuliah)
|
||||
put("waktu_kuliah", absensi.waktuMatakuliah)
|
||||
|
||||
// Data lokasi & foto
|
||||
put("latitude", absensi.latitude)
|
||||
put("longitude", absensi.longitude)
|
||||
put("jarak", absensi.jarak)
|
||||
|
||||
@ -104,7 +104,7 @@ fun DashboardScreen(
|
||||
modifier = Modifier.padding(16.dp)
|
||||
) {
|
||||
Text(
|
||||
text = "Selamat Datang, Budi!",
|
||||
text = "Selamat Datang, Haga!",
|
||||
fontSize = 20.sp,
|
||||
fontWeight = FontWeight.Bold,
|
||||
color = primaryGreen
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user