A paginated book discovery app built twice — once with the classic Fragments/XML view system, once with Jetpack Compose — on top of the same Clean Architecture core, to demonstrate both UI paradigms on identical business logic.
main |
Fragments + XML, ViewBinding, RecyclerView + DiffUtil |
compose-ui |
Jetpack Compose, Navigation-Compose, declarative screens |
Both branches share: domain layer, use cases, repositories, Hilt modules, Room-backed favorites.
- Infinite-scroll paginated book list from a remote API
- Book detail screen
- Offline favorites (Room database)
- Image loading (Glide)
- Splash → List → Detail navigation flow
Clean Architecture, 3 layers:
presentation/ → ViewModels, Fragments or Composables
domain/ → UseCases, repository interfaces, models
data/ → Repository impls, remote data source, local DB (Room)
- DI: Hilt (
AppModule,NetworkModule,DatabaseModule,ViewModelModule) - Concurrency: Kotlin Coroutines + Flow
- Testing: JUnit + coroutine test rules for use cases and repositories, instrumented tests for DB and UI flow
Kotlin Jetpack Compose Coroutines Hilt Room Retrofit Glide JUnit
git clone https://github.com/Tabishahmad/BookList-Android.git
# XML/Fragments version
git checkout main
# Compose version
git checkout compose-uiOpen in Android Studio and run.
Originally built as a take-home assignment, then extended with a Compose rewrite and a favorites feature to compare the two Android UI approaches on the same domain/data layer — the kind of migration work that comes up in real production codebases moving from Views to Compose.