diff --git a/app/src/main/java/com/pulkit4tech/privy/MainActivity.java b/app/src/main/java/com/pulkit4tech/privy/MainActivity.java index 123a879..dc2be91 100644 --- a/app/src/main/java/com/pulkit4tech/privy/MainActivity.java +++ b/app/src/main/java/com/pulkit4tech/privy/MainActivity.java @@ -1,7 +1,9 @@ package com.pulkit4tech.privy; +import android.content.Intent; import android.content.pm.PackageManager; import android.support.annotation.NonNull; +import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.NavigationView; import android.support.design.widget.Snackbar; @@ -17,17 +19,26 @@ import android.util.Log; import android.view.Menu; import android.view.MenuItem; -import android.view.View; import android.widget.Toast; +import com.google.android.gms.location.places.Place; +import com.google.android.gms.location.places.ui.PlacePicker; +import com.pulkit4tech.privy.data.json.Location; +import com.pulkit4tech.privy.data.json.PostPrivyRequest; import com.pulkit4tech.privy.fragments.PrivyMapsFragment; +import com.pulkit4tech.privy.utilities.NetworkRequest; import com.pulkit4tech.privy.utilities.NoLocationPermission; +import java.util.ArrayList; + import static com.pulkit4tech.privy.constants.Constants.DEBUG; import static com.pulkit4tech.privy.constants.Constants.MY_PERMISSIONS_REQUEST_FINE_LOCATIONS; +import static com.pulkit4tech.privy.constants.Constants.PLACE_PICKER_REQUEST; public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { + private NavigationView navigationView; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -48,13 +59,13 @@ private void setUpInfo() { setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); - fab.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) - .setAction("Action", null).show(); - } - }); +// fab.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +// Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) +// .setAction("Action", null); +// } +// }); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( @@ -62,7 +73,7 @@ public void onClick(View view) { drawer.setDrawerListener(toggle); toggle.syncState(); - NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); + navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); navigationView.getMenu().getItem(0).setChecked(true); loadMapFragment(); @@ -80,11 +91,10 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis switch (requestCode) { case MY_PERMISSIONS_REQUEST_FINE_LOCATIONS: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - Toast.makeText(this, "Permission granted!!", Toast.LENGTH_SHORT).show(); - loadFragment(new PrivyMapsFragment()); + snackMsg("Permission granted!!"); } else { loadFragment(new NoLocationPermission()); - Toast.makeText(this, "Please give permission for location", Toast.LENGTH_SHORT).show(); + snackMsg("Please give permission for location"); } break; @@ -94,7 +104,7 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis } private void loadFragment(Fragment fragment) { - getSupportFragmentManager().beginTransaction().add(R.id.frame_container, fragment).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit(); + getSupportFragmentManager().beginTransaction().add(R.id.frame_container, fragment, fragment.getClass().getName()).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit(); } @Override @@ -137,6 +147,8 @@ public boolean onNavigationItemSelected(MenuItem item) { if (id == R.id.nav_nearby_privy) { loadMapFragment(); + } else if (id == R.id.nav_request_new) { + loadAddNewPrivyActivity(); } //TODO : Add other conditions @@ -145,6 +157,50 @@ public boolean onNavigationItemSelected(MenuItem item) { return true; } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == PLACE_PICKER_REQUEST) { + if (resultCode == RESULT_OK) { + Place placeToAdd = PlacePicker.getPlace(data, this); + if (placeToAdd.getLatLng() != null) { + requestNewPrivy(placeToAdd); + } else { + snackMsg("Some Error!! Was not able to retrieve information properly"); + } + } else { + snackMsg("Please Select a Location if you wished to request Privy!"); + } + + navigationView.getMenu().getItem(0).setChecked(true); + loadMapFragment(); + } + } + + private void requestNewPrivy(Place placeToAdd) { + PostPrivyRequest postdata = new PostPrivyRequest(); + Location loc = new Location(); + loc.setLat(placeToAdd.getLatLng().latitude); + loc.setLng(placeToAdd.getLatLng().longitude); + postdata.setLocation(loc); + postdata.setAccuracy(50); + postdata.setName("Public Toilet"); + postdata.setAddress(placeToAdd.getAddress().toString()); + ArrayList types = new ArrayList(); + types.add("establishment"); + postdata.setTypes(types); + postdata.setLanguage("en"); + new NetworkRequest(this, postdata).postRequest(); + } + + private void loadAddNewPrivyActivity() { + PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder(); + try { + startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST); + } catch (Exception e) { + Log.d(DEBUG, e.toString()); + } + } + private void loadMapFragment() { if (!checkLocationEnabledPermission()) { ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_FINE_LOCATIONS); @@ -153,6 +209,14 @@ private void loadMapFragment() { } } + public void snackMsg(String msg) { + Snackbar.make((CoordinatorLayout) findViewById(R.id.coordinator_layout), msg, Snackbar.LENGTH_LONG).show(); + } + +// private void toastMsg(String msg) { +// Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); +// } + private boolean checkLocationEnabledPermission() { return ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; } diff --git a/app/src/main/java/com/pulkit4tech/privy/constants/Constants.java b/app/src/main/java/com/pulkit4tech/privy/constants/Constants.java index b8e8bb5..4b505f7 100644 --- a/app/src/main/java/com/pulkit4tech/privy/constants/Constants.java +++ b/app/src/main/java/com/pulkit4tech/privy/constants/Constants.java @@ -4,4 +4,5 @@ public class Constants { public static final String DEBUG = "DEBUGGER"; public static final int CAMERA_ANIMATION_DURATION = 2500; public static final int MY_PERMISSIONS_REQUEST_FINE_LOCATIONS = 1; + public static final int PLACE_PICKER_REQUEST = 2; } diff --git a/app/src/main/java/com/pulkit4tech/privy/data/json/PrivyPost.java b/app/src/main/java/com/pulkit4tech/privy/data/json/GetPrivyResponse.java similarity index 93% rename from app/src/main/java/com/pulkit4tech/privy/data/json/PrivyPost.java rename to app/src/main/java/com/pulkit4tech/privy/data/json/GetPrivyResponse.java index 1cd7a8a..19ffac7 100644 --- a/app/src/main/java/com/pulkit4tech/privy/data/json/PrivyPost.java +++ b/app/src/main/java/com/pulkit4tech/privy/data/json/GetPrivyResponse.java @@ -2,7 +2,7 @@ import java.util.List; -public class PrivyPost { +public class GetPrivyResponse { private List html_attributions; private List results; private String status; @@ -21,7 +21,7 @@ public List getResults() { @Override public String toString() { - return "PrivyPost{" + + return "GetPrivyResponse{" + "html_attributions=" + html_attributions + ", results=" + results + ", status='" + status + '\'' + diff --git a/app/src/main/java/com/pulkit4tech/privy/data/json/PostPrivyRequest.java b/app/src/main/java/com/pulkit4tech/privy/data/json/PostPrivyRequest.java new file mode 100644 index 0000000..e20531a --- /dev/null +++ b/app/src/main/java/com/pulkit4tech/privy/data/json/PostPrivyRequest.java @@ -0,0 +1,72 @@ +package com.pulkit4tech.privy.data.json; + +import java.util.ArrayList; + +public class PostPrivyRequest { + private Location location; + private int accuracy; + private String name; + private String address; + private ArrayList types; + private String language; + + public Location getLocation() { + return location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public int getAccuracy() { + return accuracy; + } + + public void setAccuracy(int accuracy) { + this.accuracy = accuracy; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public ArrayList getTypes() { + return types; + } + + public void setTypes(ArrayList types) { + this.types = types; + } + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } + + @Override + public String toString() { + return "PostPrivyRequest{" + + "location=" + location + + ", accuracy=" + accuracy + + ", name='" + name + '\'' + + ", address='" + address + '\'' + + ", types=" + types + + ", language='" + language + '\'' + + '}'; + } +} diff --git a/app/src/main/java/com/pulkit4tech/privy/data/json/PostPrivyResponse.java b/app/src/main/java/com/pulkit4tech/privy/data/json/PostPrivyResponse.java new file mode 100644 index 0000000..f0d4bf3 --- /dev/null +++ b/app/src/main/java/com/pulkit4tech/privy/data/json/PostPrivyResponse.java @@ -0,0 +1,60 @@ +package com.pulkit4tech.privy.data.json; + +public class PostPrivyResponse { + private String id; + private String place_id; + private String reference; + private String scope; + private String status; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getPlaceid() { + return place_id; + } + + public void setPlaceid(String place_id) { + this.place_id = place_id; + } + + public String getReference() { + return reference; + } + + public void setReference(String reference) { + this.reference = reference; + } + + public String getScope() { + return scope; + } + + public void setScope(String scope) { + this.scope = scope; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + @Override + public String toString() { + return "PostPrivyResponse{" + + "id='" + id + '\'' + + ", place_id='" + place_id + '\'' + + ", reference='" + reference + '\'' + + ", scope='" + scope + '\'' + + ", status='" + status + '\'' + + '}'; + } +} diff --git a/app/src/main/java/com/pulkit4tech/privy/fragments/PrivyMapsFragment.java b/app/src/main/java/com/pulkit4tech/privy/fragments/PrivyMapsFragment.java index 2aff34d..ba5be7e 100644 --- a/app/src/main/java/com/pulkit4tech/privy/fragments/PrivyMapsFragment.java +++ b/app/src/main/java/com/pulkit4tech/privy/fragments/PrivyMapsFragment.java @@ -5,6 +5,8 @@ import android.content.pm.PackageManager; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.design.widget.CoordinatorLayout; +import android.support.design.widget.Snackbar; import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; import android.util.Log; @@ -24,7 +26,7 @@ import com.pulkit4tech.privy.data.LocationData; import com.pulkit4tech.privy.data.json.MarkerData; import com.pulkit4tech.privy.utilities.LocationServices; -import com.pulkit4tech.privy.utilities.RequestData; +import com.pulkit4tech.privy.utilities.NetworkRequest; import java.util.HashMap; @@ -140,7 +142,7 @@ private void moveCameraToMyLocation() { changeCamera(CameraUpdateFactory.newCameraPosition(MY_LOCATION_CAMERA_POS), new GoogleMap.CancelableCallback() { @Override public void onFinish() { - Toast.makeText(mContext, "Animation Finished", Toast.LENGTH_SHORT).show(); + snackMsg("Animation Finished"); } @Override @@ -160,6 +162,10 @@ private boolean checkLocationEnabledPermission() { } private void markNearbyPrivys(LatLng myLocation) { - new RequestData(mContext, mMap, universalMarkers, myLocation).getMarkerData(); + new NetworkRequest(mContext, mMap, universalMarkers, myLocation).getMarkerData(); + } + + public void snackMsg(String msg) { + Snackbar.make((CoordinatorLayout) getActivity().findViewById(R.id.coordinator_layout), msg, Snackbar.LENGTH_LONG).show(); } } diff --git a/app/src/main/java/com/pulkit4tech/privy/utilities/LocationServices.java b/app/src/main/java/com/pulkit4tech/privy/utilities/LocationServices.java index ba1d2f6..9cad942 100644 --- a/app/src/main/java/com/pulkit4tech/privy/utilities/LocationServices.java +++ b/app/src/main/java/com/pulkit4tech/privy/utilities/LocationServices.java @@ -11,7 +11,6 @@ import android.support.v4.app.ActivityCompat; import android.widget.Toast; - import com.google.android.gms.maps.model.LatLng; import com.pulkit4tech.privy.data.LocationData; diff --git a/app/src/main/java/com/pulkit4tech/privy/utilities/RequestData.java b/app/src/main/java/com/pulkit4tech/privy/utilities/NetworkRequest.java similarity index 57% rename from app/src/main/java/com/pulkit4tech/privy/utilities/RequestData.java rename to app/src/main/java/com/pulkit4tech/privy/utilities/NetworkRequest.java index 59e22cc..b936eba 100644 --- a/app/src/main/java/com/pulkit4tech/privy/utilities/RequestData.java +++ b/app/src/main/java/com/pulkit4tech/privy/utilities/NetworkRequest.java @@ -9,6 +9,7 @@ import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import com.google.android.gms.maps.GoogleMap; @@ -20,18 +21,24 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.pulkit4tech.privy.R; +import com.pulkit4tech.privy.data.json.GetPrivyResponse; import com.pulkit4tech.privy.data.json.MarkerData; -import com.pulkit4tech.privy.data.json.PrivyPost; +import com.pulkit4tech.privy.data.json.PostPrivyRequest; +import com.pulkit4tech.privy.data.json.PostPrivyResponse; + +import org.json.JSONException; +import org.json.JSONObject; import java.util.HashMap; import static com.pulkit4tech.privy.constants.Constants.DEBUG; -public class RequestData { +public class NetworkRequest { private LatLng myLocation; private RequestQueue requestQueue; private Context mContext; + private PostPrivyRequest data; private GoogleMap mMap; private Gson gson; @@ -39,37 +46,59 @@ public class RequestData { private String NAME_KEY = "name"; private String NAME_VALUE = "toilet"; private String RADIUS = "radius"; +// private String RANKBY = "rankby"; +// private String DISTANCE = "distance"; private String GOOGLE_MAP_API_KEY = "key"; private String MAPS = "maps"; private String API = "api"; private String PLACE = "place"; private String NEARBY = "nearbysearch"; - private String TYPE = "json"; + private String ADD = "add"; + private String JSON = "json"; + private String OK = "OK"; + private HashMap hm; - public RequestData(Context mContext, GoogleMap mMap, HashMap universalMarkerHashMap, LatLng myLocation) { + public NetworkRequest(Context mContext, GoogleMap mMap, HashMap universalMarkerHashMap, LatLng myLocation) { this.myLocation = myLocation; this.mContext = mContext; this.mMap = mMap; hm = universalMarkerHashMap; gson = new GsonBuilder().create(); + requestQueue = Volley.newRequestQueue(mContext); } - public void getMarkerData() { + public NetworkRequest(Context mContext, PostPrivyRequest data) { + this.mContext = mContext; + this.data = data; + gson = new GsonBuilder().create(); requestQueue = Volley.newRequestQueue(mContext); + } + + public void getMarkerData() { String requestUrl = getRequestUrl(); Log.d(DEBUG, "URL: " + requestUrl); - StringRequest request = new StringRequest(Request.Method.GET, requestUrl, resListner, errorListner); + StringRequest request = new StringRequest(Request.Method.GET, requestUrl, getResListner, getErrorListner); + requestQueue.add(request); + } + + public void postRequest() { + JsonObjectRequest request = new JsonObjectRequest( + postRequestUrl(), + postJsonBody(), + postResListner, + postErrorListner + ); requestQueue.add(request); } - private Response.Listener resListner = new Response.Listener() { + private Response.Listener getResListner = new Response.Listener() { @Override public void onResponse(String response) { Log.d(DEBUG, "Response: " + response); - PrivyPost post = gson.fromJson(response, PrivyPost.class); + GetPrivyResponse post = gson.fromJson(response, GetPrivyResponse.class); if (post.getResults().size() == 0) { if (post.getStatus().equals("ZERO_RESULTS")) makeToast(mContext, mContext.getResources().getString(R.string.no_result_msg)); @@ -83,7 +112,7 @@ public void onResponse(String response) { } }; - private void addMarkers(PrivyPost post) { + private void addMarkers(GetPrivyResponse post) { for (MarkerData data : post.getResults()) { Log.d(DEBUG, data.toString()); BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE); @@ -104,7 +133,7 @@ public boolean onMarkerClick(Marker marker) { }); } - private Response.ErrorListener errorListner = new Response.ErrorListener() { + private Response.ErrorListener getErrorListner = new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { makeToast(mContext, mContext.getResources().getString(R.string.network_error)); @@ -120,15 +149,63 @@ private String getRequestUrl() { .appendPath(API) .appendPath(PLACE) .appendPath(NEARBY) - .appendPath(TYPE) + .appendPath(JSON) .encodedQuery(LOCATION + "=" + String.format("%f,%f", myLocation.latitude, myLocation.longitude)) .appendQueryParameter(NAME_KEY, NAME_VALUE) + // .appendQueryParameter(RANKBY,DISTANCE) .appendQueryParameter(RADIUS, mContext.getResources().getString(R.string.radius)) .appendQueryParameter(GOOGLE_MAP_API_KEY, mContext.getResources().getString(R.string.google_maps_key)); return builder.build().toString(); } + private Response.Listener postResListner = new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + PostPrivyResponse res = gson.fromJson(response.toString(), PostPrivyResponse.class); + if (res.getStatus().equals(OK)) { + makeToast(mContext, "Successfully added Privy. Thanks contributing to community."); + } else { + Log.d(DEBUG, res.toString()); + makeToast(mContext, "Some error while adding Privy!! Please try after sometime or please report."); + } + } + }; + + private Response.ErrorListener postErrorListner = new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + makeToast(mContext, mContext.getResources().getString(R.string.network_error)); + Log.d(DEBUG, error.toString()); + } + }; + + private String postRequestUrl() { + Uri.Builder builder = new Uri.Builder(); + builder.scheme("https") + .authority(mContext.getResources().getString(R.string.request_api)) + .appendPath(MAPS) + .appendPath(API) + .appendPath(PLACE) + .appendPath(ADD) + .appendPath(JSON) + .appendQueryParameter(GOOGLE_MAP_API_KEY, mContext.getResources().getString(R.string.google_maps_key)); + String url = builder.build().toString(); + Log.d(DEBUG, url); + return url; + } + + private JSONObject postJsonBody() { + JSONObject jsonObject = null; + try { + jsonObject = new JSONObject(gson.toJson(data)); + } catch (JSONException e) { + Log.d(DEBUG, e.toString()); + } + Log.d(DEBUG, jsonObject.toString()); + return jsonObject; + } + private void makeToast(Context context, String msg) { Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml index 458b4b0..8e664f9 100644 --- a/app/src/main/res/drawable/side_nav_bar.xml +++ b/app/src/main/res/drawable/side_nav_bar.xml @@ -2,8 +2,8 @@ android:shape="rectangle"> \ No newline at end of file diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml index 2f533bc..53d3c39 100644 --- a/app/src/main/res/layout/app_bar_main.xml +++ b/app/src/main/res/layout/app_bar_main.xml @@ -5,6 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" + android:id="@+id/coordinator_layout" tools:context="com.pulkit4tech.privy.MainActivity">