package com.ashokgelal.tagsnap;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import com.ashokgelal.tagsnap.listeners.TagInfoAsyncListListener;
import com.ashokgelal.tagsnap.model.TagInfo;
import com.ashokgelal.tagsnap.services.DatabaseHelper;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
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 java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;
public class MapFragment extends SupportMapFragment implements TagInfoAsyncListListener, GoogleMap.OnInfoWindowClickListener {
private static final int EDIT_DETAILS_REQUEST = 1;
private Dictionary<String, TagInfo> mMarkerDict;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mMarkerDict = new Hashtable<String, TagInfo>();
getMap().setOnInfoWindowClickListener(this);
addMarkersFromDatabase();
}
private void addMarkersFromDatabase() {
DatabaseHelper db = DatabaseHelper.getInstance(getActivity());
db.fetchTagInfoListAsync(this);
}
@Override
public void onTagInfoListAvailable(List<TagInfo> list) {
getMap().clear();
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (TagInfo tagInfo : list) {
Marker marker = addMarker(tagInfo);
mMarkerDict.put(marker.getId(), tagInfo);
builder.include(marker.getPosition());
}
if (list.size() > 0)
getMap().moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 100));
}
private Marker addMarker(TagInfo tagInfo) {
MarkerOptions options = new MarkerOptions();
options.position(new LatLng(tagInfo.getLatitude(), tagInfo.getLongitude()));
options.title(tagInfo.getDescription());
options.snippet(tagInfo.getAddress1());
return getMap().addMarker(options);
}
@Override
public void onInfoWindowClick(Marker marker) {
TagInfo tagInfo = mMarkerDict.get(marker.getId());
Intent intent = new Intent(getActivity(), DetailsActivity.class);
intent.putExtra("taginfo", tagInfo);
startActivityForResult(intent, EDIT_DETAILS_REQUEST);
}
@Override
public void onActivityResult(int requestCode, int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == EDIT_DETAILS_REQUEST) {
TagInfo tagInfo = data.getParcelableExtra("taginfo");
final DatabaseHelper db = DatabaseHelper.getInstance(getActivity());
db.updateTagInfoAsync(tagInfo, this);
}
}
}
}