package edu.illinois.geoalarm;
import java.util.ArrayList;
import android.app.Dialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.Window;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;
/**
* An ItemizedOverlay<<OverlayItem>> for showing nearby stops on the map
* @author GeoAlarm
*/
public class NearStopOverlay extends ItemizedOverlay<OverlayItem>
{
private ArrayList<NearStopOverlayItem> mOverlays = new ArrayList<NearStopOverlayItem>();
private Context mContext;
private NearStopOverlayItem selectedItem;
private GeoAlarmDB database;
/**
* Constructs a new NearStopOverlay with specified parameters
* @param defaultMarker The Drawable used for marker display
* @param context The context the overlay will be used in
* @param db A handle to the GeoAlarmDB database
*/
public NearStopOverlay(Drawable defaultMarker, Context context, GeoAlarmDB db)
{
super(boundCenterBottom(defaultMarker));
mContext = context;
database = db;
}
@Override
protected OverlayItem createItem(int index)
{
return mOverlays.get(index);
}
@Override
public int size()
{
return mOverlays.size();
}
/**
* Adds a new overlay to this object
* @param overlay The NearStopOverlayItem to add
*/
public void addOverlay(NearStopOverlayItem overlay)
{
mOverlays.add(overlay);
populate();
}
/**
* Called when the bus icon is tapped. Shows the list of bus lines that service the
* selected stop in a custom dialog.
*/
@Override
protected boolean onTap(int index)
{
selectedItem = mOverlays.get(index);
Dialog dialog = new Dialog(mContext);
dialog.setContentView(R.layout.route_map_dialog);
dialog.setTitle(selectedItem.getBusStop().getFullName());
TextView routesLabel = (TextView)dialog.findViewById(R.id.routeMapDialogRoutesLabel);
LinearLayout routeListLinearLayout = (LinearLayout)dialog.findViewById(R.id.routeListLinearLayout);
/* Populate display with lines servicing this stop */
ArrayList<String> routeList = database.getLinesForStopName(selectedItem.getBusStop().getFullName());
routeListLinearLayout.removeAllViews();
routeListLinearLayout.addView(routesLabel);
for(String routeName : routeList)
{
TextView newView = new TextView(dialog.getContext());
newView.setText(routeName);
newView.setTextSize(20);
routeListLinearLayout.addView(newView);
}
Window window = dialog.getWindow();
window.setLayout((int)(window.getWindowManager().getDefaultDisplay().getWidth()),
(int)(window.getWindowManager().getDefaultDisplay().getHeight() * .50));
dialog.show();
return true;
}
/**
* Returns the list of overlay objects this NearStopOverlay wraps
* @return The ArrayList<<NearStopOverlayItem>> this object wraps
*/
public ArrayList<NearStopOverlayItem> getOverlays()
{
return mOverlays;
}
}