Android Basic Project (case: Movie App) built with simple Clean Architecture that connects to TMDB API (themoviedb.org)
- Jetpack Navigation with single Activity
- Coroutines and Flow
- Koin as Dependency Injection
- Room as Persistence storage
- Paging v3 for pagination list
- Retrofit as remote api service
- Mockito (testing)
- Espresso (ui testing)
Globally the project has the following top level packages:
core: Contains models, repositories and all the related data accessing and manipulating objects.di: Dependency module (App Level) provided by Koinpresentation: Contains Views (Activity, Fragment), Adapter, ViewModel.utils: Contains helper extension.
- If there’s new feature with new remote or local data source, create feature package inside
presentationpackage. - Define new implementation of new Api inside
ApiServiceandRemoteDataSourceif any. - If there's new local data, create new Entity and Dao classes and then define new implementation inside
LocalDataSource. - If there's new Repository, define singleton/factory object inside
core/di/CoreModule. - Create Unit Test inside
src/testand instrumented or UI test insidesrc/androidTest.
- Modularization
- Implement UseCase when the project is more complex
- Better UI TestCase, especially for testing navigation