My Pokedex is a demo app based on Clean Architecture (Repository pattern) and MVI pattern with Uniflow
- Coroutines + Flow for asynchronous.
- Uniflow Simple Unidirectional Data Flow.
- Koin for DI.
- Moshi JSON library.
- Retrofit2 & OkHttp3 for the REST APIs and paging network data.
- Glide, GlidePalette for loading images.
- Paging 3 for display pages of data from a larger dataset from local storage or over network.
- Room persistence library
- Why-Not-Image-Carousel for slidershow images
- Offline
- Dark Mode support
- Unit test
- Android 12 splash screen support
- New Android Jetpack Paging
- For launch all Unit Tests use
gradlew testDebugUnitTest
- For launch all Instrumental Tests use
gradlew connectedAndroidTest
There are 3 layer in this app. App module import all layer just for resolve the DI in Application Class
Presentation Layer | Domain Layer | Data Layer |
---|---|---|
ui/view | entity | data source, dto |
viewmodel | usecase | repository implementation |
ui model | repository interface | library config(retrofit/room) |
Presentation Layer | Something in Between | Domain Layer | Data Layer | Outer data layer |
---|---|---|---|---|
PokemonDetailActivity & PokemonDetailViewModel | <- GetPokemonDetailUseCase -> | <- PokemonRepository (interface) -> | <- PokemonRepositoryImplementation | RemoteDataSource & CacheDataSource |
- Design is ispired from Pokedex App design