Skip to content

Tonnie-Dev/LaunchPad

Repository files navigation


Logo

LaunchPad

Android App for Space Events

Screenshots ~ Deployment ~ Architecture ~ API Reference ~ Tech Stack ~ Authors ~ Contributing

LaunchPad shows upcoming rocket launches and previous rocket launches. It is backed up by data from the Launch Library API a product by The Space Devs with an up-to-date database of Spaceflight events.

Get it on Google Play

📸 Screenshots 📸

This Project uses Material 2, which is a part of Google's open source design system for inituitive and consistent design patterns.

              

📥 Deployment 📥

These are the key parameters for LaunchPad app:

Parameter Value
compileSdk 33
targetSdk 33
minSdk 26
composeVersion 1.3.1
kotlinVersion 1.7.20

You can clone the repository or download the project as a zip file.

🛠️ Architecture 🛠️

LaunchPad is implemented using Android Clean Architecture and follows the Model-View-ViewModel (MVVM) pattern.

It features 3️⃣ main layers:

1. Data Layer - This is the layer that dispenses data to the LaunchPad app. Deep in the data layer sits 2 RemoteMediators (yes, 2️⃣ ) to combine local and remote queries for consistent data flow to the user, regardless if the network is available or not. The mediators are flanked by a ROOM Database for data persistence. The API service provides the remote data which is cached by the mediators into the ROOM database for offline operations.

2. Domain Layer - This layer holds the Business Logic for the LaunchApp. It holds the models and the use cases that encapsulates the very complex business logic for the LauchPad app.

3. UI Layer - This is the presentation layer which directly interacts with the user. It displays the refined data to the user and facilitates interactions with the user. It contains the ViewModel holding the different states for the app.

The app has 4️⃣ Screen destinations which use Compose Destination to manage navigation.

Splash Screen Overview Screen Detailed Screen Full Screen

Overview Screen

This screen is based on both TabLayout thanks to Accompanist Library. You can go into more details by following LaunchPad's tab layout implementation or this blog.

Details Screen

The user navigates to the Details Screen by clicking on a launch item. The main UI feature is the BottomSheet. The user can scroll up and down to reveal additional Launch details such as Status, Mission and Launch Site,

Full Screen

When the user clicks on the full screen icon from the details screen, the app navigates to the full screen to display the rocket image in its full glory.

🔌 API Reference 🔌

Yummies fetches its data from Launch Library 2 API. You can find the API Documentation by following this link.

Base URL 🌐

https://lldev.thespacedevs.com/2.2.0/

API Key 🔑

You don't need an API Key

Get Upcoming Launches 📥

    @GET("launch/upcoming")

This interface function takes limit and offset and returns ApiResponseDTO

Parameter Type Description
limit Integer Number of results to return per page
offset Integer The initial index from which to return the results

Get Previus Launches 🚀

     @GET("categories.php")

This interface function takes limit and offset and returns ApiResponseDTO

Parameter Type Description
limit Integer Number of results to return per page
offset Integer The initial index from which to return the results

Data Points for Launch Model

Property Type Description
id Integer auto-generated unique identifier for the launch
name String name of the launch
mission Mission holds the name, type and Mission's description
imageUrl String link for the launch image
provider Provider holds the name and Service Provider type
status Status holds the abbreviation, name and Status description
pad Pad holds the location name, latitude, longitude, complex name and total landings
startWindowDate String time for the start of the launch period
rocket Rocket holds the name and rocket family

⚙️ Tech Stack ⚙️

LaunchPad project uses many popular libraries and tools in the Android Ecosystem

  • Android KTX - helps to write more concise, idiomatic Kotlin code.
  • Jetpack Compose - modern toolkit for building native Android UI
  • Material Design 2 - an adaptable system of guidelines, components, and tools that support the best practices of user interface design.
  • Ramcosta Compose Destinations - used to handle all navigations and arguments passing while hiding the complex, non-type-safe and boilerplate code
  • ViewModel - designed to store and manage UI-related data in a lifecycle conscious way.
  • Dagger Hilt - a full static, compile-time dependency injectin framework for both Java and Android
  • Coil - an image loading library for Android backed by Kotlin Coroutines
  • Retrofit - a type-safe HTTP Client
  • Moshi - converts data used by an application to a format that can be transfered over a network or stored in a database or a file.
  • Coroutines and Kotlin Flow - used to manage the local storage i.e. writing to and reading from the database. Coroutines help in managing background threads and reduces the need for callbacks.
  • Room - persistence library which provides an abstraction layer over SQLite to allow for more robust database access while harnessing the full power of SQLite.
  • Paging 3 - helps to load and display pages of data from a larger dataset and display small chunks of data in a paginated way
  • Timber - a logger with a small, extensible API which provides utility on top of Android's normal Log class.
  • Lottie Animations - provides Lightweight and scalable animations files
  • Google Accompanist - a collection of extension libraries for Jetpack Compose
  • CI/CD - Continuous integration systems let you automatically build and test your app every time you check in updates to your source control system.

✒️ Author(s) ✒️

Buy Me A Coffee

Do Reach Out :

🛂 Contributing 🛂

Contributions to make LaunchPad better are always welcome!

If you are interested in seeing a particular feature implemented in this app, please open a new issue after which you can make a PR!

Alt

📜 License 📜

MIT License

Copyright (c) [2022] [Tonnie Dev]

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Releases

No releases published

Packages

No packages published

Languages