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:
- An
Album
that contains the following attributes:- Artist name
- Album title
- Publication year
- A list of
Track
s - A unique ID
- 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
- The
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:
- The Album List screen - displays a list of all the albums
- The Track List screen - displays a list of all the tracks
- The Album Detail screen - displays the details of a single album
- New Album screen - creates a new album
- 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
- Displays a scrollable list of all albums
- Each album shows at a minimum the artist name, album title, and publication year
Track List Screen
- Displays a scrollable list of all tracks
- Each track shows at a minimum the track name, artist name, album title, and track length properly formatted as m:ss
Album Detail Screen
- Displays the artist name, album title, publication year
- Displays a scrollable list of all the tracks
- Each track shows at a minimum the track number, track title, and track length properly formatted as m:ss
- The total play time of the album formatted as m:ss
New Album Screen
- Ability to set the artist name, album name, and publication year
- Button to save album (only enabled if all three fields are entered)
New Track Screen
- Ability to set the track number, track name, which album side it is on, and length
- Button to save track (only enabled if all fields are entered)
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.
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:
- Specifying an album as either an EP or LP. When adding tracks to an EP, the total album play time must be less than 30 minutes. When adding tracks to an LP, the total album play time must be less than 45 minutes.
- Being able to sort the track list by the different columns (track title, artist name, play length)
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:
- Your Name / email
- Assignment Number / Project Title
- A brief, high level description of what the program is / does
- A usage section, explaining how to run the program, which keys perform which actions, etc.
- Instructions on compiling your code
- Notes about bugs, implementation details, etc. if necessary
Grading Rubric
Your submission will be graded according to the following rubric.
Will follow
Percentage | Requirement Description |
15% | Model:
|
25% | View:
|
25% | ViewModel:
|
30% | Navigation:
|
5% | Submission:
|
Up to +10% | Extra Credit:
|
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.