290 lines
7.1 KiB
Markdown

# 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 <repository-url>
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
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.CAMERA"/>
```
### 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<MataKuliah> {
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 ✅