Insider's Guide To Udacity Android Developer Nanodegree Part 6 - Capstone Stage 1
Sunday, 19 November 2017
Article Index
Insider's Guide To Udacity Android Developer Nanodegree Part 6 - Capstone Stage 1
Key Considerations & Required Tasks


Key Considerations


How will your app handle data persistence?

  • I'll use a ContentProvider which will keep the list of favorite device locally
  • I'll also use SharedPreferences for storing the user defined Filters 

Describe any edge or corner cases in the UX.

  • The detail screen is going to be filled with 10 devices initially, but every time the 'More' button is clicked another 10 are going to be retrieved which are get appended to the currently listed ones, and so on.

  • There won't be different layout versions for phones or tablets.Tablets will just show more data (devices).

  • The user would get notified when there's no internet connection and while he won't be able to continue retrieving new device listings, he will still be able to work with the locally stored favorite ones. 

Describe any libraries you’ll be using and share your reasoning for including them.

  • Picasso to handle the loading and caching of images.

  • Retrofit for network calls, retrieving or sending data to

  • GSON for parsing the JSON response of 

Describe how you will implement Google Play Services or other external services.

  • AdMob for monetizing the app with banner ads

  • Firebase Analytics in order to understand which features of the app are the most used so that I re-enforce them or  deprecate those not widely used

Next Steps: Required Tasks


Task 1: Project Setup

  • Collect appropriate libraries and their versions and reference them from gradle

  • Build connectivity, send application/x-www-form-urlencoded message to the site which contains the query with the specifications for retrieving a list devices

  • Retrieve the response in JSON, parse it and display the data in informal mode

Task 2: Implement UI for Master Activity

  • First Build UI for Master page, the others are complimentary

Task 3: Build Master Activity functionality

  • Implement communication with web site using Retrofit and AsyncTaskLoader

  • Use Loaders to move data to their views

  • Store retrieved results in local Sqlite database through a ContentProvider

  • Build Filter functionality

  • Store Filters in SharedPreferences

  • Build Search functionality

  • Build Order functionality

Task 4: Next Activities

  • Build Detail Comparison Activity

  • Build SlideShow of device photos

  • Implement FAB functionality

  • Build Comparison Activity

  • Build Intro Activity

Task 5: Leftovers

  • Implement Google Play services and Ads

  • Implement Widget that shows the amount of devices retrieved. When clicked, it opens the Master activity containing their list.

Going through this process made me ponder whether, given there's a website already, is it worth the trouble of building a native app at all? Progressing through the Nanodegree, building native apps and drawing on that experience I've reached the conclusion that native apps have distinct advantages over their website counterparts.

Let me explain.

Apps feel more familiar because users can easily transfer their experience from using one to another. This is because they are based on predefined standards or frameworks, such as 'Material Design' in Android's case. Such frameworks make designing an application easier since they make use of standardized, as well as enhanced, UI components such as Collapsing Toolbars, Navigation Views, FAB's, Snackbars, Tab Layouts and more. On the web you don't get that sort of functionality for free.

Furthermore, the Browser acts an Operating System of its own. Browsers render under a variety of engines and idiosyncratic properties which can make or break your website. Therefore the need for tools such as  Modernizr, which tell you what HTML, CSS and JavaScript features the user’s browser can work with. On a native app you just have one Operating System to deal with, which regardless of version incompatibilities offers uniformity at the very least. And that's what matters most, the consistent behaviour across devices.

The use of just one language, Java, Kotlin, whatever, for both back-end and front-end development is key. That's not the case on the web; you need at the very least to have knowledge of HTML, CSS, JavaScript, JQuery and a template engine. Then again there's the subsidiaries; CSS-grid, Flexbox or maybe Bootstrap? There's no shortage of frameworks too; React, Angular, Vue, you name it. Then what about the back-end? Building a dynamic website and not opting for JavaScript through Node.js would require knowledge in yet another language like Perl, Ruby, PHP, C#(?) and its associated MVC framework. Smadeseek, for example, runs on Perl and the Dancer framework.

And what about state? It's much easier to maintain it in a native app, something that goes a long way in offering its users a richer and smoother experience. Saving favourites, preferences, credits and state recovering after exceptional situations are a cakewalk.

Then testing. You can use your favourite Unit testing framework, fire up your emulator and load your custom devices versus the non-standardized testing across browsers and their versions.

Of course, what is common to either website or native app is accessing a backend database, and while accessing data through a RESTful API unifies their requirements, doing the same for a data warehouse closely attached to the application's logic requires more effort in the case of a website. Smadeseek, for example, lives on a VPS and maintains a directly bound connection to a self-hosted MySQL instance. In contrast, out of the box specific Android extensions for cloud dbms, such as Firebase, once more give the advantage to native apps.

Looking forward to Capstone Stage 2 and the actual implementation.



More Information

Android Developer Nanodegree

Related Articles

Insider's Guide To Udacity Android Developer Nanodegree - 1

Insider's Guide To Udacity Android Developer Nanodegree - 2

Insider's Guide To Udacity Android Developer Nanodegree - 3

Insider's Guide To Udacity Android Developer Nanodegree - 4

Insider's Guide To Udacity Android Developer Nanodegree - 5 

To be informed about new articles on I Programmer, sign up for our weekly newsletter, subscribe to the RSS feed and follow us on Twitter, Facebook or Linkedin.




raspberry pi books



or email your comment to:



Last Updated ( Monday, 20 November 2017 )