package edu.mit.mitmobile2.tour; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.LinearLayout; import android.widget.TextView; import edu.mit.mitmobile2.R; import edu.mit.mitmobile2.maps.MapData; import edu.mit.mitmobile2.objs.MapItem; import edu.mit.mitmobile2.tour.Tour.TourMapItem; import edu.mit.mitmobile2.tour.Tour.TourSiteStatus; public class TourStopsMapData extends MapData { public interface OnTourSiteSelectedListener { public void onTourSiteSelected(TourMapItem tourMapItem); } OnTourSiteSelectedListener mSiteListener; public TourStopsMapData(List<? extends TourMapItem> tourMapItems, OnTourSiteSelectedListener siteListener) { for (TourMapItem tourMapItem : tourMapItems) { TourStopMapItem mapItem = new TourStopMapItem(tourMapItem); getMapItems().add(mapItem); } mSiteListener = siteListener; } public MapItem getMapItem(TourMapItem mapItem) { String id = mapItem.getId(); for(MapItem aMapItem : getMapItems()) { if (aMapItem instanceof TourStopMapItem) { TourStopMapItem aTourStopMapItem = (TourStopMapItem) aMapItem; if (aTourStopMapItem.getID().equals(id)) { return aTourStopMapItem; } } } return null; } private class TourStopMapItem extends MapItem { private TourMapItem mTourMapItem; public TourStopMapItem(TourMapItem tourMapItem) { mTourMapItem = tourMapItem; mapPoints.add(mTourMapItem.getGeoPoint().getMapPoint()); TourSiteStatus status = tourMapItem.getStatus(); int markerId = -1; if(status == TourSiteStatus.VISITED) { markerId = R.drawable.map_past; } else if(status == TourSiteStatus.CURRENT) { markerId = R.drawable.map_currentstop; } else if(status == TourSiteStatus.FUTURE) { markerId = R.drawable.map_future; } setSymbol(markerId); setGeometryType(MapItem.TYPE_POINT); verticalAlign = MapItem.VALIGN_CENTER; horizontalAlign = MapItem.ALIGN_CENTER; } public String getID() { return mTourMapItem.getId(); } @Override public View getCallout(Context mContext) { LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout calloutLayout = (LinearLayout) inflater.inflate(R.layout.tour_callout, null); TextView calloutStopName = (TextView)calloutLayout.findViewById(R.id.tour_callout_name); calloutStopName.setText(mTourMapItem.getTitle()); TextView calloutStopDistance = (TextView)calloutLayout.findViewById(R.id.tour_callout_distance); String distanceString = null; Float meters = mTourMapItem.distance(); if (meters != null) { distanceString = LocaleMeasurements.getDistance(meters); } if (distanceString != null) { calloutStopDistance.setVisibility(View.VISIBLE); calloutStopDistance.setText(distanceString); } calloutLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mSiteListener.onTourSiteSelected(mTourMapItem); } }); return calloutLayout; } @Override public View getCallout(Context mContext, ArrayList<? extends MapItem> mapItems) { return null; } @Override public View getCallout(Context mContext, ArrayList<? extends MapItem> mapItems, int position) { TourStopMapItem tourStopMapItem = (TourStopMapItem) mapItems.get(position); return tourStopMapItem.getCallout(mContext); } @Override public View getCallout(Context mContext, MapItem mapItem) { // TODO Auto-generated method stub return null; } } }