This project is a test assignment for the Android Developer position. The goal of the application is to display bestseller book categories and book details retrieved from the New York Times Developer Network Books API
Upon launching the application, users can:
- See a Splash Screen that checks for an active session
- If no session is found, be prompted to sign in with Google via Firebase Authentication
- Upon successful login, be redirected to the main screen
Then users can:
- View a list of bestseller book categories on the main screen
- Tap a category to see a list of books within that category
- View book details such as title, description, author, publisher, image, and rank
- Click the “Buy” button to open a dialog with a list of online bookstores
- Select a store to open its website directly in an in-app browser (Android Chrome Tabs)
- Swipe down to refresh the book list from the network
If the network is unavailable, the app automatically falls back to data from the local Room database. Users are notified of their connection status accordingly.
Important
To run the application successfully, you must provide agoogle-services.json
file at the following path:app/google-services.json
This file is required for Firebase Authentication (Google Sign-In) to work.
It is not included in the repository and must be added manually.
- Mobile app: Android 8.0 (API level 26)
The project follows the Clean Architecture approach and the MVI architectural pattern.
It is structured as a multi-module, offline-first application, designed with scalability and
maintainability in mind.
The codebase adheres to key software engineering principles: DRY, KISS, SOLID, and Separation of
Concerns.
- Kotlin
- Kotlin Coroutines
- Kotlin Flows
- Multi-module project structure
- Gradle Convention Plugin
- MVI Architecture
- Jetpack Compose
- Material 3
- Nested Type-safe Jetpack Compose Navigation
- Koin
- Ktor Client
- Room
- Coil
- Android Splash Screen API
- Connectivity Manager
- Firebase Authentication (Google Sign-In)
- Android Custom Chrome Tabs
- Pull To Refresh
- Timber
- Portrait / Landscape screen orientation support
- Animated screen transitions
- Light / Dark modes