An android app built using Kotlin that consumes NASA's API to Mars photos captured by Curiosity

MARS ROVER PHOTOS

An android app built using Kotlin that consumes NASA’s API to Mars photos captured by Curiosity, Spirit and Opportunity rovers. It has been built following Clean Architecture Principle, Repository Pattern, MVVM Architecture in the presentation layer as well as Jetpack components.

Prerequisite

To run the app from Android Studio on your local machine you’ll need to add api_key value in your local.properties file

The API key can be generated from this link.

Architecture

The app is split into 3 layer:

1. Domain

This is the core layer of the application. The domain layer is independent of any other layers thus domain models and business logic can be independent from other layers.This means that changes in other layers will have no effect on domain layer eg. screen UI (presentation layer) or changing database (data layer) will not result in any code change in domain layer.

Components of domain layer include:

  • Models: Defines the core structure of the data that will be used within the application.

  • Repositories: Interfaces used by the data sources classes implemented in the data layer.

2. Data

The data layer is responsibile for selecting the proper data source for the domain layer. It contains the implementations of the repositories declared in the domain layer.

Components of data layer include:

  • Models: Network models eg. RoverDto
  • Repositories: Responsible for exposing data to the domain layer.
  • Mappers: They perform data transformation between domain and dto models.
  • Network: This is responsible for performing network operations eg. defining API endpoints using Ktor.
  • Data Sources: Responsible for deciding which data to fetch from data sources eg. network or cache.

3. Presentation

The presentation layer contains components involved in displaying information to the user. The main part of this layer are the composables(activity and screens) and viewmodels.

Tech Stack

Libraries

UI

  • Koin – Dependency Injection framework
  • Compose – Modern toolkitfor building native UI.
  • Palette API – Generate color palette from images
  • Coil – Load images from network source.
  • Compose Navigation – Navigation to composables.

Data

Testing

  • jUnit
  • Mockk – Mocking library for Kotlin.
  • Robolectric – Framework used to quickly and reliably run unit tests quick using the JVM

Plugins

  • KtLint – Kotlin linter.
  • Detekt – Static code analysis tool for the Kotlin programming language
  • KotlinX Kover – Gradle plugin for Kotlin code coverage tools.

Extras

This projects uses GitHub actions to run a build and execute all tests when creating a new PR.

Screenshots

GitHub

View Github