A modern Android application for tracking gifts, built with Jetpack Compose, Room, Hilt, and following Clean Architecture principles.
- Gift Management: Add, view, edit, and delete gifts
- Status Tracking: Track gift lifecycle (💡 Idea → 🛒 Purchased → 🎀 Wrapped → 🎁 Given)
- Occasion Support: Categorize gifts by occasion (Birthday, Christmas, Wedding, etc.)
- Smart Filtering: Filter by status, search by name or recipient
- Persistent Storage: Room database for reliable data persistence
- Modern UI: Built with Jetpack Compose and Material 3 design
- Smooth Animations: Beautiful transitions and item animations
- Unit Tested: Comprehensive test coverage for ViewModels
This project follows Clean Architecture with MVVM pattern:
app/
├── data/
│ ├── local/
│ │ ├── GiftEntity.kt # Room entity
│ │ ├── GiftDao.kt # Data Access Object
│ │ ├── GiftDatabase.kt # Room database
│ │ └── Converters.kt # Type converters
│ └── repository/
│ └── GiftRepositoryImpl.kt
├── domain/
│ ├── model/
│ │ └── Gift.kt # Domain model
│ └── repository/
│ └── GiftRepository.kt # Repository interface
├── di/
│ ├── DatabaseModule.kt # Hilt database module
│ └── RepositoryModule.kt # Hilt repository binding
├── viewmodel/
│ ├── GiftListViewModel.kt
│ ├── GiftFormViewModel.kt
│ └── GiftDetailViewModel.kt
├── ui/
│ ├── screens/
│ │ ├── GiftListScreen.kt
│ │ ├── GiftFormScreen.kt
│ │ └── GiftDetailScreen.kt
│ ├── state/
│ │ └── GiftUiState.kt # UI state classes
│ └── theme/
└── navigation/
└── NavGraph.kt
| Category | Technology |
|---|---|
| Language | Kotlin |
| UI | Jetpack Compose + Material 3 |
| Architecture | MVVM + Clean Architecture |
| DI | Hilt |
| Database | Room |
| Async | Kotlin Coroutines + Flow |
| Navigation | Navigation Compose |
| Testing | JUnit + Coroutines Test |
| Logging | Timber |
- Android Studio Hedgehog (2023.1.1) or newer
- JDK 17 or higher
- Android SDK 35+
-
Clone the repository:
git clone https://github.com/Arafo/Gift-Tracker-Code-Kata.git
-
Open in Android Studio
-
Sync Gradle and run on emulator or device
# Build debug APK
./gradlew assembleDebug
# Run unit tests
./gradlew test
# Run all checks
./gradlew check- Displays all gifts with status indicators
- Search and filter functionality
- Quick status advancement
- Statistics summary
- Form with validation
- Status and occasion selection
- Optional notes field
- Full gift information
- Status progress visualization
- Edit and delete options
💡 Idea → 🛒 Purchased → 🎀 Wrapped → 🎁 Given
- 🎂 Birthday
- 🎄 Christmas
- 💕 Anniversary
- 💒 Wedding
- 🎓 Graduation
- ❤️ Valentine's Day
- 👩 Mother's Day
- 👨 Father's Day
- 🎁 Other
The project includes comprehensive unit tests:
# Run all unit tests
./gradlew test
# Run specific test class
./gradlew test --tests "GiftListViewModelTest"Test coverage includes:
- ViewModel state management
- Filter and search logic
- Gift model behavior
- Validation logic
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License.
Built with ❤️ using Jetpack Compose