Tunetally is a mobile application allowing users to create a Summary Wrapped of their top songs and artists using Spotify API. There are also added features, such as controlling the timespan of the summary, generating holiday wrapped versions, and having a "Guess the Song" game.
App Details and Functions
Upon opening the app, there a Login screen is presented. First time users should login first by connecting to their Spotify account. They would then be prompted to making a username associated to their account.
Users will then be directed to the Home page, which displays their account profile at the top of the screen. There is a button prompting users to "Create a TuneTally Wrapped," which is this app's version of the Spotify summary. Below this, the users past TuneTally Wrappeds are displayed.
The page to create a Wrapped allows users to choose a timespan of the summary, which includes "Long Term," "Medium Term," and "Short Term."
The Friends pages allows users to add other individuals who have an account with TuneTally. By clicking on the image of a friend's profile, the user is also capable of seeing their TuneTally Wrappeds.
The Settings page allows users to update their account details and add a password to their account, so they can login to TuneTally via username and password. There is also an option to delete the account. Sign Out will allow users to be prompted to login when opening the app. Thus, TuneTally saves account details in the Firebase cloud storage.
The Games page has the "Guess the Song" game, where each question is lyrics to a song and users will answer with the song's name. There are 10 total rounds and the user must answer within a 15 second time frame. Moreover, the number of correct answers are kept track and is displayed at the end of the game.
There is also a holiday feature, where special holiday versions are generated during specific days of the year. This feature also extends to the "Guess the Song" game, where the lyrics are associated to songs of a specific holiday. The holidays in this feature are Christmas, Valentine's Day, and Halloween. Along with this feature, there are Holiday Notifications, which are enabled in the Settings page.
Process Description
Scrum
Our group used Scrum to organize this project. We had sprints that lasted for 2 weeks, and each sprint started with sprint planning consisting of items in the product backlog. We had daily standups to discuss accomplishments, plans, and issues regarding the day. At the end of each sprint, a review with the client was done where we discussed the project's progress, demoed the product, and revised our backlog as necessary. We also discussed retrospectives in the review, where we plan what we can change with our team moving forward. We used LucidChart to keep track of the product backlog and relied on Discord and iMessage for Sprint Tracking.
Design Decisions: Model-View-ViewModel
Model: Java classes were used for handling operations, such as retrieving data from the user and creating TuneTally Wrappeds. We used Firebase cloud storage to assist us in storing data as needed.
View: XML files were used for the user interface components and page layouts. This includes the TextView, ImageView, Recylcer Views, etc., which the user interacts with. These XML files are further manipulated in their associated Java classes to observe changes in the ViewModel and update the user interface accordingly.
ViewModel: Java classes that deal with the presentation logic and deals with the state of the View. Using data from the Model, it updates the formats of the XML layouts as necessary and deals with user interface.
Main Principles We Followed
Information Expert: Each class was made responsibility of their data and their associated behaviors. For example, the ViewModel.
High Cohesion: The Java classes have high cohesion, meaning that the variables and methods are focused on a single purpose. Thus, each class has one responsibility.
Controller: These are the Java classes that handle the ViewModel so that user interface properties are kept separate from the Model.
Single Responsibility Principle: Each class has one responsibility and their members are focused on fulfilling this.
Video Demo