Date

Due: Friday, March 23 @ 11:55 PM

This assignment will have you working with your final project partner to add in the code to complete eight core features for the platform you have chosen for your final project. You may or may not be using these features in your actual final project, but we want you to have exposure to all of these.

Many of these features will be covered in class with example code. You are welcome to use any example code we provide in class for this assignment.

We have provided a skeleton app for both platforms. When you create your GitHub repo for the project, it will be auto-filled with the starter code that contains all needed UI elements and libraries.

The eight features you will build are:

  • Accessing the GPS location
  • Registering a device shake
  • Getting data from the accelerometer
  • Using the camera
  • Consuming a JSON web service
  • Pulling data from a Firebase database
  • Using CoreData / SQLite to store and retrieve data
  • Using UserDefaults / SystemPreferences to store and retrieve key/value data

Getting Started: Partner Registration

To register your device and partner information for the core skills project and final project, please follow these steps:

  1. Decide whether you will have a partner or not. You may do the core skills and final projects solo, but note that there is no difference in grading between solo or partner projects. All teams must complete all requirements with the same high level of quality that we expect.
  2. Decide on your platform: Android + Java + Android Studio or iOS + Swift + Xcode. Your choice, but these are the only two choices.
  3. Pick the device you will use. We will support Nexus 7 (Android) and iPod Touch (iOS) devices and you can check either out from Prof. Sherriff. If you own a device you would like to use for the project, you may be able to do so, provided we can grade your project. As we identify devices we are comfortable grading, they will be added to the registration sheet. Unless your project specfically requires something only a cell phone can do (i.e. messaging, phone calls), please use one of our supported, provided devices.

Once you have decided these things, register your project team and device here:

https://goo.gl/forms/ctgIbU6EkB0o3rPk1

If you are working in a pair, ONLY ONE person should fill out the form!

Once you have completed the form, accept the assignment and create a project team with the name "final-team", replacing team with the last names of your team (i.e. final-sherriff or final-hortonfloryan, etc.), for the platform of your choice:

Your repo should be pre-populated with the skeleton code you need to get started. The first thing you should do is change the README.md file to have your names and computing IDs listed.

If you need to reference the original repos, they are linked below. You should NOT need to download these unless you need a reference! You should start with the pre-generated repos above!

Please let us know if you have any issues.

Returning Unused Devices

If you have unused devices, you can turn them in to Prof. Sherriff during his office hours. If you cannot make his office hours, email for an appointment time to come by to have the device checked in.

Feature Information

Accessing the GPS location
  • The user should be able to tap a button to activate the GPS and the latitude and longitude should update. Note that many of our devices do GPS through wi-fi, so it may not update that quickly. You can also test this with the emulator.
Registering a device shake
  • When the user shakes the screen, a count on the screen should go up by 1.
Getting data from the accelerometer
  • The user should be able to activate the accelerometer and show the current x, y, and z positioning. You can also test this with the emulator.
Using the camera
  • The user should be able to take a picture and display it on the screen or pick a picture from the image library.
Consuming a JSON web service
  • The user should be able to enter a department and number (such as CS 4720) and display the course name, instructor, and location. The location of the web service is http://stardock.cs.virginia.edu/louslist/Courses/view/CS/4720?json. You can replace CS and 4720 with other departments or course numbers to get different information.
Pulling data from a Firebase database
  • The user should be able to enter a department and number (such as CS 4720) and display the course name, instructor, and location. Here is what the Firebase DB looks like:

/images/firebase.png

NOTE: We have already set up the connection information for you in the google-services json file found in the root of both the iOS and Android projects. All you need to do is instantiate the connection and pull the data.

Using CoreData / SQLite to store and retrieve data
  • The user should be able to enter a name and computing ID, store it by pressing one button, and loading the values into two Labels / TextViews by pressing the other button.
Using UserDefaults / SystemPreferences to store and retrieve key/value data
  • The user should be able to enter a name and computing ID, store it by pressing one button, and loading the values into two Labels / TextViews by pressing the other button.

Rubric

Each feature is graded on a works/mostly works/doesn't work scale.

Out of 10 total points:

These features are worth 1 point each and are graded on a 1/.5/0 scale:

  • Accessing the GPS location
  • Registering a device shake
  • Getting data from the accelerometer
  • Using the camera
  • Pulling data from a Firebase database
  • Using UserDefaults / SystemPreferences to store and retrieve key/value data

These features are worth 2 points each and are graded on a 2/1/0 scale:

  • Consuming a JSON web service
  • Using CoreData / SQLite to store and retrieve data

Submit

As before, we will grade whatever is in your GitHub repo at submission time. There are no partner evals for this assignment. We will use the final project evaluations since the partners are the same. If there are any issues with your partner, please contact Prof. Sherriff directly.

If you are doing Android, please also put a signed debug apk in the root of your repo. DON'T do a fully-signed apk - this is because the key that you use won't be linked to the Firebase DB, so the app will likely crash. So, use Build -> Build APK and submit the app-debug.apk file.

Make sure to change your README.md file to have your names and computing IDs listed.