Mini Pokedex is a android app that uses Pokémon API to show a list of Pokémons and their characteristics
- View a list of the first 100 Pokémon
- Able to save Pokémon as favorite
- View more info about Pokémon and its basics stats
- Increase the test coverage
- Add static code analysis
- Add CI/CD
Home (Dark Theme) | Home (Light Theme) |
---|---|
![]() |
![]() |
Saved Pokémon (Dark Theme) | (Light Theme) |
---|---|
![]() |
![]() |
Pokémon info (Dark Theme) | (Light Theme) |
---|---|
![]() |
![]() |
Tech Tools | Usage/Purpose |
---|---|
Kotlin | Language |
Jetpack Compose | UI creation library |
Compose Navigation | Navigate between Compose Screen |
Compose Paging | Managing multiple pages of data |
Coil | 🖼️ Image Loading Library |
Coroutines | 🧵 Asynchronous Programming |
StateFlow | Observable Data and state holder |
Dependency injection with Hilt | 💉 Dependency Injection Library |
Retrofit | 🌐 Used for Networking |
OkHTTP | 🌐 HTTP Client required by Retrofit Library for Networking |
Kotlinx Serialization | 🌐 Use to serialize and deserialize Kotlin objects to JSON |
Kotlin Gradle | ⚙️ All the gradle files are written in pure kotlin |
AndroidX | Android library for core functionalities |
ViewModel | Manage data and UI State in lifecycle-aware fashion |
Room DB | 💾 For local data storage |
Testing
Testing Tools | Usage/Purpose |
---|---|
Junit | Unit Testing |
Mockk | Data Mocking |
Truth | Unit Testing |
Turbine | Flow Testing |
Other Tools/Project setup
Tools | Usage/Purpose |
---|---|
Gradle secrets plugin | A Gradle plugin for providing your secrets to your Android project |
Hilt(DI) | Dependency Injection Library |
Kotlin Symbol Processing (KSP) | code generation for Room and Hilt libraries |
Timber | For local Logging |
Lottie Compose | Icon and images animations |
Gradle version catalogs | Gradle Dependencies management |
This App is based on the MVVM architecture and the Repository pattern, which follows the Google's official architecture guidance.
- Each layer follows unidirectional event/data flow; the UI layer emits user events to the data layer, and the data layer exposes data as a stream to other layers.
The project is modularized and divided into several modules: checkout Common modularization patterns
:app
- The main Android app module for phone devices.:core-data
- Android library for the data layer acts as data mediator for local and remote.:core-database
- Android library for the local Room database layer.:core-model
- Android library containing global app models.:core:ui
- Android library with common Jetpack Compose UI widgets (Shared UI components):core-network
- Android library purely for networking and serializing responses:core-testing
- Android library containing testing utilities.:test-app
- Test-only module.
The Project uses the following api :
- Pokémon API for pokemon data and info and Poke API sprites for images, PokeAPI provides a RESTful API interface to highly detailed objects built from thousands of lines of data related to Pokémon
in your local.properties
you will need to add the urls for the two apis
#Insert at ~/local.properties
#Pokémon API
POKE_API_BASE_URL=https://pokeapi.co/api/v2/
POKE_API_ICONS_URL=https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/
This project uses the Hilt for dependency Injection. After opening this project in your Android Studio you might get some error which is due unavailability of a few classes. You need to make a project
or try to build the project, this will generate all the required classes for Hilt.
Environment
- Android Studio Hedgehog | 2023.1.1
- Build #AI-231.9392.1.2311.11076708, built on November 9, 2023
- JDK 17
Mini Pokedex
Copyright (c) 2023 Awesome Jim (https://github.com/AwesomeJim/MiniPokedex/).
This App is distributed under the terms of the Apache License (Version 2.0).
See the [license](https://github.com/AwesomeJim/MiniPokedex/blob/main/LICENSE) for more information.