milestone 3 only! starts on page 17
Deliverables:
ZIP file containing all code.
Word document containing updated design documents, including UML and wireframes.
URL for a video of you performing an app demo and code walkthrough; use Loom, QuickTime, or a similar screencast tool. Demonstrate the application running in its current
CST-135 Milestone Guide Semester Milestone Project Objective: Create a contacts manager application that demonstrates object-oriented design principles in Java and Android Studio. Key Concepts Some of the specific software development concepts that this project will utilize include: · Object-oriented concepts, including encapsulation, inheritance, abstract classes, interfaces, overriding and overloading (polymorphism), and generics; · Eclipse and Android Studio; · Gradle dependency managers; · Android application development concepts, including activity layouts, view controls, click listeners, list adapters and intents. Project Description: You will create an application that maintains a list of names and addresses and performs actions on the list. Seven Milestones There are seven stages of completion for the project: 1. Design – UML, wireframes, and interactive mockup demo. 2. Code classes – Create the properties and methods of each class. Run a test script. 3. Console Application – Create a functioning application that runs in a text-only version. 4. File IO – Save all data to a text file using JSON formatted data. 5. Android GUI layout – Create activities and layouts. 6. Android GUI interaction – Enable buttons, menus, and input forms to save, search, and display. 7. Android phone functions – Enable phone calls, texting, email, and navigation using the phone’s built-in applications. User Stories – Functional Requirements The features of the application are described in the form of user stories. A user story is a single phrase that describes an action done in the application. A user story should be written as follows: (Who) does (what) for (a specific purpose). User Stories Part 1 - Create a Contact 1. As a user, I want to save text data about a contact (address, phone, email) so that I can find the information at a later date. 2. As a user, I want to view the business hours and days of week that a business contact is open so that I can shop at the business. 3. As a user, I want to save a description of a personal contact so that I can remember important details about his/her personal life. User Stories Part 2 - Manage Contacts 1. As a user, I want to search the list of contacts by any or all of the data fields so that I can select one to view all of its details. 2. As a user, I want to be able to delete a contact so that I can keep the list relevant to people I currently keep in touch with. 3. As a user, I want to save all the contacts so that I can use the application on a regular basis. User Stories Part 3 - Communicate with Contacts 1. As a user, I want to select a contact so that I can send a text message to him/her. 2. As a user, I want to select a contact so that I can make a phone call to him/her. 3. As a user, I want to select a contact so that I can show a map of his/her location and get directions using Google Maps. 4. As a user, I want to view the business website URL so that I can open the page in the phone’s default web browser. 5. As a user, I want to select a contact so that I can send him/her an email message using the phone's default email program. User Stories Part 4 – For Future Development 1. As a user, I want to see a sortable list (chronological, alphabetical, filter by type) of my actions, such as email messages, texts, and phone calls, so that I can view a history of interaction with all of my contacts. a. In this version of the application, each contact may only contain one address, one email address, one URL, and one phone number. In a future version of this app, a contact will contain multiple addresses, phone numbers, photos and email addresses. 2. As a user, I want to create categories of contacts so that I can see relationships in logical groups. 3. As a user, I want to create categories of contacts so that I can communicate with group emails and text messages. User Accounts and Security The application will have no login or user accounts. Anyone who has access to the app will be able to view, edit, and use the same list of contacts. Data Storage Initially, the application will have no method for storing data after the program closes. Test data for contacts will either be manually entered each time the program runs or will be hard-wired into one of the classes. In Milestone 4, students will use text files to store persistent data. User Interfaces The contacts manager will be developed in two stages. 1. Console Application – The first version of the application will be text-only and have limited features. The console app will run on a computer only. It will not implement the email, texting, phone calls, and maps of Part 3, "Communication." 2. Android Application – The second version of the application will implement all of the features. The Android app will have a graphical user interface, multiple screens, and utilize the built-in capability of the phone, including email, text, and maps. Milestone 1 – Design Design 1 - Java Classes Design relevant classes mentioned below. Create UML diagrams for all classes required to implement the needs mentioned in the user stories. Identify properties and methods as well as relationships between classes. Each object should implement two constructors (default with no parameters and a custom constructor with all properties passed as parameters) and a toString() method. Refer to the users’ stories to determine what kinds of methods need to be included. Recall that a UML diagram shows all of the classes, their methods, and properties as well as relationships between each, as shown in this example of another app. Figure 1: Example of UML diagram showing common relationships between classes. The following are the classes you should include in the contact app. 1. Base Contact – Abstract class that contains information common to a personal contact as well as a business contact. Properties of the Base Contact included name, phone number, street, city, state, ZIP code, and country. For the methods of the Base Contact class, refer to the actions listed in the user stories above. For example, a user should be able to send a text, make a phone call, navigate to a location. Some methods you definitely should include in the Base Contact class are: toString, getters and setters, navigateTo, textTo, callTo, and emailTo. In the first version of this application (the console app), it will not be possible to implement a method in the console app in the same way as the Android app because the console application does not run on a phone. The console implementation of the method could simply print a message to the console such as “I am sending a text to Robert now.” In the Android app, the method will actually make an intent action to the phone dialer functions of the operating system. 2. Person Contact – Extends the Base Contact. Some properties unique to a person include date of birth and description. Methods include getters and setters for the properties unique to Person. 3. Business Contact – Extends the Base Contact. Some properties unique to a business include business hours and website URL. Methods include getters and setters for the business-only properties and openURLinBrowser(). Base Contact Personal Contact Business Contact Figure 2: Relation between base contact and two children classes. 4. AddressBook – This contains a list of all Contact objects in the app. Methods are needed to add, remove, and display one. a. Optional: sortBy(property, asc/desc), search(property, string). 5. FileAccessService – This will implement methods saveAll and readAll. The contacts will be saved to a text file and read from a text file. 6. BusinessService - This will have an AddressBook instance and contain methods to save and load all contacts in the AddressBook. 7. ConsoleApp – This has a main() method. In main(), you can create instances of the other classes in the application. The console app will have a text-driven menu that gives the user the choice of creating, searching, deleting, and modifying the list of contacts and all of their properties. Design Part 2 - Wireframe and Sitemap Design 1. Create a storyboard of the application. This storyboard should show the app navigation. Through this design process, you will determine how many different screens you will have to build. At this stage of the design process, it is very easy to modify your plan. You can use a drawing tool, sticky notes, or a paper design. Do not worry about the UI design of each screen yet. Each node in the chart should have a name. Each link connecting the nodes should be labeled with an action (button name or menu item is common action). You will know which screens your app will need by looking at the methods and user stories. Figure 3: Example of a rough draft of a site navigation map. Every node on the map shows an activity (or screen) in the application. Use a draw tool if you prefer. Three free places to start include https://www.draw.io, https://lucidchart.com and https://wireframe.cc 2. Create wireframe diagrams of all proposed screens in the app. Notice in this example that the screens have numbers and names associated with each one. The user interface in Android will not be implemented until Milestone 5. You should have a plan in your mind for what the final product will be even though the GUI implementation is still some time away. Figure 4: Example of a mobile application set of wireframes. 3. Create a clickable mockup of the app with Marvel https://marvelapp.com/ or a similar design product. UML Diagram Details The goal for Milestone #1 is to create a comprehensive UML design that illustrates all of the data and actions that will be done in the contacts app. 1. Start a blank document in a drawing tool of your choice. Locate the UML tools section. Figure 5: UML component options of a drawing program. 2. Create a UML class object for every item listed in the requirements. a. Do not worry about where these items go on the canvas. You just want to make sure that you get them on the drawing board so that you do not forget them