Skip to content

Android app that helps you learn about all the Pokemon species out there

Notifications You must be signed in to change notification settings

terrelewis2/pokemon

Repository files navigation

APK link

Screenshots

Feature Light Theme Dark Theme
Species List
Species Detail

Error/Loader States

Feature Screenshot
Empty Error State
Footer Error State
Footer Loading State

Description:

  • Name: Pokemon Species
  • Functional features:
    • 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.
  • I generated a material theme file using https://m3.material.io/theme-builder#/custom to support both Light and Dark modes.

Test coverage:

  • 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.

About

Android app that helps you learn about all the Pokemon species out there

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages