package com.vt.vthacks;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.Toast;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
// -------------------------------------------------------------------------
/**
* Represents the map
*
* @author Brandon Potts
* @version Apr 13, 2014
*/
public class MapFragment extends SupportMapFragment
{
private GoogleMap mMap;
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onResume();
mMap = super.getMap();
if (mMap != null) {
//sets the default initial position
LatLng intialPosition = new LatLng(37.225986 , -80.419954);
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
mMap.setMyLocationEnabled(true);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(intialPosition, 15));
//Gets the window adapter that will be used for the map
MapWindowAdapter windowAdapter = new MapWindowAdapter(getActivity());
mMap.setInfoWindowAdapter(windowAdapter);
new GetMapMarkersTask().execute();
}
}
private class GetMapMarkersTask extends AsyncTask<Void, Void, List<MarkerOptions>> {
private static final String MAP_MARKERS_ENDPOINT = "http://vthacks-env-pmkrjpmqpu.elasticbeanstalk.com/get_map_markers";
private static final String MARKERS = "markers";
private static final String TITLE = "title";
private static final String SNIPPET = "snippet";
private static final String LATITUDE = "latitude";
private static final String LONGITUDE = "longitude";
@Override
protected List<MarkerOptions> doInBackground(Void... arg0) {
JSONObject root = null;
try {
URL url = new URL(MAP_MARKERS_ENDPOINT);
root = ServerUtils.fromInputStream(url.openStream());
} catch (IOException e) {
}
if (root == null) {
return null;
}
JSONArray markersArray = root.optJSONArray(MARKERS);
List<MarkerOptions> markers = new ArrayList<MarkerOptions>();
for (int i = 0; i < markersArray.length(); i++) {
JSONObject markerObj = markersArray.optJSONObject(i);
if (markerObj != null) {
String title = markerObj.optString(TITLE, null);
String snippet = markerObj.optString(SNIPPET, null);
double latitude = markerObj.optDouble(LATITUDE, Double.MAX_VALUE);
double longitude = markerObj.optDouble(LONGITUDE, Double.MAX_VALUE);
if (title != null && snippet != null
&& latitude != Double.MAX_VALUE && longitude != Double.MAX_VALUE) {
MarkerOptions marker = new MarkerOptions();
marker.title(title);
marker.snippet(snippet);
marker.position(new LatLng(latitude, longitude));
markers.add(marker);
}
}
}
return markers;
}
@Override
protected void onPostExecute(List<MarkerOptions> result) {
super.onPostExecute(result);
if (result == null || mMap == null) {
Toast.makeText(getActivity(), R.string.error_getting_markers, Toast.LENGTH_SHORT).show();
return;
}
for (MarkerOptions marker : result) {
mMap.addMarker(marker);
}
}
}
}