@@ -19,7 +19,7 @@ A modern Android application demonstrating clean architecture (MVVM), Jetpack Co
1919| Reactive & Concurrency | Kotlin Coroutines, StateFlow |
2020| Architecture | MVVM + Navigation Compose |
2121| Dependency Injection | Manual (ViewModelFactory) |
22- | Build System | Gradle 8.9 , Version Catalog |
22+ | Build System | Gradle 8.13 , Version Catalog |
2323| Minimum SDK | API 26 (Android 8.0) |
2424| Target SDK | API 35 (Android 15) |
2525| Testing | JUnit 5, MockK, Turbine |
@@ -36,18 +36,20 @@ Fun-Android/
3636├── services/
3737│ ├── network/ # Network service interface + mock implementation
3838│ ├── favorites/ # Favorites service (SharedPreferences-backed)
39- │ └── search/ # Search service (delegates to network)
39+ │ ├── search/ # Search service (delegates to network)
40+ │ └── ai/ # AI summary service
4041└── features/
42+ ├── login/ # Login screen
4143 ├── home/ # Home tab (item list + favorites)
42- ├── search/ # Search tab (debounced query)
43- ├── items/ # Favorites tab (filtered items)
44- ├── profile/ # Profile tab (current user )
44+ ├── search/ # Search (debounced query)
45+ ├── items/ # Items tab (filtered items)
46+ ├── profile/ # Profile screen (via top-bar icon )
4547 ├── profile-detail/ # Profile detail screen
4648 ├── detail/ # Item detail screen
47- └── settings/ # Settings tab (feature flags )
49+ └── settings/ # Settings tab (feature toggles )
4850```
4951
50- 14 modules total. All modules except ` app ` are Android library modules.
52+ 16 modules total. All modules except ` app ` are Android library modules.
5153
5254** Dependency Hierarchy:**
5355```
@@ -69,9 +71,10 @@ Services are created lazily in `MainActivity` and passed through the composable
6971
7072``` kotlin
7173// MainActivity.kt
72- private val networkService by lazy { DefaultNetworkService () }
74+ private val networkService by lazy { DefaultNetworkService (simulateErrors = appSettings.simulateErrorsEnabled ) }
7375private val favoritesService by lazy { DefaultFavoritesService (sharedPreferences) }
7476private val searchService by lazy { DefaultSearchService (networkService) }
77+ private val aiService by lazy { DefaultAiService () }
7578```
7679
7780### Screen/Content Split
@@ -107,8 +110,8 @@ _state.update { current ->
107110- ** 3-Tab Navigation** : Home, Items, Settings (Profile via top-bar icon)
108111- ** Detail Screens** : Item detail with favorite toggle, profile detail with back navigation
109112- ** Reactive Favorites** : SharedPreferences-backed, observed via StateFlow across all screens
110- - ** Debounced Search ** : 300ms debounce with ` distinctUntilChanged ` and ` flatMapLatest `
111- - ** Feature Flags ** : Runtime toggles in Settings (UI-only for demo)
113+ - ** Feature Toggles ** : Runtime flags that control app behavior (featured carousel, error simulation, AI summary)
114+ - ** AI Summary ** : On-device summarisation on item detail screen
112115- ** Material 3 Theming** : Dynamic color support, light/dark mode
113116- ** Error Handling** : Loading/error/content states with retry support
114117- ** Pull-to-Refresh** : On applicable screens
@@ -128,7 +131,7 @@ NavHost
128131## Testing
129132
130133- ** Unit Tests** : JUnit 5 + MockK + Coroutines Test
131- - ** 12 tests** across 3 ViewModels (Home, Detail, Settings)
134+ - ** 53 tests** across 7 ViewModels
132135- ** Coroutine testing** : ` StandardTestDispatcher ` + ` advanceUntilIdle `
133136
134137``` bash
@@ -167,7 +170,7 @@ cd Fun-Android
167170This project demonstrates ** AI-assisted Android development** using Claude Code.
168171
169172Architecture and patterns designed by developer. Claude assisted with:
170- - Full project scaffolding (14 modules)
173+ - Full project scaffolding (16 modules)
171174- Feature implementation
172175- Code review (5-agent parallel review)
173176- Bug fixes (atomic StateFlow, nav safety, padding)
0 commit comments