package com.mhacks.android.eventmap; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Build; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.LatLngBounds; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import com.parse.FindCallback; import com.parse.ParseException; import com.parse.ParseGeoPoint; import com.parse.ParseObject; import com.parse.ParseQuery; import java.util.ArrayList; import java.util.List; /** * Created by damian on 1/14/14. */ public class EventMapFragment extends MapFragment { private View mView; private int mPadding; private GoogleMap mMap; private Activity mActivity; private LatLngBounds mVenue; private ArrayList<Marker> mMarkers; private LocationInfoAdapter mAdapter; public EventMapFragment() { super(); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mView = super.onCreateView(inflater, container, savedInstanceState); mActivity = getActivity(); mMap = getMap(); mMarkers = new ArrayList(); mAdapter = new LocationInfoAdapter(mActivity); mPadding = 80 * mActivity.getResources().getDisplayMetrics().densityDpi / 160; mView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @SuppressLint("NewApi") // We check which build version we are using. @Override public void onGlobalLayout() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { mView.getViewTreeObserver().removeGlobalOnLayoutListener(this); } else { mView.getViewTreeObserver().removeOnGlobalLayoutListener(this); } loadData(); } }); return mView; } private void loadData() { ParseQuery<ParseObject> query = ParseQuery.getQuery("MapLocation"); query.findInBackground(new FindCallback<ParseObject>() { @Override public void done(List<ParseObject> parseObjects, ParseException e) { if (e == null) { initMap(parseObjects); } } }); } private void initMap(List<ParseObject> parseObjects) { mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); mMap.setMyLocationEnabled(true); mMap.setInfoWindowAdapter(mAdapter); LatLngBounds.Builder builder = LatLngBounds.builder(); for (ParseObject object : parseObjects) { LatLng coordinates = getLatLng(object.getParseGeoPoint("coordinates")); MarkerOptions options = new MarkerOptions() .position(coordinates) .title(object.getString("title")) .snippet(object.getString("snippet")); mMarkers.add(mMap.addMarker(options)); builder.include(coordinates); } mVenue = builder.build(); mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(mVenue, mPadding)); } private LatLng getLatLng(ParseGeoPoint geoPoint) { return new LatLng(geoPoint.getLatitude(), geoPoint.getLongitude()); } }