Android Mini-App Project

Getting Started: Partner Registration and Github

To register your partnership for the semester and to be able to check out devices, please fill out the form here: https://goo.gl/forms/z5sjX9QCNhlPEqnk2. If you change partners at any time, please contact Prof. Sherriff directly so this form can be updated.

Once you have registered your partnership and picked up your tablet, head to Github to create your repo in our classroom Github organization by going here: https://classroom.github.com/group-assignment-invitations/8b4261b8faab592404c652ba9e3e80d1. Whoever is first of your partnership to go here should create a new team and the partner should join it. Please use your Pokemon Android device team name as the name of your team! Let us know if you have any issues!

Once you have created your repo, you should have a url that looks something like this: https://github.com/UVaCS4720/android-mini-app-s17-pokemonname.git

Android Studio has Github integration built in, but making a project connect to a repo that's NOT in your personal account is slightly trickier in the UI. I suggest doing the initial steps on the command line (and asking for help if needed). We do REQUIRE that your projects be in these repos for the semester.

On one person's computer, follow these steps to initialize everything (make sure you have git installed from http://git-scm.com if needed):

  1. Create a new Android Studio project
  2. Open a terminal window or the Git bash terminal on Windows and go to that root directory
  3. Run git init . (with the period)
  4. Run git add *
  5. Run git commit -m "initial commit"
  6. Run git remote add android-mini-app-s17-pokemonname https://github.com/UVaCS4720/android-mini-app-s17-pokemonname.git (replace the pokemonname)
  7. Run git push android-mini-app-s17-pokemonname master

Now that the repo is setup, you can do all the normal operations inside Android Studio or you can use the git tool of your choice.

Nexus 7 Device Information

  • Google Accounts: You may register your own Google account for use with the device or you may create a dummy account if you so desire. However, you MUST do a factory restore on the tablet before turning it in to remove all of your data, settings, and applications.
  • Google Play Store: The tablets should be used only for educational purposes and not as a personal device. You should not purchase and download any apps or games to your tablet without authorization from the course staff. If you try to install an application from the Android Market / Google Play Store, you will have to provide your own credit card information, which will then be stored with the device and/or the Google account associated with the tablet. Do not do this.
  • Getting Online: Your tablet may or may not be registered through the UVa wahoo network. Follow the instructions found at http://its.virginia.edu/mobile/android.html. You may need to manually add the network under Settings > Wireless & networks > Wi-Fi settings > Add Wi-Fi network.
  • Problems?: Contact Prof. Sherriff at sherriff@virginia.edu.

Project Description

For your Android Mini App, you are going to build a simple UVa Bucket List app. Users will be able to open this app and add items to their bucket list of things that they want to do before graduation. Each item will have a name, description, latitude, longitude, and a way to record whether it has been completed or not. Since we are early in the semester and have not yet covered data storage, the app should pre-populate with just a few example items at start up and work as intended while in use, but it does not have to remember the state of the list from run to run.

Requirements and Specifications

Your app must meet the following requirements and specifications. Deviating from these will result in a reduced grade.

The app shall be made up of three activity screens - a list screen, a create new item screen, and an item information screen. More detailed information about each activity is found below.

You will (most likely) have five .java files for this assignment:

  • BucketListActivity.java - an Activity for your main list
  • AddItemActivity.java - an Activity that lets a user add an item to the list
  • EditItemActivity.java - an Activity that lets a user edit an item already on the list and is pre-populated on launch
  • BucketItem.java - the model representing a single bucket list item
  • BucketListAdapter.java - the adapter class that handles how a BucketItem appears in the RecyclerView

You will also have the associated layout .xml files that go with these.

List Activity

  1. When the app starts up, the list screen should be the first one displayed.
  2. To make the list of bucket list items, you must use a RecyclerView. See the example code from class on how to set this up with a data class and an adapter class.
  3. There should be a floating action button in the lower right corner with an icon indicating the ability to add something to the list.
  4. The items in the list should be in order from soonest due date to latest.
  5. Tapping on any item should bring up an Edit Item activity (see that Activity for more info).
  6. Tapping on the checkbox next to an item should flip it's done / not done status.
  7. Tapping on the floating action button should bring up the Add Item activity (see that Activity for more info). To launch this activity, you should use the startActivityForResult() method. Upon completion of the Add Item activity, you should use onActivityResult(int requestCode, int resultCode, Intent data) to parse the result and add the new item to the ArrayList in this activity.

Add Item Activity

  1. The screen should have a back arrow in the upper left corner, which cancels the add. This should be done using a custom Toolbar.
  2. The screen should have fields for each of the parts of a bucket list item, along with a DatePicker for the due date.
  3. The latitude and longitude fields MUST be numeric input only.
  4. There should be a save button at the bottom of the screen.
  5. The activity should send the info from the fields back as extra data fields in the return intent.

Item Info Activity

  1. The screen should look the same as the Add Item activity, but with the information pre-populated with the information from the item you tapped.
  2. Any changes made here should be reflected back in the original item.
  3. If the due date changes, you should re-sort the the list.

BucketItem

  1. This class should have all the fields for a bucket list item.
  2. This class should have a compareTo() so you can determine which items come before others in an ArrayList
  3. This class should have a static method called createInitialBucketList() that creates the initial, hard-coded bucket list ArrayList and returns it. This will be called in the onCreate() in the BucketListActivity.

BucketListAdapter

  1. Follow the example for more information on the methods you must override here.
  2. Handle the tapping of the item name for launching the edit item activity and tapping the checkbox here in the onBindViewHolder() method.

Example Screenshots

Main list of items that should appear on launch:
List Activity

Adding a new item:
List Activity

New item added to list:
List Activity

There are two sorted orders - first comes all unfinished tasked in date order, then all completed tasks in date order. It should update dynamically when something is checked off:
List Activity

Editing an item looks just like adding one:
List Activity

Milestone Submission - Due: Monday, January 30 @ 11:55 PM

You should have at least the main list screen appearing, with the floating action button and a pre-populated list, plus one other piece of basic functionality of your choice.

Grading Rubric:

Out of 20 possible points:

  • 5 pts: App can launch properly
  • 5 pts: The list is pre-populated and a floating action button appears
  • 5 pts: Some other basic functionality is apparent
  • 5 pts: Doesn’t crash / looks reasonable

Submit:

All code must be kept in the Github repo you created as a part of your partner creation process above. We will do a checkout from Github of the latest push to the repo before the 11:55 PM deadline.

Please put a built .apk in the root of your repo to make grading easier.

Final Submission - Due: Monday, February 6 @ 11:55 PM

You should have all required features completed plus a project report in PDF form that you will put in the root of your repo along with the final .apk.

Project Report:

Your documentation must include:

  • Team member list
  • Device Name
  • Project/App Title
  • Basic instructions on usage
  • Any special info we need to run the app
  • Lessons learned (at least half a page)

Grading Rubric:

Android Final Build (out of 100):

/5 pts: App can launch properly and a screen with a pre-populated, sorted list appears
/10 pts: Tapping on the floating action button launches the Add New Item activity
/5 pts: The Add New Item activity has all appropriate fields
/15 pts: The new item is put into the list in the correct location after saving
/10 pts: Tapping on the check box registers the item as complete and it moves to the bottom of the list
/5 pts: Tapping on the name of an item opens the Edit Item activity
/10 pts: The Edit Item activity is pre-populated with all appropriate data
/15 pts: Changes made in the Edit Item activity are properly reflected back in the list
/10 pts: The back arrows in the upper left corner work properly for both Add New Item and Edit Item
/5 pts: App does not crash on rotate (fully resetting the entire app on rotate: -2)
/5 pts: Design / Style / Appearance / Usability
/5 pts: Documentation / Report

Submit:

All code must be kept in the Github repo you created as a part of your partner creation process above. We will do a checkout from Github of the latest push to the repo before the 11:55 PM deadline. Please make sure that the latest version of your report is in PDF format in the root of your repository, along with your final .apk.

Team Member Evaluations: Please fill out this form SEPARATELY FOR EACH TEAM MEMBER on your team https://docs.google.com/forms/d/1bCwa7MUaNy9vH0g3VRTvRxJb9s8HFW_a7BSRhszUIIw/viewform

more ...