A demo Android application that lets a service technician configure lock parameters on a double‑door (primary & secondary leaves). Built with Kotlin, Jetpack Compose, Hilt DI, Room persistence, Clean Architecture and MVVM.
-
List & Search
– Show all lock parameters for the selected door leaf
– Filter by parameter name or current value
– Pull‑to‑refresh to re‑fetch from network (onfeature/networkbranch) -
Edit Screen
– Edit each parameter for both Primary & Secondary doors in one screen
– Discrete parameters (radio buttons) and range parameters (integer slider)
– Save per‑leaf values locally in Room -
Offline Support
– On themainbranch, JSON is loaded fromassets/lock_config.json
– On thefeature/networkbranch, JSON is fetched via Retrofit, cached in Room, and subsequent loads come from the database
We follow Clean Architecture & MVVM, split into three layers
-
Dependency Injection: Hilt modules under
di/
–DatabaseModuleprovides the singletonAppDatabase
–LockConfigDatabaseModuleprovidesParamValueDao
–NetworkModule(onfeature/network) provides Retrofit & API
–RepositoryModulebindsLockConfigRepositoryImpltoLockConfigRepository -
Reactive streams via KotlinFlow for definitions, saved values, and filtered results.
-
Compose UI with state hoisting, reusable components, and previews.
-
main
– Loads the lock-configuration JSON fromapp/src/main/assets/lock_config.json
– Parses with Gson → Domain models → seeds Room on first load
– All reads & filters come from Room & in‑memory definitions -
featurenetwork
– AddsLockConfigApi&NetworkModule
– On startup (and on pull‑to‑refresh) fetches JSON from a real API
– Clears & re‑seeds Room with defaults from the network response
– Subsequent reads come from Room database until next refresh
Prerequisites:
- Android Studio Flamingo or later
- Kotlin 1.9.0+, Android Gradle Plugin 8.1+
- minSdk 29, targetSdk 36
Clone & run: git clone https://github.com/pandimani17/assatask.git