/**
* Copyright 2009 Joe LaPenna
*/
package com.joelapenna.foursquared;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import com.joelapenna.foursquare.types.Group;
import com.joelapenna.foursquare.types.Venue;
import com.joelapenna.foursquare.util.VenueUtils;
import com.joelapenna.foursquared.maps.CrashFixMyLocationOverlay;
import com.joelapenna.foursquared.maps.VenueItemizedOverlay;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import java.util.Observable;
import java.util.Observer;
/**
* @author Joe LaPenna (joe@joelapenna.com)
*/
public class VenueMapActivity extends MapActivity {
public static final String TAG = "VenueMapActivity";
public static final boolean DEBUG = FoursquaredSettings.DEBUG;
private MapView mMapView;
private MapController mMapController;
private VenueItemizedOverlay mOverlay = null;
private MyLocationOverlay mMyLocationOverlay = null;
private Venue mVenue;
private Observer mVenueObserver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.venue_map_activity);
Button mapsButton = (Button) findViewById(R.id.mapsButton);
mapsButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse( //
"geo:0,0?q=" + mVenue.getName() + " near " + mVenue.getCity()));
startActivity(intent);
}
});
if (FoursquaredSettings.SHOW_VENUE_MAP_BUTTON_MORE == false) {
mapsButton.setVisibility(View.GONE);
}
initMap();
Venue venue = ((VenueActivity) getParent()).venueObservable.getVenue();
if (venue != null) {
setVenue(venue);
updateMap();
} else {
mVenueObserver = new VenueObserver();
((VenueActivity) getParent()).venueObservable.addObserver(mVenueObserver);
}
}
@Override
public void onResume() {
super.onResume();
mMyLocationOverlay.enableMyLocation();
// mMyLocationOverlay.enableCompass(); // Disabled due to a sdk 1.5
// emulator bug
}
@Override
public void onPause() {
super.onPause();
mMyLocationOverlay.disableMyLocation();
mMyLocationOverlay.disableCompass();
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
private void initMap() {
mMapView = (MapView) findViewById(R.id.mapView);
mMapView.setBuiltInZoomControls(true);
mMapController = mMapView.getController();
mMyLocationOverlay = new CrashFixMyLocationOverlay(this, mMapView);
mMapView.getOverlays().add(mMyLocationOverlay);
mOverlay = new VenueItemizedOverlay(this.getResources().getDrawable(
R.drawable.map_marker_blue));
}
private void setVenue(Venue venue) {
Group<Venue> venueGroup = new Group<Venue>();
venueGroup.setType("Current Venue");
venueGroup.add(venue);
mVenue = venue;
if (VenueUtils.hasValidLocation(venue)) {
mOverlay.setGroup(venueGroup);
mMapView.getOverlays().add(mOverlay);
}
}
private void updateMap() {
GeoPoint center;
if (mOverlay != null && mOverlay.size() > 0) {
center = mOverlay.getCenter();
} else {
return;
}
mMapController.animateTo(center);
mMapController.setZoom(17);
}
private final class VenueObserver implements Observer {
@Override
public void update(Observable observable, Object data) {
setVenue((Venue) data);
updateMap();
}
}
}