CSCI 448 - Mobile Application Development

Spring 2022 - Assignment 3 - LP Disco

This assignment is due by April 26, 2022 by 11:59pm.

For this assignment, you will follow the same process as Labs 4 and 5 to create a new app.

When you create this project, set the package to include <userName_A3> and name the app <userName>_A3 where userName is your name (for instance, mine would be jpaone_A3).

An example of the completed app is shown below: (video to be added later)





Part I - The Model


This app will be storing a users record collection. There are two entities we'll need to store in a database:

  1. An Album that contains the following attributes:
    • Artist name
    • Album title
    • Publication year
    • A list of Tracks
    • A unique ID
  2. A Track that contains the following attributes:
    • The Album it is on
    • If it's on the A Side or B Side of the album
    • The track number
    • The track title
    • Track length minutes
    • Track length seconds
    • A unique ID

Storing the track length as separate minutes/seconds will assist with the future task of computing the total album play time.

Be sure to setup the full Model structure needed (DAO, Database, Repository).


Part II - The View


We'll need to make several screens for our app:

  1. The Album List screen - displays a list of all the albums
  2. The Track List screen - displays a list of all the tracks
  3. The Album Detail screen - displays the details of a single album
  4. New Album screen - creates a new album
  5. New Track screen - adds a track to an album

You have freedom with how the screens exactly look, but they must meet the following requirements:

Album List Screen

album list screen

Track List Screen

track list screen

Album Detail Screen

album detail screen

New Album Screen

album detail screen

New Track Screen

album track screen

Part III - Navigation


We will make use of both the top bar and the bottom bar for this app. The bottom bar will allow for toggling between the album list screen and the track list screen.

When on the album list screen, there will be a top bar menu item that goes to the new album screen. After saving a new album, the user returns to the album list screen and will see the album listed. Clicking on an individual record will navigate to the album detail screen.

When on the album detail screen, there will be a top bar menu item that goes to the new track screen. After saving a new track, the user returns to the album detail screen and will see the track listed.

bottom bar album screen bottom bar track screen

Part IV - ViewModel


Nowhere above is the ViewModel explicitly listed. You'll need to make sure it sits seamlessly between your Model and View to update both as appropriate based on data loads and user actions.


Part XC - Extra Credit


There are several opportunities for extra credit. They will revolve around:

See the posted video above for expected example functionality.


Documentation


With this and all future assignments, you are expected to appropriately document your code. This includes writing comments in your source code - remember that your comments should explain what a piece of code is supposed to do and why; don't just re-write what the code says in plain English. Comments serve the dual purpose of explaining your code to someone unfamiliar with it and assisting in debugging. If you know what a piece of code is supposed to be doing, you can figure out where it's going awry more easily.

Proper documentation also means including a README.txt file with your submission. In your submission folder, always include a file called README.txt that lists:


Grading Rubric


Your submission will be graded according to the following rubric.

Will follow

Percentage Requirement Description
15%

Model:

  • Albums and Tracks stored as entities in a Room database with the respective fields.
  • Appropriate Model layers of abstraction implemented.
25%

View:

  • All Albums displayed as a list.
  • All Tracks displayed as a list.
  • Album details displayed.
  • New Album screen.
  • New Track screen.
25%

ViewModel:

  • Retrieve all albums and tracks.
  • Add a new album.
  • Add a new track to an album.
  • Other appropriate functionality.
  • ViewModel created appropriately with correct Observer pattern implemented.
30%

Navigation:

  • BottomBar navigation used to switch between album and track listings.
  • Album listing has New TopBar action to move to New Album screen.
  • Saving a new album returns to album list.
  • Album detail has New TopBar action to move to New Track screen.
  • Saving a new track returns to the album detail.
  • Up arrow displayed when appropriate and navigate back to correct place.
5%

Submission:

  • Submission includes source code, Android Studio project, and README.txt. Submission compiles and executes.
Up to +10%

Extra Credit:

  • Create an album as an EP or LP. Tracks can only be added up to a max length of 30min or 45min.
  • Ability to sort the track listings by title, artist, album, length, and potentially other criteria.

Submission


Please ensure your project produces an app with the name userName_A3. When you are completed with the assignment zip together your full source code (the Android Studio project), and README.txt. Name the zip file, userName_A3.zip. Upload this file to Canvas under A3.

This assignment is due by April 26, 2022 by 11:59pm.