You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
View a list of all pokemon species (includes name and image)
View specific details of a species by selecting from the list
Specific details include:
Name
Image
Description
Evolves to: Includes the name and image of the first species it evolves to as indicated from the evolution chain. In case a species has reached its final form in the evolution chain, it will be mentioned so.
Capture rate difference: Is the difference between the capture rate of the current species and the species it evolves to. A positive difference is highlighted in red while a negative difference is highlighted in green. In case a species has reached its final form, the difference will just be stated as 0.
Non-functional features:
The species list supports offline viewing till the last loaded page
Portrait and landscape support
Dark theme support
Technical specifications:
Programming language: Kotlin
Architecture: MVVM + RxJava
DI implemented using Hilt
Jetpack components:
Paging3 using RemoteMediator (To load data from network and cache in local db)
Room for local persistence
Navigation component for navigating between fragments
Third party SDKs:
Coil for image loading
Retrofit for networking
Lottie for animations
Junit4 + Mockk for testing
Design notes:
RecyclerView with GridlayoutManager to display the list of species
I used a DialogFragment to display the details of the species. The intention behind that is to emulate a physical pokemon card. (The UI of this layout can be further improved to achieve the goal)
I used a pokemon related lottie animation as a loader when the details of the species are loading to add an element of fun.
Instrumented test for RemoteMediator implementation
Unit tests for SpeciesDetailViewModel class and Mapper classes
TODOs:
Local caching of species details to avoid multiple network calls
Extend test coverage to handle additional cases
Improve design layouts
Potential new functionalities
Ability to search for species
Ability to sort based on different metrics of species like capture rate
Ability to mark species as favorite
Java Version
To run the project on Android Studio, you will need to be using the JDK 17. You can change the JDK via Preferences > Build, Execution, Deployment > Build Tools > Gradle > Gradle JDK.