#Project 7: Capstone
In the Capstone project, you will build an app of your own design in two stages.
#Capstone, Stage 1 - Design
In Stage 1, you will design and plan the app, using a template that we provide in the "Instructions" node.
Creating and building your own app idea can be both exciting and daunting; ultimately, we want the experience to be rewarding. You'll apply a wealth of different concepts and components that you've learned across the Nanodegree to bring you own app idea to life.
To keep the process from becoming overwhelming (or simply chaotic), you will design and plan your app, and receive feedback, before you start building. This will help prevent and mitigate pain points you might run into along the way, and also replicates the process of professional Android Developers.
##Why this Project
To become a proficient Android Developer, you need to design apps and make plans for how to implement them. This will involve choices such as how you will store data, how you will display data to the user, and what functionality to include in the app.
##What Will I Learn?
Through this project, you'll demonstrate the ability to communicate an app idea formally, using:
- An app description
- UI flow mocks, similar to what you've seen in other Nanodegree projects, like the Popular Movies overview
- A list of required tasks that you will complete to build the app, in order
The Capstone project will give you the experience you need to own the full development of an app. This first stage replicates the design and planning experience that proficient Android Developers are expected to demonstrate.
##How Do I Complete this Project?
###Supporting Courses
You will learn the skills you need to complete this project in these courses:
- Developing Android Apps: Android Fundamentals
- Advanced Android App Development: Productionize and Publish Your App
- Google Play Services: Use Google APIs to Improve Your Apps
- Gradle for Android and Java: Build Better Apps Through Automation
###App Ideas
If you don't have an app idea of your own, feel free to choose one of these:
- Teleprompter app (we're always on the look-out for a good teleprompter app!)
- Fitness app
- Podcast app
- Travel app
- Reddit app
###Required Tasks
- Review the requirements for the app in this document
- Make a copy of this template
- Rename the copy: "Capstone_Stage1"
- Fill out each section:
- App Description
- UI Mocks
- Key Considerations
- Next Steps: Required Tasks
- Download the completed document as a PDF, and save it as: "Capstone_Stage1.pdf"
- Submit the PDF document in a zip file or from a GitHub repo through the project submission portal.
- Proposal contains an overview description.
- Proposal contains a description of the intended user.
- Proposal contains user interface mocks.
- Proposal declares the app’s primary features.
- Proposal outlines any key constraints such as data persistence, UX corner cases, and libraries used.
- Proposal describes a plan to implement the main features of the app via a set of well structured technical tasks.
- UI mocks depict interaction stories that adhere to Core App quality guidelines.
- App design specification demonstrates implementing all features required for Project 8: Capstone, Stage 2 - Build.
#Capstone, Stage 2 - Build
In Stage 1, you designed and planned your Capstone app. Now, it's time to build it!
Nanodegree students must successfully complete the Capstone, Stage 1 project prior to beginning Stage 2.
##Why this Project
In this project, you will demonstrate the skills you've learned in your Nanodegree journey, and apply them to creating a unique app experience of your own. By the end of this project, you will have an app that you can submit to the Google Play Store for distribution.
##What Will I Learn?
The Capstone project will give you the experience you need to own the full development cycle of an app..
##How Do I Complete this Project?
###Supporting Courses
You will learn the skills you need to complete this project in these courses:
- Developing Android Apps: Android Fundamentals
- Advanced Android App Development: Productionize and Publish Your App
- Google Play Services: Use Google APIs to Improve Your Apps
- Gradle for Android and Java: Build Better Apps Through Automation
###Required Tasks
- Successfully complete Stage 1.
- Build your app using your Stage 1 document as a guide.
- Submit your app source code through the Nanodegree project portal.
- App conforms to common standards found in the Android Nanodegree General Project Guidelines
- App integrates a third-party library.
- App validates all input from servers and users. If data does not exist or is in the wrong format, the app logs this fact and does not crash.
- App includes support for accessibility. That includes content descriptions, navigation using a D-pad, and, if applicable, non-audio versions of audio cues.
- App keeps all strings in a strings.xml file and enables RTL layout switching on all layouts.
- App provides a widget to provide relevant information to the user on the home screen.
- App integrates two or more Google services. Google service integrations can be a part of Google Play Services or Firebase.
- Each service imported in the build.gradle is used in the app.
- If Location is used, the app customizes the user’s experience by using the device's location.
- If Admob is used, the app displays test ads. If Admob was not used, student meets specifications.
- If Analytics is used, the app creates only one analytics instance. If Analytics was not used, student meets specifications.
- If Maps is used, the map provides relevant information to the user. If Maps was not used, student meets specifications.
- If Identity is used, the user’s identity influences some portion of the app. If Identity was not used, student meets specifications.
- App theme extends AppCompat.
- App uses an app bar and associated toolbars.
- App uses standard and simple transitions between activities.
- App builds from a clean repository checkout with no additional configuration.
- App builds and deploys using the installRelease Gradle task.
- App is equipped with a signing configuration, and the keystore and passwords are included in the repository. Keystore is referred to by a relative path.
- All app dependencies are managed by Gradle.
- App implements a ContentProvider to access locally stored data.
- Must implement at least one of the three : If it regularly pulls or sends data to/from a web service or API, app updates data in its cache at regular intervals using a SyncAdapter. OR If it needs to pull or send data to/from a web service or API only once, or on a per request basis (such as a search application), app uses an IntentService to do so. OR It it performs short duration, on-demand requests (such as search), app uses an AsyncTask.
- App uses a Loader to move its data to its views.
- Make your app more delightful with material design patterns such as shared element transitions across activities and parallax scrolling where two or more items must scroll in the same activity.
- Implement notifications in your app. Remember the following when implementing notifications: -Notifications should not contain advertising or content unrelated to the core function of the app. -Notifications should be persistent only if related to ongoing events (such as music playback or a phone call). -Multiple notifications are stacked into a single notification object, where possible. -Use notifications only to indicate a context change relating to the user personally (such as an incoming message). -Use notifications only to expose information/controls relating to an ongoing event (such as music playback or a phone call).
- Implement sharing functionality in your app, making use of intent extras to share rich content (i.e. a paragraph of content-specific text, a link and description, an image, etc).
- Create and use a custom view in your app that could not be achieved with the standard widgets provided by the core views on Android.