572 lines
14 KiB
Markdown
572 lines
14 KiB
Markdown
# 🔄 MAINTENANCE & UPDATE GUIDE
|
|
|
|
## 📋 Overview
|
|
Panduan untuk developer yang ingin membuat update, bug fix, atau enhancement di masa depan.
|
|
|
|
---
|
|
|
|
## 🐛 Bug Fix Procedure
|
|
|
|
### Step 1: Identify the Bug
|
|
```
|
|
Which screen? → LoginScreen, MenuScreen, AttendanceScreen, SuccessScreen
|
|
What's wrong? → Visual, Logic, Navigation, Data, Other
|
|
Severity? → Critical, High, Medium, Low
|
|
Reproducible? → Always, Sometimes, Rarely, Never
|
|
```
|
|
|
|
### Step 2: Find Relevant Documentation
|
|
1. Check QUICK_REFERENCE_UI.md - quick overview
|
|
2. Check specific screen docs in UI_IMPLEMENTATION_SUMMARY.md
|
|
3. Check TESTING_GUIDE.md - expected behavior
|
|
4. Check MOCKUP_IMPLEMENTATION.md - design specs
|
|
|
|
### Step 3: Locate Code File
|
|
```
|
|
LoginScreen issues → app/src/main/java/.../presentation/screens/LoginScreen.kt
|
|
MenuScreen issues → app/src/main/java/.../presentation/screens/MenuScreen.kt
|
|
AttendanceScreen issues → app/src/main/java/.../presentation/screens/AttendanceScreen.kt
|
|
SuccessScreen issues → app/src/main/java/.../presentation/screens/SuccessScreen.kt
|
|
Navigation issues → app/src/main/java/.../MainActivity.kt
|
|
Mata kuliah issues → AttendanceScreen.kt + MainActivity.kt
|
|
```
|
|
|
|
### Step 4: Make Changes
|
|
```kotlin
|
|
// Before making changes:
|
|
1. Read the complete function/composable
|
|
2. Understand the current flow
|
|
3. Identify root cause
|
|
4. Make minimal changes only
|
|
|
|
// Example bug fix structure:
|
|
@Composable
|
|
fun ScreenName() {
|
|
// ... existing code ...
|
|
|
|
// BUG FIX: Description of bug and fix
|
|
// Old: if (isLoading) { ... }
|
|
// New: if (isLoading && photo != null) { ... }
|
|
|
|
// ... rest of code ...
|
|
}
|
|
```
|
|
|
|
### Step 5: Test the Fix
|
|
```
|
|
1. Follow relevant test cases from TESTING_GUIDE.md
|
|
2. Test the specific feature that was fixed
|
|
3. Test surrounding features (regression)
|
|
4. Test navigation related to the bug
|
|
5. Document test results
|
|
```
|
|
|
|
### Step 6: Update Documentation (if needed)
|
|
```
|
|
If behavior changed:
|
|
→ Update TESTING_GUIDE.md
|
|
→ Update relevant doc file
|
|
→ Update QUICK_REFERENCE_UI.md
|
|
|
|
If visual changed:
|
|
→ Update MOCKUP_IMPLEMENTATION.md
|
|
→ Update UI_IMPLEMENTATION_SUMMARY.md
|
|
```
|
|
|
|
---
|
|
|
|
## ✨ Feature Addition Procedure
|
|
|
|
### Step 1: Plan the Feature
|
|
```
|
|
Feature name: _________________
|
|
Affects screens: _________________
|
|
New files needed: _________________
|
|
Related features: _________________
|
|
Database changes: _________________
|
|
```
|
|
|
|
### Step 2: Study Existing Patterns
|
|
|
|
#### Pattern 1: Input Field (Like Mata Kuliah)
|
|
```kotlin
|
|
// Location: AttendanceScreen.kt, line ~340
|
|
|
|
Card(
|
|
modifier = Modifier.fillMaxWidth(),
|
|
colors = CardDefaults.cardColors(
|
|
containerColor = Color(0xFF2E7D32).copy(alpha = 0.1f)
|
|
),
|
|
shape = RoundedCornerShape(8.dp)
|
|
) {
|
|
Column(modifier = Modifier.padding(12.dp)) {
|
|
// Icon + Title
|
|
Row(
|
|
modifier = Modifier.fillMaxWidth(),
|
|
verticalAlignment = Alignment.CenterVertically,
|
|
horizontalArrangement = Arrangement.spacedBy(8.dp)
|
|
) {
|
|
Icon(Icons.Default.Info, ...)
|
|
Text("Field Name", style = MaterialTheme.typography.labelMedium)
|
|
}
|
|
Spacer(modifier = Modifier.height(8.dp))
|
|
|
|
// Input
|
|
OutlinedTextField(
|
|
value = fieldValue,
|
|
onValueChange = { fieldValue = it },
|
|
modifier = Modifier.fillMaxWidth().height(40.dp),
|
|
placeholder = { Text("Placeholder", fontSize = 12.sp) },
|
|
singleLine = true,
|
|
enabled = !isLoading
|
|
)
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Pattern 2: Action Button
|
|
```kotlin
|
|
Button(
|
|
onClick = { /* action */ },
|
|
modifier = Modifier
|
|
.fillMaxWidth()
|
|
.height(44.dp),
|
|
enabled = !isLoading && condition,
|
|
colors = ButtonDefaults.buttonColors(
|
|
containerColor = Color(0xFF2E7D32),
|
|
contentColor = Color.White
|
|
),
|
|
shape = RoundedCornerShape(8.dp)
|
|
) {
|
|
if (isLoading) {
|
|
CircularProgressIndicator(modifier = Modifier.size(18.dp), ...)
|
|
} else {
|
|
Icon(Icons.Default.Something, ..., modifier = Modifier.size(16.dp), ...)
|
|
Spacer(modifier = Modifier.width(8.dp))
|
|
Text("BUTTON TEXT", fontSize = 14.sp, fontWeight = FontWeight.Bold)
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Pattern 3: Status Card
|
|
```kotlin
|
|
Card(
|
|
modifier = Modifier.fillMaxWidth(),
|
|
colors = CardDefaults.cardColors(
|
|
containerColor = Color(0xFF2E7D32).copy(alpha = 0.1f)
|
|
),
|
|
shape = RoundedCornerShape(8.dp)
|
|
) {
|
|
Column(modifier = Modifier.padding(12.dp)) {
|
|
Row(
|
|
modifier = Modifier.fillMaxWidth(),
|
|
verticalAlignment = Alignment.CenterVertically,
|
|
horizontalArrangement = Arrangement.spacedBy(8.dp)
|
|
) {
|
|
Icon(
|
|
Icons.Default.CheckCircle,
|
|
tint = if (isValid) Color(0xFF4CAF50) else Color(0xFFf44336),
|
|
modifier = Modifier.size(20.dp)
|
|
)
|
|
Text(
|
|
text = if (isValid) "Status: Valid" else "Status: Invalid",
|
|
style = MaterialTheme.typography.labelMedium,
|
|
color = if (isValid) Color(0xFF4CAF50) else Color(0xFFf44336)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Step 3: Implement Feature
|
|
```
|
|
1. Create input field or button following pattern
|
|
2. Add state variable (var feature by remember { mutableStateOf(...) })
|
|
3. Add validation logic
|
|
4. Add event handler
|
|
5. Update submit validation if needed
|
|
6. Test with existing flows
|
|
```
|
|
|
|
### Step 4: Update Navigation (if new screen)
|
|
```kotlin
|
|
// In MainActivity.kt
|
|
|
|
composable("new_screen") {
|
|
if (currentNpm != null && currentNama != null) {
|
|
NewScreen(
|
|
npm = currentNpm!!,
|
|
nama = currentNama!!,
|
|
onNavigateBack = {
|
|
navController.navigateUp()
|
|
}
|
|
)
|
|
}
|
|
}
|
|
|
|
// Add route from existing screen:
|
|
onNewFeature = {
|
|
navController.navigate("new_screen")
|
|
}
|
|
```
|
|
|
|
### Step 5: Test Feature
|
|
```
|
|
1. Unit test (if applicable)
|
|
2. Integration test with existing screens
|
|
3. Navigation test
|
|
4. Data persistence test
|
|
5. Error handling test
|
|
```
|
|
|
|
### Step 6: Document Feature
|
|
```
|
|
Create/Update:
|
|
1. QUICK_REFERENCE_UI.md - add to feature list
|
|
2. New feature doc (like MATA_KULIAH_FEATURE.md)
|
|
3. TESTING_GUIDE.md - add test cases
|
|
4. IMPLEMENTATION_CHECKLIST.md - update status
|
|
5. MOCKUP_IMPLEMENTATION.md - if visual change
|
|
```
|
|
|
|
---
|
|
|
|
## 🎨 UI/Design Update Procedure
|
|
|
|
### Step 1: Identify What Changed
|
|
```
|
|
What needs to change?
|
|
[ ] Colors (#2E7D32, #FFFFFF, #4CAF50, #f44336)
|
|
[ ] Spacing (12dp, 16dp, 24dp)
|
|
[ ] Font sizes
|
|
[ ] Border radius
|
|
[ ] Icons
|
|
[ ] Layout structure
|
|
```
|
|
|
|
### Step 2: Update Colors Globally
|
|
```kotlin
|
|
// If primary color needs change:
|
|
// Search for: Color(0xFF2E7D32)
|
|
// Replace with: Color(0xFFNEWCOLOR)
|
|
|
|
// Files to check:
|
|
// - All screen files
|
|
// - MainActivity.kt
|
|
// - Any theme files
|
|
```
|
|
|
|
### Step 3: Update Typography
|
|
```kotlin
|
|
// If font size needs change:
|
|
// Example: fontSize = 14.sp → fontSize = 16.sp
|
|
|
|
// Common sizes used:
|
|
// Button text: 14sp (bold)
|
|
// Labels: 12-14sp
|
|
// Titles: 20-28sp
|
|
// Body: 14-16sp
|
|
```
|
|
|
|
### Step 4: Update Spacing
|
|
```kotlin
|
|
// If padding needs change:
|
|
// Example: padding = 16.dp → padding = 20.dp
|
|
|
|
// Common spacing:
|
|
// Inside cards: 12dp
|
|
// Between items: 12-16dp
|
|
// Page margins: 24dp
|
|
// Border radius: 8-12dp
|
|
```
|
|
|
|
### Step 5: Verify Consistency
|
|
```
|
|
After changes, check:
|
|
[ ] All screens have same primary color
|
|
[ ] All buttons same size and style
|
|
[ ] All cards same padding and radius
|
|
[ ] Text hierarchy consistent
|
|
[ ] Icons same size throughout
|
|
[ ] Colors match design system
|
|
```
|
|
|
|
### Step 6: Update Documentation
|
|
```
|
|
Update these files:
|
|
1. MOCKUP_IMPLEMENTATION.md - design specs
|
|
2. UI_IMPLEMENTATION_SUMMARY.md - color section
|
|
3. QUICK_REFERENCE_UI.md - visual changes
|
|
4. TESTING_GUIDE.md - visual test cases
|
|
```
|
|
|
|
---
|
|
|
|
## 📦 Database/Backend Changes
|
|
|
|
### If Mata Kuliah Storage Changes
|
|
```kotlin
|
|
// File: Attendance.kt
|
|
data class Attendance(
|
|
val npm: String,
|
|
val nama: String,
|
|
val latitude: Double,
|
|
val longitude: Double,
|
|
val timestamp: Long,
|
|
val fotoBase64: String,
|
|
val mataPelajaran: String, // Already exists!
|
|
val status: String
|
|
)
|
|
|
|
// No changes needed if field already exists
|
|
```
|
|
|
|
### If New Field Added
|
|
```kotlin
|
|
// 1. Update Attendance model
|
|
data class Attendance(
|
|
// ... existing fields ...
|
|
val mataPelajaran: String,
|
|
val newField: String // ← Add new field
|
|
)
|
|
|
|
// 2. Update Room DAO
|
|
// 3. Update AttendanceRepository
|
|
// 4. Update N8N webhook format
|
|
// 5. Update database migration (if needed)
|
|
// 6. Update TESTING_GUIDE.md
|
|
```
|
|
|
|
### If N8N Integration Changes
|
|
```
|
|
1. Update repository.sendToN8n() in AttendanceRepository.kt
|
|
2. Update JSON structure in N8N_WEBHOOK_GUIDE.md
|
|
3. Test with actual N8N endpoint
|
|
4. Verify data arrives correctly
|
|
5. Update documentation
|
|
```
|
|
|
|
---
|
|
|
|
## 🧪 Testing After Changes
|
|
|
|
### Minimal Testing (Bug Fix)
|
|
```
|
|
1. Test affected screen
|
|
2. Test navigation from/to affected screen
|
|
3. Test data related to fix
|
|
4. Follow specific test case from TESTING_GUIDE.md
|
|
```
|
|
|
|
### Standard Testing (Small Feature)
|
|
```
|
|
1. Test new feature functionality
|
|
2. Test integration with existing features
|
|
3. Test navigation flow
|
|
4. Test data persistence
|
|
5. Follow related test cases from TESTING_GUIDE.md
|
|
```
|
|
|
|
### Comprehensive Testing (Large Feature)
|
|
```
|
|
1. Follow all test cases in TESTING_GUIDE.md
|
|
2. Test all navigation paths
|
|
3. Test all data flows
|
|
4. Test error conditions
|
|
5. Test on multiple device sizes
|
|
6. Test on multiple Android versions
|
|
```
|
|
|
|
---
|
|
|
|
## 📝 Documentation Update Checklist
|
|
|
|
After any change:
|
|
```
|
|
[ ] Updated relevant code file(s)
|
|
[ ] Updated QUICK_REFERENCE_UI.md (if major change)
|
|
[ ] Updated specific feature doc (if applicable)
|
|
[ ] Updated TESTING_GUIDE.md (add/remove test cases)
|
|
[ ] Updated IMPLEMENTATION_CHECKLIST.md (status)
|
|
[ ] Updated MOCKUP_IMPLEMENTATION.md (if visual change)
|
|
[ ] Updated DOCUMENTATION_INDEX.md (if new doc)
|
|
[ ] Added comments in code
|
|
[ ] Updated this file if new pattern
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 Deployment Process
|
|
|
|
### Before Deployment
|
|
```
|
|
[ ] All tests pass
|
|
[ ] No compilation errors
|
|
[ ] No warnings
|
|
[ ] Code review approved
|
|
[ ] Documentation updated
|
|
[ ] QA sign-off received
|
|
[ ] Mata kuliah feature verified (if changed)
|
|
```
|
|
|
|
### Deployment Steps
|
|
```
|
|
1. Create release branch: git checkout -b release/v1.1.0
|
|
2. Update version number (if applicable)
|
|
3. Create release notes
|
|
4. Tag release: git tag v1.1.0
|
|
5. Deploy to production
|
|
6. Monitor for issues
|
|
7. Document any issues
|
|
```
|
|
|
|
### Post-Deployment
|
|
```
|
|
[ ] Monitor for user reports
|
|
[ ] Check N8N webhook receiving data correctly
|
|
[ ] Verify mata kuliah data saved in database
|
|
[ ] Check server logs for errors
|
|
[ ] Gather user feedback
|
|
[ ] Plan next improvements
|
|
```
|
|
|
|
---
|
|
|
|
## 📚 Documentation File Reference
|
|
|
|
When making changes, which file to update:
|
|
|
|
| Change Type | Primary | Secondary |
|
|
|------------|---------|-----------|
|
|
| New screen | QUICK_REFERENCE_UI, UI_IMPLEMENTATION_SUMMARY | MOCKUP_IMPLEMENTATION |
|
|
| New feature | Feature doc (new or existing) | TESTING_GUIDE, QUICK_REFERENCE_UI |
|
|
| Bug fix | Code only | None (unless behavior change) |
|
|
| Color change | UI_IMPLEMENTATION_SUMMARY | All screen docs |
|
|
| Layout change | UI_IMPLEMENTATION_SUMMARY | MOCKUP_IMPLEMENTATION |
|
|
| Navigation | QUICK_REFERENCE_UI | UI_IMPLEMENTATION_SUMMARY |
|
|
| Mata kuliah change | MATA_KULIAH_FEATURE | TESTING_GUIDE |
|
|
| Testing change | TESTING_GUIDE | None |
|
|
|
|
---
|
|
|
|
## 🔗 Quick Links
|
|
|
|
Documentation Files:
|
|
- Main entry: `DOCUMENTATION_INDEX.md`
|
|
- Quick info: `QUICK_REFERENCE_UI.md`
|
|
- Design specs: `UI_IMPLEMENTATION_SUMMARY.md`
|
|
- Feature docs: `MATA_KULIAH_FEATURE.md`
|
|
- Testing: `TESTING_GUIDE.md`
|
|
- Status: `IMPLEMENTATION_CHECKLIST.md`
|
|
|
|
Code Files:
|
|
- Login: `presentation/screens/LoginScreen.kt`
|
|
- Menu: `presentation/screens/MenuScreen.kt`
|
|
- Attendance: `presentation/screens/AttendanceScreen.kt`
|
|
- Success: `presentation/screens/SuccessScreen.kt`
|
|
- Navigation: `MainActivity.kt`
|
|
|
|
---
|
|
|
|
## 💡 Tips for Maintainers
|
|
|
|
### When Making Changes
|
|
```
|
|
✅ DO:
|
|
- Read existing code first
|
|
- Follow established patterns
|
|
- Update documentation
|
|
- Test thoroughly
|
|
- Keep changes focused
|
|
- Add helpful comments
|
|
- Consider backward compatibility
|
|
|
|
❌ DON'T:
|
|
- Make random changes
|
|
- Skip testing
|
|
- Ignore documentation
|
|
- Break existing features
|
|
- Change colors randomly
|
|
- Remove comments
|
|
- Make massive changes at once
|
|
```
|
|
|
|
### Code Review Checklist
|
|
```
|
|
[ ] Code follows existing patterns
|
|
[ ] Color scheme consistent
|
|
[ ] Navigation correct
|
|
[ ] Data properly handled
|
|
[ ] Error cases handled
|
|
[ ] Comments clear
|
|
[ ] Documentation updated
|
|
[ ] Tests pass
|
|
[ ] No breaking changes
|
|
```
|
|
|
|
---
|
|
|
|
## 📞 Troubleshooting Maintenance Issues
|
|
|
|
### Issue: Color looks wrong
|
|
**Check**:
|
|
1. Hex code correct (#2E7D32)?
|
|
2. Alpha value correct (.copy(alpha = 0.1f))?
|
|
3. Used in right place (button, card, background)?
|
|
|
|
### Issue: Feature doesn't work
|
|
**Check**:
|
|
1. State variable initialized?
|
|
2. Event handler attached?
|
|
3. Navigation route correct?
|
|
4. Data passed correctly?
|
|
|
|
### Issue: Navigation broken
|
|
**Check**:
|
|
1. Route name spelled correctly?
|
|
2. onNavigate callback correct?
|
|
3. NavController reference correct?
|
|
4. Pop-up behavior correct?
|
|
|
|
### Issue: Documentation mismatch
|
|
**Check**:
|
|
1. Code matches doc?
|
|
2. Changes documented?
|
|
3. Test cases updated?
|
|
4. All files consistent?
|
|
|
|
---
|
|
|
|
## 📋 Version History
|
|
|
|
| Version | Date | Changes | Status |
|
|
|---------|------|---------|--------|
|
|
| 1.0.0 | 2026-01-14 | Initial implementation | ✅ |
|
|
| Future | TBD | Enhancement ideas | 📋 |
|
|
|
|
---
|
|
|
|
## 🎓 Learning Resources for Maintainers
|
|
|
|
### Kotlin & Compose
|
|
- Official Kotlin docs: https://kotlinlang.org/docs/
|
|
- Jetpack Compose: https://developer.android.com/jetpack/compose
|
|
- Material 3: https://m3.material.io/
|
|
|
|
### Android Development
|
|
- Android Developers: https://developer.android.com/
|
|
- Navigation: https://developer.android.com/guide/navigation
|
|
- Coroutines: https://kotlinlang.org/docs/coroutines-overview.html
|
|
|
|
### Design Patterns
|
|
- MVVM: Model-View-ViewModel architecture
|
|
- Repository: Separation of concerns
|
|
- Dependency Injection: Loose coupling
|
|
|
|
---
|
|
|
|
**Last Updated**: January 14, 2026
|
|
**Maintained by**: Development Team
|
|
**Status**: Ready for use
|
|
|