/** * 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 com.joelapenna.foursquared.util.UiUtil; import android.os.Bundle; import android.util.Log; /** * @author Joe LaPenna (joe@joelapenna.com) */ public class VenueMapActivity extends MapActivity { public static final String TAG = "VenueMapActivity"; public static final boolean DEBUG = FoursquaredSettings.DEBUG; public static final String INTENT_EXTRA_VENUE = Foursquared.PACKAGE_NAME + ".VenueMapActivity.INTENT_EXTRA_VENUE"; private MapView mMapView; private MapController mMapController; private VenueItemizedOverlay mOverlay = null; private MyLocationOverlay mMyLocationOverlay = null; private StateHolder mStateHolder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.venue_map_activity); Object retained = getLastNonConfigurationInstance(); if (retained != null && retained instanceof StateHolder) { mStateHolder = (StateHolder) retained; } else { mStateHolder = new StateHolder(); if (getIntent().hasExtra(INTENT_EXTRA_VENUE)) { mStateHolder.setVenue((Venue)getIntent().getExtras().getParcelable(INTENT_EXTRA_VENUE)); } else { Log.e(TAG, "VenueMapActivity requires a venue parcel its intent extras."); finish(); return; } } ensureUi(); } private void ensureUi() { /* 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=" + mStateHolder.getVenue().getName() + " near " + mStateHolder.getVenue().getCity())); startActivity(intent); } }); if (FoursquaredSettings.SHOW_VENUE_MAP_BUTTON_MORE == false) { mapsButton.setVisibility(View.GONE); } */ setTitle(getString(R.string.venue_map_activity_title, mStateHolder.getVenue().getName())); 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)); if (VenueUtils.hasValidLocation(mStateHolder.getVenue())) { Group<Venue> venueGroup = new Group<Venue>(); venueGroup.setType("Current Venue"); venueGroup.add(mStateHolder.getVenue()); mOverlay.setGroup(venueGroup); mMapView.getOverlays().add(mOverlay); } updateMap(); } @Override public void onResume() { super.onResume(); mMyLocationOverlay.enableMyLocation(); if (UiUtil.sdkVersion() > 3) { mMyLocationOverlay.enableCompass(); } } @Override public void onPause() { super.onPause(); mMyLocationOverlay.disableMyLocation(); mMyLocationOverlay.disableCompass(); } @Override protected boolean isRouteDisplayed() { return false; } private void updateMap() { if (mOverlay != null && mOverlay.size() > 0) { GeoPoint center = mOverlay.getCenter(); mMapController.animateTo(center); mMapController.setZoom(17); } } private static class StateHolder { private Venue mVenue; public StateHolder() { } public Venue getVenue() { return mVenue; } public void setVenue(Venue venue) { mVenue = venue; } } }