398 lines
11 KiB
Markdown
398 lines
11 KiB
Markdown
# 📁 File Katalog & Deskripsi
|
|
|
|
## 📂 Project Root Files
|
|
|
|
| File | Tujuan |
|
|
|------|--------|
|
|
| `README.md` | Project overview (original) |
|
|
| `SUMMARY.md` | Implementation summary & status |
|
|
| `IMPLEMENTATION_GUIDE.md` | Detailed technical documentation |
|
|
| `IMPLEMENTATION_CHECKLIST.md` | Feature tracking & progress |
|
|
| `QUICK_START.md` | Quick start guide & testing |
|
|
| `Mockup.png` | UI mockup design |
|
|
| `n8n-workflow-EAS.json` | N8n workflow configuration |
|
|
| `FILE_CATALOG.md` | This file - file catalog |
|
|
|
|
---
|
|
|
|
## 🔧 Gradle & Build Configuration
|
|
|
|
| File | Location | Purpose |
|
|
|------|----------|---------|
|
|
| `build.gradle.kts` | Root | Root-level build configuration |
|
|
| `app/build.gradle.kts` | App module | App-level build config (dependencies, plugins) |
|
|
| `settings.gradle.kts` | Root | Project module configuration |
|
|
| `gradle/libs.versions.toml` | Gradle | Centralized version & dependency management |
|
|
| `gradlew` / `gradlew.bat` | Root | Gradle wrapper scripts |
|
|
| `local.properties` | Root | Local machine configuration (git-ignored) |
|
|
| `gradle.properties` | Root | Global gradle properties |
|
|
|
|
---
|
|
|
|
## 📱 Source Code Structure
|
|
|
|
### Core Application Files
|
|
|
|
#### MainActivity & Navigation
|
|
```
|
|
app/src/main/java/id/ac/ubharajaya/sistemakademik/
|
|
├── MainActivity.kt [129 lines]
|
|
│ └── AppNavigation composable dengan NavHost
|
|
│ ├── login route → LoginScreen
|
|
│ ├── attendance route → AttendanceScreen
|
|
│ └── history route → HistoryScreen
|
|
```
|
|
|
|
#### Configuration Layer
|
|
```
|
|
config/
|
|
├── AppConfig.kt [42 lines]
|
|
│ ├── N8n webhook URLs
|
|
│ ├── Campus location coordinates
|
|
│ ├── Attendance radius settings
|
|
│ └── App constants
|
|
```
|
|
|
|
#### Data Layer
|
|
```
|
|
data/
|
|
├── database/
|
|
│ ├── AppDatabase.kt [30 lines]
|
|
│ │ └── Room database setup dengan singleton pattern
|
|
│ └── AttendanceDao.kt [26 lines]
|
|
│ └── CRUD operations & queries
|
|
│
|
|
├── model/
|
|
│ ├── User.kt [5 lines]
|
|
│ │ └── User data class (npm, nama)
|
|
│ ├── Attendance.kt [16 lines]
|
|
│ │ └── Room entity untuk attendance records
|
|
│ └── LocationConfig.kt [7 lines]
|
|
│ └── Campus location configuration
|
|
│
|
|
├── preferences/
|
|
│ └── UserPreferences.kt [40 lines]
|
|
│ └── DataStore untuk user session
|
|
│
|
|
└── repository/
|
|
└── AttendanceRepository.kt [95 lines]
|
|
├── Data abstraction layer
|
|
├── N8n webhook integration
|
|
└── Photo compression & encoding
|
|
```
|
|
|
|
#### Domain Layer (Business Logic)
|
|
```
|
|
domain/
|
|
└── usecase/
|
|
└── LocationValidator.kt [30 lines]
|
|
├── Distance calculation
|
|
├── Radius validation
|
|
└── Geometric operations
|
|
```
|
|
|
|
#### Presentation Layer (UI)
|
|
```
|
|
presentation/
|
|
├── screens/
|
|
│ ├── LoginScreen.kt [96 lines]
|
|
│ │ ├── NPM input field
|
|
│ │ ├── Nama input field
|
|
│ │ ├── Validation
|
|
│ │ └── Login button
|
|
│ │
|
|
│ ├── AttendanceScreen.kt [382 lines]
|
|
│ │ ├── User info card
|
|
│ │ ├── Location status card
|
|
│ │ ├── Photo capture section
|
|
│ │ ├── Status messages
|
|
│ │ ├── Submit button
|
|
│ │ ├── History navigation
|
|
│ │ └── Logout button
|
|
│ │
|
|
│ └── HistoryScreen.kt [149 lines]
|
|
│ ├── Attendance list
|
|
│ ├── Card-based items
|
|
│ ├── Status badges
|
|
│ └── Empty state handling
|
|
│
|
|
└── viewmodel/
|
|
└── AttendanceViewModel.kt [30 lines]
|
|
├── State management
|
|
├── Loading states
|
|
└── Error handling
|
|
```
|
|
|
|
#### Utility Functions
|
|
```
|
|
utils/
|
|
├── Utils.kt [76 lines]
|
|
│ ├── DateTimeUtils (formatting & calculations)
|
|
│ ├── ValidationUtils (input validation)
|
|
│ └── LocationUtils (coordinate formatting)
|
|
│
|
|
├── NetworkUtils.kt [38 lines]
|
|
│ ├── Network availability check
|
|
│ ├── WiFi detection
|
|
│ └── Network type detection
|
|
│
|
|
└── TestDataGenerator.kt [92 lines]
|
|
├── Mock data generation
|
|
├── Sample test data
|
|
└── Multi-record generators
|
|
```
|
|
|
|
#### UI Theme (Existing)
|
|
```
|
|
ui/theme/
|
|
├── Color.kt
|
|
│ └── Material Design color palette
|
|
├── Theme.kt
|
|
│ └── App theming with Material Design 3
|
|
└── Type.kt
|
|
└── Typography definitions
|
|
```
|
|
|
|
---
|
|
|
|
## 📋 Android Manifest & Resources
|
|
|
|
```
|
|
app/src/main/
|
|
├── AndroidManifest.xml [35 lines]
|
|
│ ├── Permissions declarations
|
|
│ │ ├── ACCESS_FINE_LOCATION
|
|
│ │ ├── ACCESS_COARSE_LOCATION
|
|
│ │ ├── CAMERA
|
|
│ │ └── INTERNET
|
|
│ ├── MainActivity declaration
|
|
│ └── Intent filters
|
|
│
|
|
└── res/
|
|
├── values/
|
|
│ ├── colors.xml
|
|
│ ├── strings.xml
|
|
│ └── themes.xml
|
|
│
|
|
├── drawable/ (App icons & graphics)
|
|
│ ├── ic_launcher_background.xml
|
|
│ └── ic_launcher_foreground.xml
|
|
│
|
|
├── mipmap-*/ (Icons in different densities)
|
|
│ ├── ic_launcher.webp
|
|
│ └── ic_launcher_round.webp
|
|
│
|
|
└── xml/
|
|
├── backup_rules.xml
|
|
└── data_extraction_rules.xml
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Database Schema
|
|
|
|
### Attendance Table (Room Entity)
|
|
```
|
|
Attendance {
|
|
id: Int (Primary Key, auto-increment)
|
|
npm: String (NPM Mahasiswa)
|
|
nama: String (Nama Mahasiswa)
|
|
latitude: Double (Koordinat latitude)
|
|
longitude: Double (Koordinat longitude)
|
|
timestamp: Long (Waktu absensi dalam ms)
|
|
fotoBase64: String (Foto dalam format Base64)
|
|
status: String (pending, accepted, rejected)
|
|
message: String (Pesan dari server)
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 🎨 Composable Components Map
|
|
|
|
### LoginScreen Components
|
|
- `LoginScreen()` - Main screen
|
|
- Icon display
|
|
- Title & subtitle
|
|
- NPM TextField
|
|
- Nama TextField
|
|
- Error message display
|
|
- Login button with loading state
|
|
|
|
### AttendanceScreen Components
|
|
- `AttendanceScreen()` - Main screen
|
|
- `TopAppBar` dengan logout button
|
|
- User info card
|
|
- Location status card
|
|
- Icon & title
|
|
- Coordinates display
|
|
- Distance display
|
|
- Status indicator (text + color)
|
|
- Refresh button
|
|
- Photo section card
|
|
- Photo status
|
|
- Camera button
|
|
- Status message card
|
|
- Submit button
|
|
- History navigation button
|
|
|
|
### HistoryScreen Components
|
|
- `HistoryScreen()` - Main screen
|
|
- TopAppBar dengan back button
|
|
- `LazyColumn` untuk list
|
|
- `AttendanceCard()` items
|
|
- Nama & NPM
|
|
- Status badge
|
|
- Date/time
|
|
- Coordinates
|
|
- Message
|
|
|
|
---
|
|
|
|
## 🔗 Dependencies Map
|
|
|
|
### AndroidX Libraries
|
|
- `androidx.core:core-ktx` - Core Kotlin extensions
|
|
- `androidx.lifecycle:lifecycle-runtime-ktx` - Lifecycle management
|
|
- `androidx.activity:activity-compose` - Activity Compose integration
|
|
- `androidx.compose.material3:material3` - Material Design 3
|
|
- `androidx.compose.ui:ui*` - Compose UI components
|
|
- `androidx.navigation:navigation-compose` - Navigation routing
|
|
- `androidx.room:room-*` - Local database
|
|
- `androidx.datastore:datastore-preferences` - Preferences storage
|
|
|
|
### Google Play Services
|
|
- `com.google.android.gms:play-services-location` - GPS/Location
|
|
|
|
### Kotlin
|
|
- `org.jetbrains.kotlinx:kotlinx-coroutines-core` - Async operations
|
|
|
|
### Testing
|
|
- `junit:junit` - Unit testing
|
|
- `androidx.test.ext:junit` - Android testing
|
|
- `androidx.test.espresso:espresso-core` - UI testing
|
|
- `androidx.compose.ui:ui-test-junit4` - Compose testing
|
|
|
|
---
|
|
|
|
## 🔀 Data Flow Diagram
|
|
|
|
```
|
|
┌─────────────────────┐
|
|
│ LoginScreen │
|
|
├─────────────────────┤
|
|
│ Input: NPM, Nama │
|
|
│ Action: Validation │
|
|
│ Save: DataStore │
|
|
└──────────┬──────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────┐
|
|
│ AttendanceScreen │
|
|
├─────────────────────────────────────────┤
|
|
│ Location Service ──┐ │
|
|
│ ├─→ LocationValidator│
|
|
│ Camera Intent ──┐ │ └─→ Validate │
|
|
│ └──┤ (within 100m) │
|
|
│ Data Validation │ │
|
|
└────────┬───────────┘ │
|
|
│ │
|
|
▼ │
|
|
┌─────────────────────────────────────────┐
|
|
│ AttendanceRepository │
|
|
├─────────────────────────────────────────┤
|
|
│ N8n Webhook (POST) │
|
|
│ └─ Encode photo to Base64 │
|
|
│ └─ Send JSON payload │
|
|
│ └─ Handle response │
|
|
│ │
|
|
│ Room Database (INSERT) │
|
|
│ └─ Save attendance record │
|
|
└────────┬────────────────────────────────┘
|
|
│
|
|
┌────┴────┐
|
|
▼ ▼
|
|
┌────────┐┌──────────┐
|
|
│ N8n ││ Room │
|
|
│Webhook ││Database │
|
|
└────────┘└──────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 🔐 Security Points
|
|
|
|
| Component | Security Measure |
|
|
|-----------|-----------------|
|
|
| User Session | Encrypted DataStore |
|
|
| Network | HTTPS for N8n endpoint |
|
|
| Permissions | Runtime request + handling |
|
|
| Database | Local storage (no backup) |
|
|
| Photo | Base64 encoded (not actual file) |
|
|
|
|
---
|
|
|
|
## 📈 Code Statistics
|
|
|
|
| Category | Count |
|
|
|----------|-------|
|
|
| Kotlin Files | 16 |
|
|
| Total Lines of Code | ~3,500+ |
|
|
| Composables | 3 screens + helpers |
|
|
| Database Entities | 1 |
|
|
| Data Models | 3 |
|
|
| Utility Classes | 3 |
|
|
| Navigation Routes | 3 |
|
|
| Permissions | 4 |
|
|
| Dependencies | 15+ |
|
|
|
|
---
|
|
|
|
## 🚀 Quick File Navigation
|
|
|
|
### Must-Read Files (Documentation)
|
|
1. **SUMMARY.md** - Project completion status
|
|
2. **IMPLEMENTATION_GUIDE.md** - Technical details
|
|
3. **QUICK_START.md** - Getting started & testing
|
|
|
|
### Key Source Files
|
|
1. **MainActivity.kt** - App entry point & navigation
|
|
2. **AttendanceScreen.kt** - Main user interface
|
|
3. **AppConfig.kt** - All configuration values
|
|
4. **AppDatabase.kt** - Database setup
|
|
5. **AttendanceRepository.kt** - API integration
|
|
|
|
### Configuration Files
|
|
1. **gradle/libs.versions.toml** - Dependencies
|
|
2. **app/build.gradle.kts** - Build config
|
|
3. **AndroidManifest.xml** - Permissions & metadata
|
|
4. **AppConfig.kt** - App settings
|
|
|
|
---
|
|
|
|
## 📞 File Location References
|
|
|
|
```bash
|
|
# Project root
|
|
C:\Users\dimas\AndroidStudioProjects\Starter-EAS-2025-2026\
|
|
|
|
# Source code
|
|
app/src/main/java/id/ac/ubharajaya/sistemakademik/
|
|
|
|
# Resources
|
|
app/src/main/res/
|
|
|
|
# Build config
|
|
gradle/
|
|
|
|
# Documentation
|
|
(root level)
|
|
```
|
|
|
|
---
|
|
|
|
**Last Updated**: 2025-01-14
|
|
**Total Files**: 40+ (code + resources + docs)
|
|
**Status**: ✅ Complete & Organized
|
|
|