How victor-lee-123/smart-attendance-verification-app works
CheckIn@DP is an offline-first Android attendance app. The documented workflow gathers a session QR, location and selfie, validates the QR, time window and optional geofence, then saves an attendance record locally for reactive UI updates and deferred sync. Sampled code implements a demo Compose screen, ViewModel, repository, Room access and WorkManager/Firebase upload path. Authentication, leave requests and production camera/QR wiring are documented or represented in the tree but not demonstrated in the sampled runtime calls; those connections are therefore omitted or marked unverified.
Main entry points: MainActivity.kt Compose screen · AttendanceRepository.kt Attendance repository · AttendanceSyncWorker.kt Sync worker · DbProvider.kt Database provider
Components 15
Check-in experience
- Compose screen
app/src/main/java/sg/edu/sit/attendance/MainActivity.kt - Main ViewModel
app/src/main/java/sg/edu/sit/attendance/MainViewModel.kt
Attendance verification
- QR analyzer
app/src/main/java/sg/edu/sit/attendance/qr/QrAnalyzer.kt - Geofence check
app/src/main/java/sg/edu/sit/attendance/location/LocationFence.kt - Photo saver
app/src/main/java/sg/edu/sit/attendance/camera/PhotoSaver.kt - Attendance repository
app/src/main/java/sg/edu/sit/attendance/repo/AttendanceRepository.kt
Local persistence
- Attendance entities
app/src/main/java/sg/edu/sit/attendance/data/Entities.kt - Attendance DAO
app/src/main/java/sg/edu/sit/attendance/data/Dao.kt - Room database
app/src/main/java/sg/edu/sit/attendance/data/AppDatabase.kt - Database provider
app/src/main/java/sg/edu/sit/attendance/data/DbProvider.kt
Background sync
- Sync enqueue
app/src/main/java/sg/edu/sit/attendance/work/WorkEnqueue.kt - Sync worker
app/src/main/java/sg/edu/sit/attendance/work/AttendanceSyncWorker.kt - Firebase uploader
app/src/main/java/sg/edu/sit/attendance/sync/FirebaseSync.kt
Other components
- Student
- Firestore
Connections 17
- Student → Compose screen: uses
app/src/main/java/sg/edu/sit/attendance/MainActivity.kt - Compose screen → Main ViewModel: collects state
app/src/main/java/sg/edu/sit/attendance/MainActivity.kt - Compose screen → Database provider: seeds session
app/src/main/java/sg/edu/sit/attendance/MainActivity.kt - Main ViewModel → Attendance repository: delegates check-in
app/src/main/java/sg/edu/sit/attendance/MainViewModel.kt - Attendance repository → Geofence check: checks proximity
app/src/main/java/sg/edu/sit/attendance/repo/AttendanceRepository.kt - Attendance repository → Database provider: gets DAO
app/src/main/java/sg/edu/sit/attendance/repo/AttendanceRepository.kt - Database provider → Room database: creates
app/src/main/java/sg/edu/sit/attendance/data/DbProvider.kt - Room database → Attendance DAO: exposes
app/src/main/java/sg/edu/sit/attendance/data/AppDatabase.kt - Attendance repository → Attendance DAO: writes attendance
app/src/main/java/sg/edu/sit/attendance/repo/AttendanceRepository.kt - Attendance repository → Sync enqueue: schedules sync
app/src/main/java/sg/edu/sit/attendance/repo/AttendanceRepository.kt - Sync enqueue → Sync worker: queues work
app/src/main/java/sg/edu/sit/attendance/work/WorkEnqueue.kt - Sync worker → Database provider: gets DAO
app/src/main/java/sg/edu/sit/attendance/work/AttendanceSyncWorker.kt - Sync worker → Attendance DAO: loads pending
app/src/main/java/sg/edu/sit/attendance/work/AttendanceSyncWorker.kt - Sync worker → Firebase uploader: uploads records
app/src/main/java/sg/edu/sit/attendance/work/AttendanceSyncWorker.kt - Firebase uploader → Firestore: writes documents
app/src/main/java/sg/edu/sit/attendance/sync/FirebaseSync.kt - Compose screen → QR analyzer: scan integration
- Compose screen → Photo saver: capture integration