aboutsummaryrefslogtreecommitdiff
path: root/src/net/cbaines/suma/BusStopOverlay.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/cbaines/suma/BusStopOverlay.java')
-rw-r--r--src/net/cbaines/suma/BusStopOverlay.java480
1 files changed, 243 insertions, 237 deletions
diff --git a/src/net/cbaines/suma/BusStopOverlay.java b/src/net/cbaines/suma/BusStopOverlay.java
index 06a1729..060ad47 100644
--- a/src/net/cbaines/suma/BusStopOverlay.java
+++ b/src/net/cbaines/suma/BusStopOverlay.java
@@ -44,308 +44,314 @@ import com.j256.ormlite.dao.Dao;
public class BusStopOverlay extends Overlay implements RouteColorConstants {
- List<BusStop> busStops;
+ List<BusStop> busStops;
- private final Point mCurScreenCoords = new Point();
- private final Point mTouchScreenPoint = new Point();
- private final Point mItemPoint = new Point();
+ private final Point mCurScreenCoords = new Point();
+ private final Point mTouchScreenPoint = new Point();
+ private final Point mItemPoint = new Point();
- private final Rect mRect = new Rect();
+ private final Rect mRect = new Rect();
- private final Drawable marker;
- private final Drawable favMarker;
+ private final Drawable marker;
+ private final Drawable favMarker;
- private final Paint paint;
+ private final Paint paint;
- private static final String TAG = "BusStopOverlay";
+ private static final String TAG = "BusStopOverlay";
- private final MapActivity context;
+ private final MapActivity context;
- private Dao<BusStop, String> busStopDao;
+ private Dao<BusStop, String> busStopDao;
- private float userScale = 1f;
+ private float userScale = 1f;
- private boolean[] routes = new boolean[5];
+ private boolean[] routes = new boolean[5];
- public BusStopOverlay(MapActivity context, List<BusStop> busStops) throws SQLException {
- super(context);
+ public BusStopOverlay(MapActivity context, List<BusStop> busStops) throws SQLException {
+ super(context);
- this.context = context;
+ this.context = context;
- marker = context.getResources().getDrawable(R.drawable.busstop);
- favMarker = context.getResources().getDrawable(R.drawable.busstop_fav);
+ marker = context.getResources().getDrawable(R.drawable.busstop);
+ favMarker = context.getResources().getDrawable(R.drawable.busstop_fav);
- DatabaseHelper helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
- busStopDao = helper.getBusStopDao();
+ DatabaseHelper helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
+ busStopDao = helper.getBusStopDao();
- paint = new Paint();
- paint.setStyle(Style.FILL);
- paint.setStrokeWidth(6);
+ paint = new Paint();
+ paint.setStyle(Style.FILL);
+ paint.setStrokeWidth(6);
- this.busStops = busStops;
- }
-
- void setRoutes(int route, boolean visible) {
- routes[route] = visible;
- }
-
- @Override
- public void draw(final Canvas canvas, final MapView mapView, final boolean shadow) {
-
- if (shadow) {
- return;
+ this.busStops = busStops;
}
- float scale = mScale * userScale;
+ void setRoutes(int route, boolean visible) {
+ routes[route] = visible;
+ }
- final Projection pj = mapView.getProjection();
+ @Override
+ public void draw(final Canvas canvas, final MapView mapView, final boolean shadow) {
- final int markerWidth = (int) (marker.getIntrinsicWidth() * userScale);
- final int markerHeight = (int) (marker.getIntrinsicHeight() * userScale);
+ if (shadow) {
+ return;
+ }
- mRect.set(0, 0, 0 + markerWidth, 0 + markerHeight);
- mRect.offset(-markerWidth / 2, -markerHeight);
- marker.setBounds(mRect);
- favMarker.setBounds(mRect);
+ float scale = mScale * userScale;
- /* Draw in backward cycle, so the items with the least index are on the front. */
+ final Projection pj = mapView.getProjection();
- for (int stopNum = 0; stopNum < busStops.size(); stopNum++) {
- BusStop stop = busStops.get(stopNum);
+ final int markerWidth = (int) (marker.getIntrinsicWidth() * userScale);
+ final int markerHeight = (int) (marker.getIntrinsicHeight() * userScale);
- byte routeNum = 0;
- final byte stopRoutes = stop.routes;
+ mRect.set(0, 0, 0 + markerWidth, 0 + markerHeight);
+ mRect.offset(-markerWidth / 2, -markerHeight);
+ marker.setBounds(mRect);
+ favMarker.setBounds(mRect);
- boolean drawing = false;
+ /*
+ * Draw in backward cycle, so the items with the least index are on the
+ * front.
+ */
- if (stop.uniLink) {
+ for (int stopNum = 0; stopNum < busStops.size(); stopNum++) {
+ BusStop stop = busStops.get(stopNum);
- for (int i = 0; i < 5; i++) {
- if ((stopRoutes & (1 << i)) != 0) {
- routeNum++;
- if (routes[i]) {
- drawing = true;
- }
- }
- }
+ byte routeNum = 0;
+ final byte stopRoutes = stop.routes;
- if (!drawing)
- continue;
+ boolean drawing = false;
- }
+ if (stop.uniLink) {
- pj.toMapPixels(stop.point, mCurScreenCoords);
+ for (int i = 0; i < 5; i++) {
+ if ((stopRoutes & (1 << i)) != 0) {
+ routeNum++;
+ if (routes[i]) {
+ drawing = true;
+ }
+ }
+ }
- if (stop.favourite) {
- Overlay.drawAt(canvas, favMarker, mCurScreenCoords.x, mCurScreenCoords.y, false);
- } else {
- Overlay.drawAt(canvas, marker, mCurScreenCoords.x, mCurScreenCoords.y, false);
- }
+ if (!drawing)
+ continue;
- if (stop.uniLink) {
+ }
- int makersPlaced = 0;
- int yOfsetPerMarker = (int) (10 * scale);
- int markerYSize = (int) (8 * scale);
+ pj.toMapPixels(stop.point, mCurScreenCoords);
- float rectLeft = mCurScreenCoords.x + (8.8f * scale);
- float rectRight = rectLeft + markerYSize;
+ if (stop.favourite) {
+ Overlay.drawAt(canvas, favMarker, mCurScreenCoords.x, mCurScreenCoords.y, false);
+ } else {
+ Overlay.drawAt(canvas, marker, mCurScreenCoords.x, mCurScreenCoords.y, false);
+ }
- if (routeNum == 5) {
- markerYSize = (int) (5 * scale);
- yOfsetPerMarker = (int) (7 * scale);
- } else if (routeNum == 4) {
- markerYSize = (int) (6.5f * scale);
- yOfsetPerMarker = (int) (8 * scale);
+ if (stop.uniLink) {
+
+ int makersPlaced = 0;
+ int yOfsetPerMarker = (int) (10 * scale);
+ int markerYSize = (int) (8 * scale);
+
+ float rectLeft = mCurScreenCoords.x + (8.8f * scale);
+ float rectRight = rectLeft + markerYSize;
+
+ if (routeNum == 5) {
+ markerYSize = (int) (5 * scale);
+ yOfsetPerMarker = (int) (7 * scale);
+ } else if (routeNum == 4) {
+ markerYSize = (int) (6.5f * scale);
+ yOfsetPerMarker = (int) (8 * scale);
+ }
+
+ for (int i = 0; i < 5; i++) {
+ if ((stopRoutes & (1 << i)) != 0) {
+
+ // Log.i(TAG, "Route " + route + " is " +
+ // routes.get(route));
+
+ // Log.i(TAG, "Index is " + busRoutes.indexOf(route) +
+ // " busRoutes " + busRoutes);
+
+ if (i == 0) {
+ paint.setColor(U1);
+ } else if (i == 1) {
+ paint.setColor(U1N);
+ } else if (i == 2) {
+ paint.setColor(U2);
+ } else if (i == 3) {
+ paint.setColor(U6);
+ } else if (i == 4) {
+ paint.setColor(U9);
+ } else {
+ Log.e(TAG, "Unknown route code");
+ }
+
+ canvas.drawRect(rectLeft, mCurScreenCoords.y
+ + ((yOfsetPerMarker * makersPlaced) - (45 * scale)), rectRight, mCurScreenCoords.y
+ + (yOfsetPerMarker * makersPlaced) - ((45 * scale) - markerYSize), paint);
+
+ makersPlaced++;
+ }
+ }
+ }
}
+ }
- for (int i = 0; i < 5; i++) {
- if ((stopRoutes & (1 << i)) != 0) {
+ @Override
+ public boolean onSingleTapConfirmed(final MotionEvent event, final MapView mapView) {
- // Log.i(TAG, "Route " + route + " is " + routes.get(route));
+ BusStop busStop = getSelectedItem(event, mapView);
- // Log.i(TAG, "Index is " + busRoutes.indexOf(route) + " busRoutes " + busRoutes);
+ if (busStop == null) {
+ // Log.v(TAG, "No busStop pressed");
+ return false;
+ } else {
+ Log.i(TAG, "busStop Pressed " + busStop.id);
- if (i == 0) {
- paint.setColor(U1);
- } else if (i == 1) {
- paint.setColor(U1N);
- } else if (i == 2) {
- paint.setColor(U2);
- } else if (i == 3) {
- paint.setColor(U6);
- } else if (i == 4) {
- paint.setColor(U9);
+ if (context.activityToast == null) {
+ context.activityToast = Toast.makeText(context, busStop.description + " (" + busStop.id + ")",
+ Toast.LENGTH_SHORT);
} else {
- Log.e(TAG, "Unknown route code");
+ context.activityToast.setDuration(Toast.LENGTH_SHORT);
+ context.activityToast.setText(busStop.description + " (" + busStop.id + ")");
}
+ context.activityToast.show();
- canvas.drawRect(rectLeft, mCurScreenCoords.y
- + ((yOfsetPerMarker * makersPlaced) - (45 * scale)), rectRight, mCurScreenCoords.y
- + (yOfsetPerMarker * makersPlaced) - ((45 * scale) - markerYSize), paint);
-
- makersPlaced++;
- }
+ return true;
}
- }
}
- }
-
- @Override
- public boolean onSingleTapConfirmed(final MotionEvent event, final MapView mapView) {
- BusStop busStop = getSelectedItem(event, mapView);
+ public boolean onDoubleTap(final MotionEvent event, final MapView mapView) {
- if (busStop == null) {
- // Log.v(TAG, "No busStop pressed");
- return false;
- } else {
- Log.i(TAG, "busStop Pressed " + busStop.id);
+ BusStop busStop = getSelectedItem(event, mapView);
- if (context.activityToast == null) {
- context.activityToast = Toast.makeText(context, busStop.description + " (" + busStop.id + ")",
- Toast.LENGTH_SHORT);
- } else {
- context.activityToast.setDuration(Toast.LENGTH_SHORT);
- context.activityToast.setText(busStop.description + " (" + busStop.id + ")");
- }
- context.activityToast.show();
-
- return true;
- }
- }
-
- public boolean onDoubleTap(final MotionEvent event, final MapView mapView) {
-
- BusStop busStop = getSelectedItem(event, mapView);
+ if (busStop == null) {
+ // Log.v(TAG, "No busStop pressed");
+ return false;
+ } else {
+ Log.i(TAG, "Pressed " + busStop.id);
- if (busStop == null) {
- // Log.v(TAG, "No busStop pressed");
- return false;
- } else {
- Log.i(TAG, "Pressed " + busStop.id);
+ Intent i = new Intent(context, BusStopActivity.class);
+ i.putExtra("busStopID", busStop.id);
+ i.putExtra("busStopName", busStop.description);
+ ((Activity) context).startActivityForResult(i, 0);
- Intent i = new Intent(context, BusStopActivity.class);
- i.putExtra("busStopID", busStop.id);
- i.putExtra("busStopName", busStop.description);
- ((Activity) context).startActivityForResult(i, 0);
+ return true;
+ }
- return true;
}
- }
-
- @Override
- public boolean onLongPress(final MotionEvent event, final MapView mapView) {
-
- BusStop busStop = getSelectedItem(event, mapView);
+ @Override
+ public boolean onLongPress(final MotionEvent event, final MapView mapView) {
- if (busStop == null) {
- // Log.v(TAG, "No busStop pressed");
- return false;
- } else {
- Log.i(TAG, "Pressed " + busStop.id);
+ BusStop busStop = getSelectedItem(event, mapView);
- if (busStop.favourite) {
- busStop.favourite = false;
-
- if (context.activityToast == null) {
- context.activityToast = Toast.makeText(context, busStop.id + " removed from favourites",
- Toast.LENGTH_SHORT);
- } else {
- context.activityToast.setDuration(Toast.LENGTH_SHORT);
- context.activityToast.setText(busStop.id + " removed from favourites");
- }
- context.activityToast.show();
- } else {
- if (context.activityToast == null) {
- context.activityToast = Toast.makeText(context, busStop.id + " made a favourite",
- Toast.LENGTH_SHORT);
+ if (busStop == null) {
+ // Log.v(TAG, "No busStop pressed");
+ return false;
} else {
- context.activityToast.setDuration(Toast.LENGTH_SHORT);
- context.activityToast.setText(busStop.id + " made a favourite");
- }
- context.activityToast.show();
-
- busStop.favourite = true;
- }
+ Log.i(TAG, "Pressed " + busStop.id);
+
+ if (busStop.favourite) {
+ busStop.favourite = false;
+
+ if (context.activityToast == null) {
+ context.activityToast = Toast.makeText(context, busStop.id + " removed from favourites",
+ Toast.LENGTH_SHORT);
+ } else {
+ context.activityToast.setDuration(Toast.LENGTH_SHORT);
+ context.activityToast.setText(busStop.id + " removed from favourites");
+ }
+ context.activityToast.show();
+ } else {
+ if (context.activityToast == null) {
+ context.activityToast = Toast.makeText(context, busStop.id + " made a favourite",
+ Toast.LENGTH_SHORT);
+ } else {
+ context.activityToast.setDuration(Toast.LENGTH_SHORT);
+ context.activityToast.setText(busStop.id + " made a favourite");
+ }
+ context.activityToast.show();
+
+ busStop.favourite = true;
+ }
- try {
- busStopDao.update(busStop);
- } catch (SQLException e) {
- e.printStackTrace();
- }
+ try {
+ busStopDao.update(busStop);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
- Collections.sort(busStops, new POIFavouriteComparator());
+ Collections.sort(busStops, new POIFavouriteComparator());
- mapView.invalidate();
+ mapView.invalidate();
- return true;
- }
- }
-
- public void refresh() {
- try {
- for (int i = 0; i < busStops.size(); i++) {
- BusStop busStop = busStops.get(i);
- busStopDao.refresh(busStop);
- if (busStop.favourite) {
- busStops.remove(i);
- busStops.add(busStop);
- } else {
- busStops.set(i, busStop);
+ return true;
}
- }
- } catch (SQLException e) {
- e.printStackTrace();
}
- }
-
- /**
- * Replaces any bus stops that equal the argument in the overlay with the argument
- *
- * @param busStop
- */
- public void refresh(BusStop busStop) {
- for (int i = 0; i < busStops.size(); i++) {
- if (busStop.equals(busStops.get(i))) {
- busStops.set(i, busStop);
- }
+
+ public void refresh() {
+ try {
+ for (int i = 0; i < busStops.size(); i++) {
+ BusStop busStop = busStops.get(i);
+ busStopDao.refresh(busStop);
+ if (busStop.favourite) {
+ busStops.remove(i);
+ busStops.add(busStop);
+ } else {
+ busStops.set(i, busStop);
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
}
- }
-
- private BusStop getSelectedItem(final MotionEvent event, final MapView mapView) {
- final Projection pj = mapView.getProjection();
- final int eventX = (int) event.getX();
- final int eventY = (int) event.getY();
-
- /* These objects are created to avoid construct new ones every cycle. */
- pj.fromMapPixels(eventX, eventY, mTouchScreenPoint);
-
- for (int i = busStops.size() - 1; i > 0; i--) {
- BusStop busStop = busStops.get(i);
-
- pj.toPixels(busStop.point, mItemPoint);
-
- if (marker.getBounds().contains(mTouchScreenPoint.x - mItemPoint.x, mTouchScreenPoint.y - mItemPoint.y)) {
- if (busStop.uniLink) {
- boolean drawing = false;
- for (int route = 0; route < 5; route++) {
- if ((busStop.routes & (1 << route)) != 0) {
- if (routes[route]) {
- drawing = true;
- break;
- }
+
+ /**
+ * Replaces any bus stops that equal the argument in the overlay with the
+ * argument
+ *
+ * @param busStop
+ */
+ public void refresh(BusStop busStop) {
+ for (int i = 0; i < busStops.size(); i++) {
+ if (busStop.equals(busStops.get(i))) {
+ busStops.set(i, busStop);
}
- }
- if (!drawing)
- continue;
}
+ }
- return busStop;
- }
+ private BusStop getSelectedItem(final MotionEvent event, final MapView mapView) {
+ final Projection pj = mapView.getProjection();
+ final int eventX = (int) event.getX();
+ final int eventY = (int) event.getY();
+
+ /* These objects are created to avoid construct new ones every cycle. */
+ pj.fromMapPixels(eventX, eventY, mTouchScreenPoint);
+
+ for (int i = busStops.size() - 1; i > 0; i--) {
+ BusStop busStop = busStops.get(i);
+
+ pj.toPixels(busStop.point, mItemPoint);
+
+ if (marker.getBounds().contains(mTouchScreenPoint.x - mItemPoint.x, mTouchScreenPoint.y - mItemPoint.y)) {
+ if (busStop.uniLink) {
+ boolean drawing = false;
+ for (int route = 0; route < 5; route++) {
+ if ((busStop.routes & (1 << route)) != 0) {
+ if (routes[route]) {
+ drawing = true;
+ break;
+ }
+ }
+ }
+ if (!drawing)
+ continue;
+ }
+
+ return busStop;
+ }
+ }
+ return null;
}
- return null;
- }
}