**Note: The map settings on the right is shown to display how to imitate a user's current location!
Due to the recent rise of hate-crimes, the risk of public danger has significantly escalated for the general population. In addition to this, with the slow integration of in-person activities during the pandemic, countless college campuses are preparing for a large percentage of in-person courses. With both the growth of potential harm and actual public population (especially that of college campuses), Wings inspired to help provide a safer commmunity in these uncertain times.
Wings is an Android application that connects users to others when they feel unsafe in their current conditions.
Users who are connected are confirmed to be safe "walking buddies" for each other, and are intended to walk together to some common, agreed upon destination. However, Wings intends to offer multiple ways to provide trusted safety sources such as: immediate connection to the police, one button notifcation to emrgency contacts, routing to the nearest registered safe spaces. Several safety precautions are taken during this pairing of users. Wings constantly tracks both users and saves real time information in a real time database. Both users' emergency information are held and and may be contacted at any time, even without a pairing to another user. Users may also choose to leave their buddy at any time.
Required Must-have Stories
Optional Nice-to-have Stories
Tab Navigation (Tab to Screen)
Flow Navigation (Screen to Screen) Login
https://www.figma.com/file/FvkFBW65HVYdpSDwqsKRMM/Wings?node-id=0%3A1
User Property | Type | Description |
---|---|---|
fname | String | user's first name |
lname | String | user's last name |
String | user's CPP email (MUST end in "@cpp.edu") | |
password | String | user's password |
PIN | Number | user's private 4-digit number to confirm ALL significant decisions! |
objectId | String | uniquely identifies this User in the Parse database |
username | String | user's username in their CPP email (everything before the "@cpp.edu") |
profileImage | File | the image to be displayed on the user's profile |
trustedContacts | Array[TrustedContact] | user's trusted contacts to be notified in case of emergency, max size of 5 |
friends | List of String (Array in Parse) | List of User objectId's that the user wants to keep in contact with |
currentLocation | Geopoint | the user's current location |
profileSetUp | boolean | whether or not the user's profile is set up |
rating | Number | average rating |
TrustedContact Property | Type | Description |
---|---|---|
user | Pointer | pointer to the User object who the Trusted Contact is associated with |
fname | String | Trusted contact's first name |
lname | String | Trusted contact's last name |
relationship | String | Trusted contact's relationship to the user |
phone | String | Trusted contact's mobile phone number |
String | Trusted contact's email |
Buddy Property | Type | Description |
---|---|---|
user | Pointer | points to the User object who currently needs to get to there destination |
meetingLocation | Geopoint | where the Buddy will meet their partner |
receivedBuddyRequests | List of BuddyRequest (Array in Parse) | List of all received BuddyRequests, need to respond to |
sentBuddyRequests | List of BuddyRequest (Array in Parse) | List of all sent BuddyRequests, waiting for a response |
hasBuddy | boolean | whether or not the Buddy is already paired |
onMeetingBuddy | boolean | whether or not the Buddy is currently meeting with their partner |
onBuddyTrip | boolean | whether or not the Buddy is currently on a BuddyTrip |
buddyTrip | Pointer | points to the BuddyTrip object the Buddy is currently on IF applicable, null otherwise |
objectId | String | uniquely identifies this User on this specific BuddyTrip, null if hasBuddy = false |
BuddyRequest Property | Type | Description |
---|---|---|
objectId | String | uniquely identifies this BuddyRequest |
sender | Pointer | points to the Buddy object who sent the BuddyRequest |
receiver | Pointer | points to the Buddy who needs to respond to the BuddyRequest |
isConfirmed | boolean | whether or not the BuddyRequest has been approved by both Buddies, otherwise, is waiting for a response |
methodOfMeeting | String | who's location the Buddies will meet at: "sender", "receiver", or "halfway" |
meetingLocation | Geopoint | the location where the buddies will head towards to meet |
chosenTargetLocation | Geopoint | where the buddies are ultimately walking together for |
BuddyTrip Property | Type | Description |
---|---|---|
objectId | String | uniquely identifies this BuddyTrip |
buddyOne | Pointer | points to the one of the Buddy objects in question |
buddyTwo | Pointer | points to the other Buddy object in question |
targetDestination | Geopoint | where the buddies are ultimately walking together for |
senderLocation | Geopoint | current location of the request sender |
receiverLocation | Geopoint | current location of the request receiver |
EST | Number | the calculated approximate time it will take for the pair to arrive at their targetDestination (minutes) |
timeElasped | Number | how long it has been since the BuddyTrip began (minutes) |
List of network requests by screen
Login screen
@Override
public void done(ParseUser user, ParseException e) {
if(user != null){
Log.d(DEBUG_TAG, "Login Success!!");
loginSuccess();
}
}
Register #2 screen:
user.setEmail(email);
user.setPassword(password);
user.setUsername(username);
Profile Setup screen and Settings screen:
Parse.getCurrentUser().setEmail(email);
Parse.getCurrentUser().setUsername(username);
Parse.getCurrentUser().setPIN(pin);
Home screen:
query.whereEqualTo(BuddyTrip.KEY_USER, Parse.getCurrentUser())
Edit Trusted Contacts Screen:
Parse.getCurrentUser().setTrustedContacts(list);
Search user screen:
query.whereEqualTo(User.KEY_USERNAME, input);
Choose Buddy screen:
(Read/GET) All Buddies who’s current location is X distance away
query.whereEqualTo(Buddy.KEY_CURRLOC, Parse.getCurrentUser().getLocation + X);
(Read/GET) All User’s who’s “Able to be a Buddy” is on
query.whereEqualTo(Buddy.KEY_CANBUDDY, true;