TempelhofTour is Android app, which implements three user stories:
- As a potential traveler, I want to see a list of short previews of reviews for one of our most popular Berlin tours.
- As a potential traveler, I want to just scroll down to read all the reviews for one of our most popular Berlin tours.
- As a potential traveler, I want to click to a list item and see the full review with details on another screen.
Here are the prerequisites for running the sdk and example app in development and production:
- Install Android Studio 4.1+.
- JDK: A copy of the latest OpenJDK comes bundled with Android Studio. Separate JDK can be used as well. See documentation for more details.
This repo contains app and buildScr projects:
- app - Android app, which loads reviews as user scrolls and display review details on click.
- buildScr - centralizes dependencies management of libs and plugins, which are used by the app.
Key facts about project set-up and architecture:
- Gradle build is written in Kotlin DSL.
- Project follows Clean Architecture principles: e.g. business logic is separated from implementation details of network or db layer, etc.
- Project uses MVVM pattern in order to separate UI logic from app business logic: e.g. UI layer (Fragment) observes and renders data from view model using Kotlin Flow and Jetpack's ViewModel.
- Networking is implemented using Retrofit.
- DB layer is implemented using Jetpack's Room Persistence Library.
- Batch data loading is implemented using Jetpack's Paging 3 lib.
- Dependency Injection is implemented using Hilt.
- In-app navigation is implemented using Navigation component.
- Asynchronous operations are implemented off UI thread using Kotlin Coroutines.
- Image loading is implemented using [Glid]e(https://bumptech.github.io/glide/).
Unit tests are implemented using:
Should project be further developed - implementation of following items should be considered:
- Better UI/UX - to find-out proper solution together with designers team.
- UI/integration tests (keep in mind about possible migration to Jetpack Compose)
- Implementation of "advanced" Clean Architecture principles: use-cases, moving business logic to separate module, etc.
- Decide if app should show reviews for more than one Tour. If it's not required - drop dynamic tour id functionality.
- More unit tests