/BakingApp

Assignment form the Android Nanodegree from Udacity

Primary LanguageJava

BakingApp

Assignment form the Android Nanodegree from Udacity

App Description

The assignment is to create a Android Baking App that will allow Udacity’s resident baker-in-chief, Miriam, to share her recipes with the world. You will create an app that will allow a user to select a recipe and see video-guided steps for how to complete it.

The recipe listing is located here.

The JSON file contains the recipes' instructions, ingredients, videos and images you will need to complete this project. Don’t assume that all steps of the recipe have a video. Some may have a video, an image, or no visual media at all.

One of the skills you will demonstrate in this project is how to handle unexpected input in your data -- professional developers often cannot expect polished JSON data when building an app.

Screenshots - Portrait

Here is how the app looks in portrait mode.

Screenshots - Tablet

Here is how it looks in landscape mode on Tablet devide.

Android Setup

This project consists of a single module. Open the app in Android Studio, fire up and Emulator or Device, build the code and intall the APK.

Or on the command line:

./gradlew installDebug

Deployment

Add additional notes about how to deploy this on a live system

Built With

  • Dagger2 - Used to build the dependency graph.
  • Retrofit - HTTP Client for Android applications.
  • Exoplayer - ExoPlayer is an application level media player for Android.

Contributing

This project is cloded for contributions and not maintained. It's for learning and showcase purposes only.

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Acknowledgments

General TODOs

Main epics coded while developing this app.

  • Set up Recycler view for MainFragment with Card Views
  • Setup Dagger
  • Design and implement View Model Skeleton with Repository Patten
  • Implement model of Json objects (Recipe, Steps, Ingredients)
  • Implement Loading Animation (ProgresBar)
  • Implement Json fetching with Retrofit as part of Repository
  • Support fallback case if Network request fails to deliver the recipes (caching?)
  • Show error if Data Loading fails
  • Implement Pull to Refresh
  • Clicking on a card opens a new Fragment
  • Implement list of steps according to mock up, as a Recycler View List
  • Clicking on Steps, opens detailed step View which will hold video.
  • Implement View Playback of the Recipes using Exo Player
  • Map images to each recipe by ID.
  • Restore playback state on rotation and add full screen.
  • Make ingredients card clickable and show ingredients list in a fragment
  • Use ViewPager to navigate across steps
  • Implement Adaptative UI for Tablets.
  • Application has a companion homescreen widget.
  • Widget displays ingredient list for desired recipe.
  • Write Esspresso Tests to test aspects of the UI.
  • Cache Picasso images on OkHTTP Cache https://stackoverflow.com/questions/23978828/how-do-i-use-disk-caching-in-picasso
  • Serve recipes JSON from own free Json server
  • Serve image thumbnails from own free image hosts

Mobius TODOS

  • Implement in Mobius navigate to recipe details step.
  • Show error view when failing to fetch items.
  • Unit test all Mobius code
  • Use loading state to show or hide loading bar.
  • Implement pull to refresh.
  • Save Mobius state on configuration changes
  • Connect Mobius loop to ViewModel and clean up duplicated task and code.
  • Remove non-Rx network requests and clean up Repository class
  • Add error handling to Mobius model, and use snackbar to show errors.
  • Enable Home View in offline mode.
  • Write Unit Tests
  • Host JSON in own server/site/JSON host