From 7caf88f4c0cf3524b8206b1daa0bb0cbf214dfa5 Mon Sep 17 00:00:00 2001 From: Quang Nguyen Date: Thu, 21 Nov 2019 10:40:48 -0800 Subject: [PATCH 1/2] added distance filter for display neabry sessions on the main page --- .../com/javaawesome/tag/MainActivity.java | 22 +++++++++++++++++-- .../com/javaawesome/tag/MapsActivity.java | 21 +++++++++--------- .../java/com/javaawesome/tag/Utility.java | 19 ++++++++++++++++ 3 files changed, 49 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/com/javaawesome/tag/Utility.java diff --git a/app/src/main/java/com/javaawesome/tag/MainActivity.java b/app/src/main/java/com/javaawesome/tag/MainActivity.java index d4a6e6b..8bcdd66 100644 --- a/app/src/main/java/com/javaawesome/tag/MainActivity.java +++ b/app/src/main/java/com/javaawesome/tag/MainActivity.java @@ -62,6 +62,7 @@ public class MainActivity extends AppCompatActivity implements SessionAdapter.On LatLng currentUserLocation; LocationManager locationManager; AlertDialog alert; + private final int distanceForNearbySessions = 1000; @Override protected void onCreate(Bundle savedInstanceState) { @@ -118,7 +119,6 @@ protected void onResume() { } else { buildAlertMessageNoGps(); } - queryAllSessions(); } // Create new game session and go to map page @@ -239,7 +239,8 @@ public void onResponse(@Nonnull final Response response) @Override public void handleMessage(Message inputMessage) { sessions.clear(); - sessions.addAll(response.data().listSessions().items()); + List filteredSessions = filterSessionsBasedOnDistance(response.data().listSessions().items()); + sessions.addAll(filteredSessions); sessionAdapter.notifyDataSetChanged(); } }; @@ -264,6 +265,7 @@ public void onSuccess(final Location location) { @Override public void run() { currentUserLocation = new LatLng(location.getLatitude(), location.getLongitude()); + queryAllSessions(); Log.i(TAG, "playerId in getcurrentUserlocation " + playerId); if (playerId == null) { createPlayer(); @@ -333,6 +335,7 @@ public void onFailure(@Nonnull ApolloException e) { }); } + // Checks if Gps Location is turned on or not on the user's phone private boolean checkGpsStatus() { locationManager = (LocationManager)getApplicationContext().getSystemService(Context.LOCATION_SERVICE); return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); @@ -355,4 +358,19 @@ public void onClick(final DialogInterface dialog, final int id) { alert = builder.create(); alert.show(); } + + // filter out list of sessions to a smaller list that consist of sessions nearby the player's location + private List filterSessionsBasedOnDistance(List allSessions) { + List filteredSessions = new LinkedList<>(); + for (ListSessionsQuery.Item session : allSessions) { + double distanceBetweenSessionAndPlayer = Utility.distanceBetweenLatLongPoints(currentUserLocation.latitude, + currentUserLocation.longitude, + session.lat(), + session.lon()); + if (distanceBetweenSessionAndPlayer < distanceForNearbySessions) { + filteredSessions.add(session); + } + } + return filteredSessions; + } } \ No newline at end of file diff --git a/app/src/main/java/com/javaawesome/tag/MapsActivity.java b/app/src/main/java/com/javaawesome/tag/MapsActivity.java index 87d3b53..16a8e79 100644 --- a/app/src/main/java/com/javaawesome/tag/MapsActivity.java +++ b/app/src/main/java/com/javaawesome/tag/MapsActivity.java @@ -96,15 +96,15 @@ protected void onCreate(Bundle savedInstanceState) { // initialize connection with google location services mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); - mFusedLocationClient.getLastLocation() - .addOnSuccessListener(this, new OnSuccessListener() { - @Override - public void onSuccess(Location location) { - if(location != null){ - startingPoint = new LatLng(location.getLatitude(), location.getLongitude()); - } - } - }); +// mFusedLocationClient.getLastLocation() +// .addOnSuccessListener(this, new OnSuccessListener() { +// @Override +// public void onSuccess(Location location) { +// if(location != null){ +// startingPoint = new LatLng(location.getLatitude(), location.getLongitude()); +// } +// } +// }); // establish connection to AWS awsAppSyncClient = AWSAppSyncClient.builder() @@ -344,7 +344,6 @@ private void updateMarkerAndCircleForAllPlayers(List players) { player.getMarker().setIcon(BitmapDescriptorFactory.defaultMarker(itHue)); player.getCircle().setStrokeColor(itColor); - // mMap.addCircle(player.getCircle()); } } @@ -357,7 +356,7 @@ private void updateMarkerAndCircleForAllPlayers(List players) { // Equation is from https://stackoverflow.com/questions/639695/how-to-convert-latitude-or-longitude-to-meters // convert to two location points to distance between them in meters - private double distanceBetweenLatLongPoints(double lat1, double long1, double lat2, double long2) { + protected double distanceBetweenLatLongPoints(double lat1, double long1, double lat2, double long2) { // radius of the Earth in km double R = 6378.137; double dLat = (lat2 * Math.PI / 180) - (lat1 * Math.PI / 180); diff --git a/app/src/main/java/com/javaawesome/tag/Utility.java b/app/src/main/java/com/javaawesome/tag/Utility.java new file mode 100644 index 0000000..248be99 --- /dev/null +++ b/app/src/main/java/com/javaawesome/tag/Utility.java @@ -0,0 +1,19 @@ +package com.javaawesome.tag; + +public class Utility { + + // Equation is from https://stackoverflow.com/questions/639695/how-to-convert-latitude-or-longitude-to-meters + // convert to two location points to distance between them in meters + protected static double distanceBetweenLatLongPoints(double lat1, double long1, double lat2, double long2) { + // radius of the Earth in km + double R = 6378.137; + double dLat = (lat2 * Math.PI / 180) - (lat1 * Math.PI / 180); + double dLong = (long2 * Math.PI / 180) - (long1 * Math.PI / 180); + double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) * + Math.sin(dLong / 2) * Math.sin(dLong / 2); + double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); + double d = R * c; + return d * 1000; + } +} From 69b52c3dd83433a9a030d823074523a5606740cd Mon Sep 17 00:00:00 2001 From: Quang Nguyen Date: Thu, 21 Nov 2019 15:53:14 -0800 Subject: [PATCH 2/2] updated GraphQL schema for player object to include photo --- .../generated/graphql/mutations.graphql | 6 +++ .../amplify/generated/graphql/queries.graphql | 3 ++ .../generated/graphql/subscriptions.graphql | 6 +++ app/src/main/graphql/schema.json | 42 +++++++++++++++++++ 4 files changed, 57 insertions(+) diff --git a/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/mutations.graphql b/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/mutations.graphql index aa8ed08..74936f1 100644 --- a/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/mutations.graphql +++ b/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/mutations.graphql @@ -10,6 +10,7 @@ mutation CreateSession($input: CreateSessionInput!) { isIt lat lon + Photo } nextToken } @@ -29,6 +30,7 @@ mutation UpdateSession($input: UpdateSessionInput!) { isIt lat lon + Photo } nextToken } @@ -48,6 +50,7 @@ mutation DeleteSession($input: DeleteSessionInput!) { isIt lat lon + Photo } nextToken } @@ -73,6 +76,7 @@ mutation CreatePlayer($input: CreatePlayerInput!) { isIt lat lon + Photo } } mutation UpdatePlayer($input: UpdatePlayerInput!) { @@ -92,6 +96,7 @@ mutation UpdatePlayer($input: UpdatePlayerInput!) { isIt lat lon + Photo } } mutation DeletePlayer($input: DeletePlayerInput!) { @@ -111,5 +116,6 @@ mutation DeletePlayer($input: DeletePlayerInput!) { isIt lat lon + Photo } } diff --git a/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/queries.graphql b/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/queries.graphql index 871a1f7..ce402c9 100644 --- a/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/queries.graphql +++ b/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/queries.graphql @@ -10,6 +10,7 @@ query GetSession($id: ID!) { isIt lat lon + Photo } nextToken } @@ -54,6 +55,7 @@ query GetPlayer($id: ID!) { isIt lat lon + Photo } } query ListPlayers( @@ -75,6 +77,7 @@ query ListPlayers( isIt lat lon + Photo } nextToken } diff --git a/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/subscriptions.graphql b/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/subscriptions.graphql index 61bd172..e1d6052 100644 --- a/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/subscriptions.graphql +++ b/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/subscriptions.graphql @@ -10,6 +10,7 @@ subscription OnCreateSession { isIt lat lon + Photo } nextToken } @@ -29,6 +30,7 @@ subscription OnUpdateSession { isIt lat lon + Photo } nextToken } @@ -48,6 +50,7 @@ subscription OnDeleteSession { isIt lat lon + Photo } nextToken } @@ -73,6 +76,7 @@ subscription OnCreatePlayer { isIt lat lon + Photo } } subscription OnUpdatePlayer { @@ -92,6 +96,7 @@ subscription OnUpdatePlayer { isIt lat lon + Photo } } subscription OnDeletePlayer { @@ -111,5 +116,6 @@ subscription OnDeletePlayer { isIt lat lon + Photo } } diff --git a/app/src/main/graphql/schema.json b/app/src/main/graphql/schema.json index 7a4e15e..959af0f 100644 --- a/app/src/main/graphql/schema.json +++ b/app/src/main/graphql/schema.json @@ -381,6 +381,16 @@ }, "defaultValue": null }, + { + "name": "Photo", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "ModelStringFilterInput", + "ofType": null + }, + "defaultValue": null + }, { "name": "and", "description": null, @@ -978,6 +988,18 @@ }, "isDeprecated": false, "deprecationReason": null + }, + { + "name": "Photo", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null } ], "inputFields": null, @@ -1636,6 +1658,16 @@ }, "defaultValue": null }, + { + "name": "Photo", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, { "name": "playerSessionId", "description": null, @@ -1711,6 +1743,16 @@ }, "defaultValue": null }, + { + "name": "Photo", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, { "name": "playerSessionId", "description": null,