GithubHelp home page GithubHelp logo

dev-iram / asteroid-radar-app Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 659 KB

Asteroid Radar App Application developed as part of Udacity Nanodegree Android Kotlin Developer Course. Displays information about near earth asteroids thar are detected using NASA NEoWs API. Features Retrofit, Moshi, Picasso and Room.

Home Page: https://www.udacity.com/course/android-kotlin-developer-nanodegree--nd940

Kotlin 100.00%
android asteroids constraint-layout databinding fragments kotlin livedata moshi mvvm nasa-api navgraph navigation picasso recyclerview retrofit room viewmodel workmanager database restful-api

asteroid-radar-app's Introduction

Asteroid Radar App

AsteroidApp

This is an Asteroid Radar App I created as per specifications in Project 2 as part of Udacity Nanodegree Android Kotlin Developer Course.

✦ Programming Language; Kotlin
✦ Minimum SDK; 24
✦ UI Layout; XML
✦ Software Tools;
    ✧ Android Studio: IDE Used to create, compile and build application

Application Screenshots

Application Logo

Application Demo

Assignment Overview

Asteroid Radar is an app to view the asteroids detected by NASA that pass near Earth, you can view all the detected asteroids given a period of time with data such as the size, velocity, distance to earth and if they are potentially hazardous. In this project, you will apply the skills such as fetching data from the internet, saving data to a database, and display the data in a clear, compelling UI.
You will need the NEoWs API which is a free, open source API provided by NASA JPL Asteroid team, as they explain it: “Is a RESTful web service for near earth Asteroid information. With NeoWs a user can: search for Asteroids based on their closest approach date to Earth, lookup a specific Asteroid with its NASA JPL small body id, as well as browse the overall data-set.”

The resulting output of the project will be two screens: a Main screen with a list of all the detected asteroids and a Details screen that is going to display the data of that asteroid once it´s selected in the Main screen list. The main screen will also show the NASA image of the day to make the app more striking.

Assignment Brief

The application you will build must:

Main Screen - with a list of clickable asteroids as seen in the provided design using a RecyclerView with its adapter.
You could insert some fake manually created asteroids to try this before downloading any data.

Details Screen - displays the selected asteroid data once it’s clicked in the Main screen as seen in the provided design. The images in the details screen are going to be provided with the starter code: an image for a potentially hazardous asteroid and another one for the non-hazardous ones, you have to display the correct image depending on the isPotentiallyHazardous asteroid parameter. Navigation xml file is already included with starter code.

Download from API - Download and parse the data from NASA NeoWS (Near Earth Object Web Service) API. As this response cannot be parsed directly with Moshi, we are providing a method to parse the data “manually” for you, it’s called parseAsteroidsJsonResult inside NetworkUtils class, we recommend trying for yourself before using this method or at least take a close look at it as it is an extremely common problem in real-world apps. For this response we need retrofit-converter-scalars instead of Moshi, you can check this dependency in build.gradle (app) file.

Save to Database - When asteroids are downloaded, save them in the local database.

Display Asteroids - Fetch and display the asteroids from the database and only fetch the asteroids from today onwards, ignoring asteroids before today. Also, display the asteroids sorted by date (Check SQLite documentation to get sorted data using a query).

Cache Data - Be able to cache the data of the asteroid by using a worker, so it downloads and saves today's asteroids in background once a day when the device is charging and wifi is enabled.

Display Image of the Day - Download Picture of Day JSON, parse it using Moshi and display it at the top of Main screen using Picasso Library. (You can find Picasso documentation here: https://square.github.io/picasso/(opens in a new tab)) You could use Glide if you are more comfortable with it, although be careful as we found some problems displaying NASA images with Glide.

Content Description - Add content description to the views: Picture of the day (Use the title dynamically for this), details images and dialog button. Check if it works correctly with talk back.

No Internet Usability - Make sure the entire app works without an internet connection.

Submission Feedback

1st Submission - Passed ✅

15th February 2024

Hello Dear Student!

Your code is very clean, clear, and professional, so great work on this!

The app behavior is very good, the list of asteroids shows on the main screen very quickly when it starts. 👍

The API key is very sensitive information so it is much better to hide it. I give you some suggestions on how to do it in the code review tab. 😄

Awesome work displaying the asteroids in the list so nicely, but maybe next time that you need it, you could use the CardView(opens in a new tab) widget that will help you design these elements easily.

You must be proud of yourself since not many students pass this project on the first try. 💪

Now, you can continue with the lessons and overall, have fun while coding!

asteroid-radar-app's People

Contributors

dev-iram avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.