NeverEatAlone
         Group 19:  Yueling Loh,  Tejasvam Singh,  Hai Tang,  Runze Tang,  Xiaozhou Zhou

Vision Statement

Our goal is to develop a mobile application named "Never Eat Alone," which allows the users to post invitations(Meal Notification) to invite others to have meals together. The users can add contacts, see which contacts are available and choose to post the invitation to a sub group of contacts (Receivers). These receivers can choose to accept, decline or ignore the invitation, and if they accept it, they can invite their contacts that are not in the poster’s contact list. This app will also feature data analysis like ranking and recommending restaurants based on the preferences of contacts, recommending contacts foron restaurant and geometrical information, etc. We will first focus on the Android platform, and if time allows, we'll extend it to a cross platform app using Java with RoboVM.

Core Features

User Management Features

User/Meal Notification Management Features

Meal Notification Content Features

Meal Notification Push Features

Geolocation Features



Extended Features

Actors


Domain Model

DomainModel.jpg

GUI Sketches

Download the interactive pdf
here.

GUI%20sketch.001.jpgGUI%20sketch.002.jpg

GUI%20sketch.003.jpgGUI%20sketch.010.jpg
GUI%20sketch.004.jpgGUI%20sketch.005.jpgGUI%20sketch.007.jpg
GUI%20sketch.006.jpgGUI%20sketch.016.jpg

GUI%20sketch.008.jpgGUI%20sketch.009.jpg

GUI%20sketch.011.jpgGUI%20sketch.012.jpg

GUI%20sketch.013.jpgGUI%20sketch.014.jpg

GUI%20sketch.015.jpgGUI%20sketch.017.jpg
GUI%20sketch.019.jpg

Use-Cases


Use-Cases for Creating and Deleting Accounts

Creating an account
Primary Actor: Tthe User)
Second Actor: Server
Goal: Creating an account
Pre-condition: User has open the application
Main Path:
  1. User press the “Sign Up” button in the log in screen
  2. The app turns to Register screen
  3. User types in the username for new account in the textbox label “Username”
  4. User types in email address for new account in the textbox labeled “E-mail”
  5. User types in password for the new account in the textbox labeled “Password”
  6. User types in password again in the textbox labeled “Confirm Password”
  7. User presses “Register” button
  8. A new account is created in the server and a confirmation email is sent to the new user’s email address
Alternate Path:
  1. User presses “Cancel” button
  2. The account creation procedure is cancelled

Deleting an account
Primary Actor: User
Second Actor: Server
Goal: Deleting an account
Pre-condition: User has entered the profile screen in the app
Main Path:
  1. User presses the button labeled “Delete Account”
  2. A confirmation window pops up showing “Are you sure to delete the account Username: EmailAddress?”
  3. User presses “OK” button in the confirmation window
  4. This account is deleted from the server
Alternate Path:
  1. User presses “Cancel” button in the confirmation window
  2. This account is kept in the server
  3. The pop up window disappears and the User stays in the profile screen

Filing in detailed account information
Primary Actor: User
Second Actor: Server
Goal: Acquire detailed User information
Pre-condition: User has entered the profile screen in the app
Main Path:
  1. User presses the word “Edit” in the upper right corner
  2. User types in username in the textbox labeled “Username”
  3. (Optional) User types in real name in textboxes labeled “Name”
  4. User types in email address in the textbox labeled “Email”
  5. (Optional) User presses the portrait logo
  6. (Optional) A window pops up showing “Take a photo new”, “Upload from my album” and “Cancel”
  7. (Optional) User takes a photo or chooses a photo from album
  8. (Optional) A confirmation window pops up to confirm chosen photo
  9. (Optional) User presses “Yes” to upload profile photo or presses “No” to go back to 6
  10. (Optional) User choose Male or Female in the textbox labeled “Gender”
  11. (Optional) User types in workplace in textboxes labeled “Workplace”
  12. User presses the button labeled “Confirm” to confirm changes made to the profile
  13. Detailed User information is updated in the server
Alternate Path:
  1. User presses the button labeled “Cancel” to cancel changes made to the profile
  2. User information is not changed in the server


Use-Cases Related to Setting Availability


Turn on availability status
Primary actor: user
Secondary actors: contacts
Goal: set the status to be "available"
Pre-Condition: user has logged in
Main Path:
  1. On the “invites” page, user switches the Available Status button to “on”
    1. If one contact is in the Visibility List, the availability indicator of this user on that contact’s “Contacts” page turns on
    2. The profile page of the user on that contact’s interface shows "available"

Turn off availability status
Primary actor: user
Secondary actors: contacts
Goal: set the status to be "unavailable"
Pre-Condition: user has logged in
Main Path:
  1. On the “invites” page, user switches the Available Status button to “off”
  2. The availability indicator of this user on all contacts’ “Contacts” page turns off
  3. The profile page of the user on all contacts’ interface shows “unavailable"

Set Visibility List
Primary actor: user
Secondary actors: contacts
Goal: set the Visibility List. Only the contacts in the list can see the user as available when user’s status is available
Pre-Condition: user has logged in and on the Profile page
Main Path:
  1. User pushes the “Contacts” button to enter the Contacts page
  2. User check or on check the box for “Set Visibility” on each line of the contacts
    1. If user’s availability status is currently on, the availability indicator of this user on the “Contacts” page of the chosen contacts turns on
    2. The profile of the user on the chosen contacts’ interface shows "available"

Schedule availability status

Primary actor: user
Secondary actors: friends
Goal: pre-set the availability status in fixed time slots
Pre-Condition: user has logged in
Main Path:
  1. User pushes the “Schedule Availability” button and enters the “Schedule Availability” page
  2. User pushes the “Add” button and enters the “Add Schedule” page
  3. User enters the date, starting(from) and ending(to) points of the time slot
  4. User pushes “Available” button
    1. User can choose repeat pattern
  5. User push “Accept” button
    1. User can push “Cancel” button to return to the “Schedule Availability” page without saving
  6. User return to the “Schedule Availability” page, an event label is created with “Available” and the time slot information
    1. When the time slot is reached, if one contact is in the Visibility List, the availability indicator of this user on that contact’s “Contacts” page turns on
    2. The profile page of the user on that contact’s interface shows "available"
  7. If the event is not repeating, the app deletes the event label automatically from the setting page of the user when availability time slot is passed
Alternative Path:
  1. User selects friends who will see his/her "unavailable" status
  2. User clicks the "set unavailable" button
  3. An event label is created with the time slot information
  4. When the time slot is reached, the availability indicators go off beside the friends name that are chosen
  5. And the profile of the user on the chosen friends interface shows "unavailable"

Delete a scheduled availability status

Primary actor: user
Secondary actors: friends
Goal: delete the availability status in fixed time slots
Pre-Condition: user has logged
in and on the “Schedule Availability” page
Main Path:
  1. User pushes the “Edit” button
  2. A “Delete” button shows on each event label 
  3. User click the “Delete" button on an event label 
  4. A confirmation pops up 
  5. User click the button to confirm the deletion
    1. User can click “cancel” and return to step 2
  6. The app deletes the event label from the setting page User click the "delete" button on the event label

Automatically turning off the availability status
Primary actor: user
Secondary actors: server, friends
Goal: turn off the available status of a user when the app is turned off
Main Path:
  1. User turns off the app
  2. The server set the user's status to be unavailable
  3. The availability indicator of this user on all contacts’ “Contacts” page turns off
  4. The profile of the user on all the contacts’ interface shows "unavailable"

Automatically turning on the availability status
Primary actor: user
Secondary actors: server, contacts
Goal: turn on the available status of a user when the app is turned on
Main Path:
  1. User turns on the app
  2. The server set the user's status to be available
    1. If one contact is in the Visibility List, the availability indicator of this user on that contact’s “Contacts” page turns on
    2. The profile page of the user on that contact’s interface shows "available"



Use-Cases Related to Posting and Responding to Meal Notifications

Create meal notification
Primary actor: poster
Goal: Create an invitation to be disseminated amongst friends
Pre-Condition: The poster has logged in
Main Path:
  1. The poster pushes a "create invitation" button
  2. The app will show a list of restaurants.
  3. The poster must select:
    1. One restaurant,
    2. Multiple restaurants, or
    3. Input new restaurant name
  4. The app displays the selected restaurant
  5. The poster selects the start time for availability to begin meal
  6. The poster selects the end time for availability to begin meal, or selects from a list of duration options (e.g. 30 mins, 1 hour, etc.)
  7. The poster selects the approximate meal duration selects from a list of duration options (e.g. 30 mins, 1 hour, etc.)
  8. The poster optionally sets a meet-up location
  9. The poster presses the “select friends” button to enter the next phase.

Select recipients for meal notification
Primary actor:
poster
Goal: Select friends to which an invitation can be sent
Pre-Condition: The poster has created a meal invitation
Main Path:
  1. The poster pushes the “select friends” button
  2. The app shows a list of friends and preset friend groups
  3. The poster selects which friends and groups of friends will receive the invitation
  4. The app displays the list of selected friends to which the invitation will be sent
    1. The app has an option to save this set as a custom friends group or override an existing friends group
  5. The poster sets the maximum number of friend acceptance before the invitation is closed
  6. The poster sets if this meal notification is open to other parties (e.g. meal notification to extendable to friends of friends and no more)
  7. The poster presses the “complete post details” button to enter the next phase.

Post meal notification
Primary actor: poster
Goal: Post the meal notification to be seen by selected friends
Pre-Condition: The poster has created meal notification post and selected target friends
Main Path:
  1. The poster presses the “complete post details” button
  2. The poster selects a start time for meal notification post time (default is “now”).
  3. The poster can select an optional meal notification expiry time, or select from various options for meal notification durations (e.g. 30 mins, 1 hour, etc.)
  4. The app displays an option to save this meal notification under a name for future use
    1. If the poster types in a name for the meal notification and saves
    2. The app acknowledges the meal notification has been saved
    3. If the poster does not opt to save, then the meal notification will be stored as “current meal notification”
  5. The poster presses “post” button to post

Edit meal notification
Primary actor: poster
Goal: Edit an existing meal notification
Pre-Condition: poster has created at least one meal notification
Main Path:
  1. The poster pushes a "edit meal notification" button
  2. The app shows the current active meal notification (if available) and the list of saved meal notifications
  3. The poster selects which meal notification to edit
  4. The app returns the “create meal meal notification” page with fields filled
  5. The poster edits the fields and continues the process starting at the “create meal notification” page
  6. The poster saves the meal notification
    1. The poster can also post the meal notification

Delete meal notification
Primary actor: poster
Goal: Delete meal notification
Pre-Condition: poster has created at least one meal notification
Main Path:
  1. The poster pushes a "edit meal notification" button
  2. The app shows the current active meal notification (if available) and the list of saved meal notifications
  3. The poster selects which meal notification to delete
  4. The app deletes the meal notification and returns “meal notification deleted” message

Respond to meal notification
Primary actor: recipient
Secondary actor: poster
Goal: Respond to an meal notification
Pre-Condition: recipient has received an meal notification from a friend
Main Path:
  1. The recipient clicks on an active meal notification
  2. The recipient reads the information on the meal notification (see “notification”)
  3. The recipient can respond in one of the following cases:
    1. Decline the meal notification
      1. The app sends a decline to the inviter
      2. The app dismisses the meal notification from the recipient’s active meal notification list
    2. Ignore the meal notification
      1. The app dismisses the meal notification from the recipient’s active meal notification list
    3. Accept the meal notification
      1. If the inviter has set the meal notification to “open/extendable” and the maximum number of invitees has not been reached, the app displays a list of friends
      2. The recipient can select another friend (if that friend is a recipient of the app) or manually type in the name of the friend (This friend of friend is definitely going)
      3. The app sends the acceptance (with the numbers and names of accepted invitees) back to the inviter


Use-Cases Related to Push Notifications

Receive a Notification
Primary actor : recipient (user)
Secondary actor : Poster (user)
Precondition : Poster must have sent notification to recipient.Recipient must be available to Poster.
Goal : Display the notification on device
Main Path :
  1. Check if recipient is available to poster. If yes go to step 2 else go to step 3.
  2. Post the notification on the user's home screen. RETURN.
  3. Store the notification in the recipient's deffered notification list for push to recipient in case he/she becomes available before the notification expires.

Receive a Notification on Changing Availability Status
Primary actor : recipient (user)
Secondary actor : Poster (user)
Pre-Condition : Recipients deffered notification must be non-empty.
Goal : Display the notification(s) on device
Main Path :
  1. For each notification in the recipients deffered notification list, check If notification has not yet expired.
    1. If expired, delete notification else go to step 2.
  2. If recipient is available to poster of notification. If yes go to step 3 else go to step 4.
  3. Post the notification on the user's home screen. RETURN.
  4. Store the notification in the recipient's deffered notification list for push to recipient in case he/she becomes available before the notification expires.

Post a Capacity Update Notification
Primary actor : Poster (user)
Secondary actor : Recipient (user)
Pre-Condition : A recipient must have sent an acceptance notification to the poster.
Goal : Send a Capacity update to all recipients that are available to the poster.
Main Path:
  1. On recieving the acceptance notification, update the current capacity field in meal notification information. Go to step 2.
  2. Check if current capacity is less than maximum meal capacity. If so, go to step 3 else go to step 4.
  3. Send a capacity update notification consisting of updated meal notification information to each recipient of the original meal notification. RETURN.
  4. Close meal notification and send completion notification to all recipients of original notification.

Post an Update Notification
Primary actor : Poster (user)
secondar actor : Recipient (user)
Pre-Condition : Poster must have already sent a notification to recipients that is currently active.
Goal : Send updated notifcation to the recipients
Main Path:
  1. Update the relevant meal notification information fields
  2. Check if meal constraints are still unsatisified. If so, go to 3 else RETURN.
  3. Send an update notfication consisting of the updated meal notification information to all recipients of the original meal notification. RETURN.

Post a Friend Attending Notification
Primary actor : Poster (user)
Secondary actor : Recipient (user)
Pre-Condition : A recipient must have sent an acceptance notification to the poster.
Goal : Inform all other recipients who are contacts of the recipient that accepted the notification that given recipient is attending.
Main Path :
  1. Construct a friend attending notification.
  2. For all recipients R of the original meal notification that are contacts of the recipient that accepted the notification, send the friend attending notification to R.

Post a Completion Notification
Primary Actor : Poster (user)
Secondary actor(s) : Recipient (user)
Pre-Condition : Meal notification constraints must be satisified.
Goal : Send a Completion Notification to all recipients that are available to the poster.
Main Path :
  1. Close the meal notification.
  2. Send a completion notification to all recipients that are available to the poster.

Post a Cancellation Notification
Primary Actor : Poster (user)
Secondary Actor(s) : Recipient(s) (users)
Pre-Condition : The poster must have pushed a meal notification to recipients which is currently active ( i.e. not expired)
Goal : Cancel the posted meal notification.
Main Path :
  1. Post a cancellation message to all recipients of the original meal notification.

Send a Contact Request Notification
----------------------------------------
Primary Actor : Poster (user)
Secondary Actor(s) : Recipient (users)
Precondition : The poster must have added the recipeient as a contact.
Goal : Send a Contact Request.
Main Path :
1. Send the Contact Request Notification.

Recieve a Contact Accept Notification
------------------------------------------
Primary Actor : Poster (user)
Secondary Actor(s) : Recipient (users)
Precondition : The poster must have added the recipeient as a contact. The contact must have accepted the Contact Request Notifcation and sent the Contact Accept Notification.
Goal : Recieve A Contact Accept Notification.
Main Path :
1. If Contact Request Notifcation is still active then go to step 2 else RETURN.
2. Recieve the Contact Accept Notification.RETURN,


Use-Cases for Contact Management

Use Case to Add a Contact
Primary actor: user
Goal: Add a contact to the user's list of contacts
Pre-Condition: user has logged in. Contact must be a valid user of the application.
Main Path:
  1. Go to the contacts page
  2. Select the "people" tab
  3. Press the "add contact" button.
  4. On "Add page button" select "search by username".
  5. Type in contact's username.
  6. Press search button
  7. Select right contact from search results.
  8. Press "confirm" button.
  9. An Add Contact Notification is sent to contact. If the contact sends an accept contact invitation back then contact is added to contact list.
Alternate Path:
  1. Go to the contacts page
  2. Select the people tab
  3. Press the "add contact" button.
  4. On "Add page button" select "search by email".
  5. Type in contact's email.
  6. Press search button
  7. Select right contact from search results.
  8. Press "confirm" button.
  9. An Add Contact Notification is sent to contact. If the contact sends an accept contact invitation back then contact is added to contact list.

Use Case to Delete a Contact
Primary actor: user
Goal: Delete a contact from the user's list of contacts
Pre-Condition: user has logged in. Contact must be a valid user of the application. Contact must be present in the user's contact list.
Main Path:
  1. Go to the contacts page
  2. Select the "people" tab
  3. Search for contact to be deleted.
  4. Swipe sideways. Delete and edit appear.
  5. Hit delete button.
  6. On the prompt that appears, press "confirm".

Use Case to Create Groups
Primary actor: user
Goal: Delete a contact from the user's list of contacts
Pre-Condition: user has logged in. Contact must be a valid user of the application. Contact must be present in the user's contact list.
Main Path:
  1. Go to the contacts page
  2. Select "group" tab.
  3. Click the "add group" (+) button.
  4. Type group name in the "Group Name" textbox.
  5. Select contacts from the "Select Friends" list.
  6. Hit Confirm.

Use Case to Delete Groups
Primary actor: user
Goal: Delete a group from the user's list of contact groups
Pre-Condition: user has logged in. group must be present in the user's contact groups.
Main Path:
  1. Go to the contacts page
  2. Select the "group" tab
  3. Search for group to be deleted.
  4. Swipe sideways. Delete and edit appear.
  5. Hit delete button.
  6. On the prompt that appears, press "confirm"

Use Case to Edit A Contact's Details
Primary actor: user
Goal: Edit contact information for a contact in the user's contact list.
Pre-Condition: user has logged in. Contact must be a valid user of the application. Contact must be present in the user's contact list.
Main Path:
  1. Go to the contacts page
  2. Select the "people" tab
  3. Search for contact to be edited.
  4. Swipe sideways. Delete and edit appear.
  5. Hit edit button.
  6. Make the requisite changes.
  7. Press "confirm"

Use Case to Edit A Group's Details
Primary actor: user
Goal: Edit group information for a group in the user's contact list.
Pre-Condition: user has logged in. Group must be present in the user's contact list.
Main Path:
  1. Go to the contacts page
  2. Select the "group" tab
  3. Search for contact to be edited.
  4. Swipe sideways. Delete and edit appear.
  5. Hit edit button.
  6. Make the requisite changes.
  7. Press "confirm"

UML Activity Diagram

ActivityDiagram.jpg

Architecture
Resources