aboutsummaryrefslogtreecommitdiff
path: root/src/net/cbaines
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/cbaines')
-rw-r--r--src/net/cbaines/suma/BuildingActivity.java178
-rw-r--r--src/net/cbaines/suma/BuildingNumOverlay.java423
-rw-r--r--src/net/cbaines/suma/BusActivity.java2
-rw-r--r--src/net/cbaines/suma/BusSpecificStopView.java10
-rw-r--r--src/net/cbaines/suma/BusStopActivity.java29
-rw-r--r--src/net/cbaines/suma/BusStopOverlay.java451
-rw-r--r--src/net/cbaines/suma/DataManager.java1359
-rw-r--r--src/net/cbaines/suma/DatabaseHelper.java2
-rw-r--r--src/net/cbaines/suma/MapActivity.java2078
-rw-r--r--src/net/cbaines/suma/POI.java4
-rw-r--r--src/net/cbaines/suma/POIFavouriteComparator.java32
-rw-r--r--src/net/cbaines/suma/Preferences.java2
-rw-r--r--src/net/cbaines/suma/StopView.java5
-rw-r--r--src/net/cbaines/suma/ViewDialog.java422
14 files changed, 2576 insertions, 2421 deletions
diff --git a/src/net/cbaines/suma/BuildingActivity.java b/src/net/cbaines/suma/BuildingActivity.java
new file mode 100644
index 0000000..6b03164
--- /dev/null
+++ b/src/net/cbaines/suma/BuildingActivity.java
@@ -0,0 +1,178 @@
+/*
+ * Southampton University Map App
+ * Copyright (C) 2011 Christopher Baines
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package net.cbaines.suma;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.sql.SQLException;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Display;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.ImageButton;
+import android.widget.ImageView.ScaleType;
+import android.widget.TextView;
+
+import com.j256.ormlite.android.apptools.OrmLiteBaseActivity;
+import com.j256.ormlite.dao.Dao;
+
+public class BuildingActivity extends OrmLiteBaseActivity<DatabaseHelper> implements OnCheckedChangeListener, Preferences {
+
+ final static String TAG = "BusTimeActivity";
+
+ private Context instance;
+
+ private ImageButton imageButton;
+
+ private TextView buildingName;
+ private TextView buildingID;
+
+ private Building building;
+
+ private CheckBox favouritesCheckBox;
+
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.building_activity);
+ instance = this;
+
+ String ID = getIntent().getExtras().getString("buildingID");
+
+ final SharedPreferences favouritesPrefs = instance.getSharedPreferences(FAVOURITES_PREFERENCES, 0);
+
+ favouritesCheckBox = (CheckBox) findViewById(R.id.buildingActivityFavouriteCheckBox);
+ favouritesCheckBox.setChecked(favouritesPrefs.getBoolean(ID, false));
+ favouritesCheckBox.setOnCheckedChangeListener(this);
+
+ buildingName = (TextView) findViewById(R.id.buildingActivityName);
+ buildingID = (TextView) findViewById(R.id.buildingActivityID);
+
+ Log.i(TAG, "Building id " + ID);
+
+ try {
+ Dao<Building, String> buildingDao = getHelper().getBuildingDao();
+
+ building = buildingDao.queryForId(ID);
+
+ buildingName.setText(building.name);
+
+ } catch (SQLException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+
+ buildingID.setText(ID);
+ try {
+
+ /* First, get the Display from the WindowManager */
+ Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
+
+ /* Now we can retrieve all display-related infos */
+ int orientation = display.getOrientation();
+ Log.i(TAG, "orientation " + orientation);
+ Log.i(TAG, "width " + display.getWidth() + " height " + display.getHeight());
+ int width;
+ // if (orientation == 0) {
+ width = display.getWidth();
+ // } else {
+ // width = display.getHeight();
+ // }
+
+ URL imageURL;
+ Log.i(TAG, "Screen width " + width);
+ if (width >= 1000) {
+ imageURL = new URL("http://data.southampton.ac.uk/images/buildings/1000/" + ID + ".jpg");
+ } else if (width >= 800) {
+ imageURL = new URL("http://data.southampton.ac.uk/images/buildings/1000/" + ID + ".jpg");
+ } else if (width >= 600) {
+ imageURL = new URL("http://data.southampton.ac.uk/images/buildings/600/" + ID + ".jpg");
+ } else if (width >= 400) {
+ imageURL = new URL("http://data.southampton.ac.uk/images/buildings/600/" + ID + ".jpg");
+ } else if (width >= 300) {
+ imageURL = new URL("http://data.southampton.ac.uk/images/buildings/300/" + ID + ".jpg");
+ } else if (width >= 200) {
+ imageURL = new URL("http://data.southampton.ac.uk/images/buildings/200/" + ID + ".jpg");
+ } else {
+ imageURL = new URL("http://data.southampton.ac.uk/images/buildings/100/" + ID + ".jpg");
+ }
+ Log.i(TAG, "URL " + imageURL);
+
+ InputStream is = (InputStream) imageURL.getContent();
+ Drawable image = Drawable.createFromStream(is, "src");
+
+ imageButton = new ImageButton(this);
+ imageButton = (ImageButton) findViewById(R.id.buildingActivityImage);
+ imageButton.setImageDrawable(image);
+ imageButton.setScaleType(ScaleType.CENTER_INSIDE);
+ imageButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+
+ }
+ });
+
+ } catch (MalformedURLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ }
+
+ public void onResume() {
+ super.onResume();
+ }
+
+ public void onPause() {
+ super.onPause();
+ }
+
+ public void finish() {
+ setResult(RESULT_OK, getIntent());
+ super.finish();
+ }
+
+ @Override
+ public Object onRetainNonConfigurationInstance() {
+ return null;
+ }
+
+ public void onCheckedChanged(CompoundButton button, boolean checked) {
+ SharedPreferences favouritesPreferences = getSharedPreferences(FAVOURITES_PREFERENCES, 0);
+
+ if (checked) {
+ favouritesPreferences.edit().putBoolean(building.id, true).commit();
+ } else {
+ favouritesPreferences.edit().remove(building.id).commit();
+ }
+ }
+
+}
diff --git a/src/net/cbaines/suma/BuildingNumOverlay.java b/src/net/cbaines/suma/BuildingNumOverlay.java
index 32616a7..cc20003 100644
--- a/src/net/cbaines/suma/BuildingNumOverlay.java
+++ b/src/net/cbaines/suma/BuildingNumOverlay.java
@@ -29,6 +29,10 @@ import org.osmdroid.views.MapView;
import org.osmdroid.views.MapView.Projection;
import org.osmdroid.views.overlay.Overlay;
+import android.app.Activity;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
@@ -40,265 +44,264 @@ import android.util.Log;
import android.view.MotionEvent;
import android.widget.Toast;
-import com.j256.ormlite.android.apptools.OpenHelperManager;
-import com.j256.ormlite.dao.Dao;
+public class BuildingNumOverlay extends Overlay implements Preferences, OnSharedPreferenceChangeListener {
-public class BuildingNumOverlay extends Overlay {
+ private ArrayList<Building> buildings;
- private ArrayList<Building> buildings;
+ 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 = "BuildingNumOverlay";
- private static final String TAG = "BuildingNumOverlay";
+ private final MapActivity context;
- private final MapActivity context;
+ private float userScale = 1f;
- private Dao<Building, String> buildingDao;
+ public BuildingNumOverlay(MapActivity context, List<Building> buildings) throws SQLException {
+ super(context);
- private float userScale = 1f;
+ this.context = context;
- public BuildingNumOverlay(MapActivity context, List<Building> buildings) throws SQLException {
- super(context);
+ marker = context.getResources().getDrawable(R.drawable.building);
+ favMarker = context.getResources().getDrawable(R.drawable.building_fav);
- this.context = context;
+ final SharedPreferences favouritesPrefs = context.getSharedPreferences(FAVOURITES_PREFERENCES, 0);
+ favouritesPrefs.registerOnSharedPreferenceChangeListener(this);
- marker = context.getResources().getDrawable(R.drawable.building);
- favMarker = context.getResources().getDrawable(R.drawable.building_fav);
+ paint = new Paint();
+ paint.setColor(Color.BLACK);
+ paint.setAntiAlias(true);
+ paint.setStyle(Style.FILL);
+ paint.setAlpha(120);
+ paint.setStrokeWidth(6);
+ paint.setTextAlign(Paint.Align.CENTER);
- DatabaseHelper helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
- buildingDao = helper.getBuildingDao();
-
- paint = new Paint();
- paint.setColor(Color.BLACK);
- paint.setAntiAlias(true);
- paint.setStyle(Style.FILL);
- paint.setAlpha(120);
- paint.setStrokeWidth(6);
- paint.setTextAlign(Paint.Align.CENTER);
-
- this.buildings = (ArrayList<Building>) buildings;
- }
+ this.buildings = (ArrayList<Building>) buildings;
+ }
- /**
- * Draw a marker on each of our items. populate() must have been called first.<br/>
- * <br/>
- * The marker will be drawn twice for each Item in the Overlay--once in the shadow phase, skewed and darkened, then
- * again in the non-shadow phase. The bottom-center of the marker will be aligned with the geographical coordinates
- * of the Item.<br/>
- * <br/>
- * The order of drawing may be changed by overriding the getIndexToDraw(int) method. An item may provide an
- * alternate marker via its OverlayItem.getMarker(int) method. If that method returns null, the default marker is
- * used.<br/>
- * <br/>
- * The focused item is always drawn last, which puts it visually on top of the other items.<br/>
- *
- * @param canvas
- * the Canvas upon which to draw. Note that this may already have a transformation applied, so be sure to
- * leave it the way you found it
- * @param mapView
- * the MapView that requested the draw. Use MapView.getProjection() to convert between on-screen pixels
- * and latitude/longitude pairs
- * @param shadow
- * if true, draw the shadow layer. If false, draw the overlay contents.
- */
- @Override
- public void draw(final Canvas canvas, final MapView mapView, final boolean shadow) {
+ /**
+ * Draw a marker on each of our items. populate() must have been called first.<br/>
+ * <br/>
+ * The marker will be drawn twice for each Item in the Overlay--once in the shadow phase, skewed and darkened, then again in
+ * the non-shadow phase. The bottom-center of the marker will be aligned with the geographical coordinates of the Item.<br/>
+ * <br/>
+ * The order of drawing may be changed by overriding the getIndexToDraw(int) method. An item may provide an alternate marker
+ * via its OverlayItem.getMarker(int) method. If that method returns null, the default marker is used.<br/>
+ * <br/>
+ * The focused item is always drawn last, which puts it visually on top of the other items.<br/>
+ *
+ * @param canvas
+ * the Canvas upon which to draw. Note that this may already have a transformation applied, so be sure to leave it
+ * the way you found it
+ * @param mapView
+ * the MapView that requested the draw. Use MapView.getProjection() to convert between on-screen pixels and
+ * latitude/longitude pairs
+ * @param shadow
+ * if true, draw the shadow layer. If false, draw the overlay contents.
+ */
+ @Override
+ public void draw(final Canvas canvas, final MapView mapView, final boolean shadow) {
+
+ if (shadow || !isEnabled()) {
+ return;
+ }
- if (shadow || !isEnabled()) {
- return;
+ float scale = mScale * userScale;
+
+ final Projection pj = mapView.getProjection();
+
+ final int markerWidth = (int) (marker.getIntrinsicWidth() * userScale);
+ final int markerHeight = (int) (marker.getIntrinsicHeight() * userScale);
+
+ mRect.set(0, 0, 0 + markerWidth, 0 + markerHeight);
+ mRect.offset(-markerWidth / 2, -markerHeight);
+ marker.setBounds(mRect);
+ favMarker.setBounds(mRect);
+
+ final SharedPreferences favouritesPrefs = context.getSharedPreferences(FAVOURITES_PREFERENCES, 0);
+
+ /*
+ * Draw in backward cycle, so the items with the least index are on the front.
+ */
+ for (Iterator<Building> buildingIter = buildings.iterator(); buildingIter.hasNext();) {
+ final Building building = buildingIter.next();
+
+ // Log.i(TAG, "Looking at drawing stop " + stop.id);
+
+ pj.toMapPixels(building.point, mCurScreenCoords);
+ if (!pj.getBoundingBox().increaseByScale(1.2f).contains(building.point)) {
+ continue;
+ }
+
+ // draw it
+ if (favouritesPrefs.getBoolean(building.id, false)) {
+ Overlay.drawAt(canvas, favMarker, mCurScreenCoords.x, mCurScreenCoords.y, false);
+ } else {
+ Overlay.drawAt(canvas, marker, mCurScreenCoords.x, mCurScreenCoords.y, false);
+ }
+
+ String idString = String.valueOf(building.id);
+
+ int yOfset = 10;
+ switch (idString.length()) {
+ case 1:
+ paint.setTextSize(25 * scale);
+ yOfset = 18;
+ break;
+ case 2:
+ paint.setTextSize(24 * scale);
+ yOfset = 18;
+ break;
+ case 3:
+ paint.setTextSize(17 * scale);
+ yOfset = 20;
+ break;
+ case 4:
+ paint.setTextSize(14 * scale);
+ yOfset = 23;
+ break;
+ case 5:
+ paint.setTextSize(10 * scale);
+ yOfset = 20;
+ break;
+ case 6:
+ paint.setTextSize(9 * scale);
+ yOfset = 24;
+ break;
+ default:
+ Log.w(TAG, "Reverting to default text size for length " + idString.length());
+ paint.setTextSize(15 * scale);
+ break;
+ }
+ canvas.drawText(idString, mCurScreenCoords.x, mCurScreenCoords.y - (yOfset * scale), paint);
+ }
}
- float scale = mScale * userScale;
-
- final Projection pj = mapView.getProjection();
-
- final int markerWidth = (int) (marker.getIntrinsicWidth() * userScale);
- final int markerHeight = (int) (marker.getIntrinsicHeight() * userScale);
-
- mRect.set(0, 0, 0 + markerWidth, 0 + markerHeight);
- mRect.offset(-markerWidth / 2, -markerHeight);
- marker.setBounds(mRect);
- favMarker.setBounds(mRect);
-
- /* Draw in backward cycle, so the items with the least index are on the front. */
- for (Iterator<Building> buildingIter = buildings.iterator(); buildingIter.hasNext();) {
- final Building building = buildingIter.next();
-
- // Log.i(TAG, "Looking at drawing stop " + stop.id);
-
- pj.toMapPixels(building.point, mCurScreenCoords);
-
- // draw it
- if (building.favourite) {
- Overlay.drawAt(canvas, favMarker, mCurScreenCoords.x, mCurScreenCoords.y, false);
- } else {
- Overlay.drawAt(canvas, marker, mCurScreenCoords.x, mCurScreenCoords.y, false);
- }
-
- String idString = String.valueOf(building.id);
-
- int yOfset = 10;
- switch (idString.length()) {
- case 1:
- paint.setTextSize(25 * scale);
- yOfset = 18;
- break;
- case 2:
- paint.setTextSize(24 * scale);
- yOfset = 18;
- break;
- case 3:
- paint.setTextSize(17 * scale);
- yOfset = 20;
- break;
- case 4:
- paint.setTextSize(14 * scale);
- yOfset = 23;
- break;
- case 5:
- paint.setTextSize(10 * scale);
- yOfset = 20;
- break;
- case 6:
- paint.setTextSize(9 * scale);
- yOfset = 24;
- break;
- default:
- Log.w(TAG, "Reverting to default text size for length " + idString.length());
- paint.setTextSize(15 * scale);
- break;
- }
- canvas.drawText(idString, mCurScreenCoords.x, mCurScreenCoords.y - (yOfset * scale), paint);
- }
- }
+ @Override
+ public boolean onSingleTapConfirmed(final MotionEvent event, final MapView mapView) {
- @Override
- public boolean onSingleTapConfirmed(final MotionEvent event, final MapView mapView) {
+ if (!this.isEnabled())
+ return false;
- if (!this.isEnabled())
- return false;
+ final Building building = getSelectedItem(event, mapView);
- final Building building = getSelectedItem(event, mapView);
+ if (building == null) {
+ // Log.v(TAG, "No building pressed");
+ return false;
+ } else {
+ Log.v(TAG, "building Pressed " + building.id);
- if (building == null) {
- // Log.v(TAG, "No building pressed");
- return false;
- } else {
- Log.v(TAG, "building Pressed " + building.id);
+ if (context.activityToast == null) {
+ context.activityToast = Toast.makeText(context, building.name + " (" + building.id + ")", Toast.LENGTH_SHORT);
+ } else {
+ context.activityToast.setDuration(Toast.LENGTH_SHORT);
+ context.activityToast.setText(building.name + " (" + building.id + ")");
+ }
+ context.activityToast.show();
- if (context.activityToast == null) {
- context.activityToast = Toast.makeText(context, building.name + " (" + building.id + ")",
- Toast.LENGTH_SHORT);
- } else {
- context.activityToast.setDuration(Toast.LENGTH_SHORT);
- context.activityToast.setText(building.name + " (" + building.id + ")");
- }
- context.activityToast.show();
+ return true;
+ }
- return true;
}
- }
+ public boolean onDoubleTap(final MotionEvent event, final MapView mapView) {
+ Building building = getSelectedItem(event, mapView);
- public boolean onDoubleTap(final MotionEvent e, final MapView mapView) {
- return false;
- }
+ if (building == null) {
+ // Log.v(TAG, "No busStop pressed");
+ return false;
+ } else {
+ Log.i(TAG, "Pressed " + building.id);
- @Override
- public boolean onLongPress(final MotionEvent event, final MapView mapView) {
+ Intent i = new Intent(context, BuildingActivity.class);
+ i.putExtra("buildingID", building.id);
+ ((Activity) context).startActivityForResult(i, 0);
- if (!this.isEnabled())
- return false;
+ return true;
+ }
+ }
- final Building building = getSelectedItem(event, mapView);
+ @Override
+ public boolean onLongPress(final MotionEvent event, final MapView mapView) {
- if (building == null) {
- // Log.v(TAG, "No building pressed");
- return false;
- } else {
- Log.v(TAG, "building Pressed " + building.id);
+ if (!this.isEnabled())
+ return false;
- if (building.favourite) {
- building.favourite = false;
+ final Building building = getSelectedItem(event, mapView);
- if (context.activityToast == null) {
- context.activityToast = Toast.makeText(context, building.id + " removed from favourites",
- Toast.LENGTH_SHORT);
+ if (building == null) {
+ // Log.v(TAG, "No building pressed");
+ return false;
} else {
- context.activityToast.setDuration(Toast.LENGTH_SHORT);
- context.activityToast.setText(building.id + " removed from favourites");
- }
- context.activityToast.show();
+ Log.v(TAG, "building Pressed " + building.id);
- } else {
- if (context.activityToast == null) {
- context.activityToast = Toast.makeText(context, building.id + " made a favourite",
- Toast.LENGTH_SHORT);
- } else {
- context.activityToast.setDuration(Toast.LENGTH_SHORT);
- context.activityToast.setText(building.id + " made a favourite");
- }
- context.activityToast.show();
+ final SharedPreferences favouritesPrefs = context.getSharedPreferences(FAVOURITES_PREFERENCES, 0);
- building.favourite = true;
- }
+ if (favouritesPrefs.getBoolean(building.id, false)) {
+ favouritesPrefs.edit().remove(building.id).commit();
- try {
- buildingDao.update(building);
- } catch (SQLException e) {
- e.printStackTrace();
- }
+ if (context.activityToast == null) {
+ context.activityToast = Toast.makeText(context, building.id + " removed from favourites", Toast.LENGTH_SHORT);
+ } else {
+ context.activityToast.setDuration(Toast.LENGTH_SHORT);
+ context.activityToast.setText(building.id + " removed from favourites");
+ }
+ context.activityToast.show();
- Collections.sort(buildings, new POIFavouriteComparator());
+ } else {
+ if (context.activityToast == null) {
+ context.activityToast = Toast.makeText(context, building.id + " made a favourite", Toast.LENGTH_SHORT);
+ } else {
+ context.activityToast.setDuration(Toast.LENGTH_SHORT);
+ context.activityToast.setText(building.id + " made a favourite");
+ }
+ context.activityToast.show();
- mapView.invalidate();
+ favouritesPrefs.edit().putBoolean(building.id, true).commit();
+ }
- return true;
- }
+ Collections.sort(buildings, new POIFavouriteComparator(context.getSharedPreferences(FAVOURITES_PREFERENCES, 0)));
+
+ mapView.invalidate();
- }
+ return true;
+ }
- private Building 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);
+ private Building getSelectedItem(final MotionEvent event, final MapView mapView) {
+ final Projection pj = mapView.getProjection();
+ final int eventX = (int) event.getX();
+ final int eventY = (int) event.getY();
- // Iterate back through the array to properly deal with overlap
- for (int i = buildings.size() - 1; i > 0; i--) {
- final Building building = buildings.get(i);
+ /* These objects are created to avoid construct new ones every cycle. */
+ pj.fromMapPixels(eventX, eventY, mTouchScreenPoint);
- pj.toPixels(building.point, mItemPoint);
+ // Iterate back through the array to properly deal with overlap
+ for (int i = buildings.size() - 1; i > 0; i--) {
+ final Building building = buildings.get(i);
- if (marker.getBounds().contains(mTouchScreenPoint.x - mItemPoint.x, mTouchScreenPoint.y - mItemPoint.y)) {
- return building;
- }
- }
- return null;
- }
+ pj.toPixels(building.point, mItemPoint);
- public void refresh() {
- for (int i = 0; i < buildings.size(); i++) {
- refresh(buildings.get(i));
+ if (marker.getBounds().contains(mTouchScreenPoint.x - mItemPoint.x, mTouchScreenPoint.y - mItemPoint.y)) {
+ return building;
+ }
+ }
+ return null;
}
- }
- public void refresh(Building building) {
- if (building.favourite) {
- buildings.remove(building);
- buildings.add(building);
+ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
+ Log.i(TAG, "Got a favourites change in the BuildingNumOverlay for key " + key);
+
+ Collections.sort(buildings, new POIFavouriteComparator(context.getSharedPreferences(FAVOURITES_PREFERENCES, 0)));
}
- }
}
diff --git a/src/net/cbaines/suma/BusActivity.java b/src/net/cbaines/suma/BusActivity.java
index c626158..e7ddc30 100644
--- a/src/net/cbaines/suma/BusActivity.java
+++ b/src/net/cbaines/suma/BusActivity.java
@@ -306,8 +306,6 @@ public class BusActivity extends OrmLiteBaseActivity<DatabaseHelper> implements
private void displayTimetable(Timetable timetable) {
visibleTimetable = (Timetable) timetable.clone();
- // Log.i(TAG, "Displaying timetable, it contains " + visibleTimetable.size() + " stops");
-
if (timetable.size() == 0) {
busContentMessage.setText("No Busses");
busContentMessage.setVisibility(View.VISIBLE);
diff --git a/src/net/cbaines/suma/BusSpecificStopView.java b/src/net/cbaines/suma/BusSpecificStopView.java
index 293da03..4cac19a 100644
--- a/src/net/cbaines/suma/BusSpecificStopView.java
+++ b/src/net/cbaines/suma/BusSpecificStopView.java
@@ -108,6 +108,7 @@ public class BusSpecificStopView extends LinearLayout implements OnClickListener
if (stop.bus.id != null) {
if (stop.live) {
+
onClickMessage = "Bus " + stop.bus.toString() + " at "
+ DateFormat.getTimeInstance(DateFormat.SHORT).format(stop.arivalTime);
} else {
@@ -121,6 +122,7 @@ public class BusSpecificStopView extends LinearLayout implements OnClickListener
} else {
onClickMessage = "Timetabled bus (" + stop.bus.getName() + ") at "
+ DateFormat.getTimeInstance(DateFormat.SHORT).format(stop.arivalTime);
+
}
}
} else {
@@ -128,6 +130,7 @@ public class BusSpecificStopView extends LinearLayout implements OnClickListener
if (stop.live) {
onClickMessage = "Bus " + stop.bus.toString();
} else {
+
onClickMessage = "Timetabled bus " + stop.bus.toString();
}
} else {
@@ -135,6 +138,7 @@ public class BusSpecificStopView extends LinearLayout implements OnClickListener
onClickMessage = "Unidentified bus (" + stop.bus.getName() + ")";
} else {
onClickMessage = "Timetabled bus (" + stop.bus.getName() + ")";
+
}
}
}
@@ -148,7 +152,9 @@ public class BusSpecificStopView extends LinearLayout implements OnClickListener
public void onClick(View v) {
if (context.activityToast == null) {
+
context.activityToast = Toast.makeText(context, onClickMessage, Toast.LENGTH_SHORT);
+
} else {
context.activityToast.setText(onClickMessage);
context.activityToast.setDuration(Toast.LENGTH_SHORT);
@@ -157,6 +163,7 @@ public class BusSpecificStopView extends LinearLayout implements OnClickListener
}
public boolean onLongClick(View v) { // TODO
+
DatabaseHelper helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
try {
@@ -170,10 +177,12 @@ public class BusSpecificStopView extends LinearLayout implements OnClickListener
((Activity) context).startActivityForResult(i, 0);
} else {
if (context.activityToast == null) {
+
context.activityToast = Toast.makeText(context, "Arival prediction not avalible for timetabled buses",
Toast.LENGTH_SHORT);
} else {
context.activityToast.setText("Arival prediction not avalible for timetabled buses");
+
context.activityToast.setDuration(Toast.LENGTH_SHORT);
}
context.activityToast.show();
@@ -184,5 +193,4 @@ public class BusSpecificStopView extends LinearLayout implements OnClickListener
}
return false;
}
-
}
diff --git a/src/net/cbaines/suma/BusStopActivity.java b/src/net/cbaines/suma/BusStopActivity.java
index ab0a9b5..07dd45c 100644
--- a/src/net/cbaines/suma/BusStopActivity.java
+++ b/src/net/cbaines/suma/BusStopActivity.java
@@ -64,8 +64,6 @@ public class BusStopActivity extends OrmLiteBaseActivity<DatabaseHelper> impleme
final static String TAG = "BusTimeActivity";
- private boolean dataChanged;
-
private ListView busTimeList;
private TextView busName;
private TextView busID;
@@ -106,10 +104,12 @@ public class BusStopActivity extends OrmLiteBaseActivity<DatabaseHelper> impleme
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.bustimes);
+ setContentView(R.layout.bus_stop_activity);
final DatabaseHelper helper = getHelper();
+ SharedPreferences favouritesPreferences = getSharedPreferences(FAVOURITES_PREFERENCES, 0);
+
instance = this;
busStopID = getIntent().getExtras().getString("busStopID");
@@ -184,7 +184,7 @@ public class BusStopActivity extends OrmLiteBaseActivity<DatabaseHelper> impleme
busStop = busStopDao.queryForId(busStopID);
busFavourite = (CheckBox) findViewById(R.id.favouriteCheckBox);
- busFavourite.setChecked(busStop.favourite);
+ busFavourite.setChecked(favouritesPreferences.getBoolean(busStop.id, false));
busFavourite.setOnCheckedChangeListener(this);
} catch (SQLException e) {
@@ -247,7 +247,8 @@ public class BusStopActivity extends OrmLiteBaseActivity<DatabaseHelper> impleme
public void onPause() {
if (mHandler != null) { // BusTimes are enabled
mHandler.removeCallbacks(refreshData);
- if (timetableTask != null) // Could happen if the handler has not created the timetableTask yet
+ if (timetableTask != null) // Could happen if the handler has not
+ // created the timetableTask yet
timetableTask.cancel(true);
Log.i(TAG, "Stoping refreshing timetable data");
}
@@ -256,23 +257,18 @@ public class BusStopActivity extends OrmLiteBaseActivity<DatabaseHelper> impleme
}
public void finish() {
- if (dataChanged) {
- getIntent().putExtra("busStopChanged", busStopID);
- }
-
setResult(RESULT_OK, getIntent());
-
super.finish();
}
public void onCheckedChanged(CompoundButton button, boolean checked) {
if (button.equals(busFavourite)) {
- busStop.favourite = checked;
- try {
- busStopDao.update(busStop);
- dataChanged = true;
- } catch (SQLException e) {
- e.printStackTrace();
+ SharedPreferences favouritesPreferences = getSharedPreferences(FAVOURITES_PREFERENCES, 0);
+
+ if (checked) {
+ favouritesPreferences.edit().putBoolean(busStop.id, true).commit();
+ } else {
+ favouritesPreferences.edit().remove(busStop.id).commit();
}
} else {
Log.i(TAG, "Route radio button made " + checked);
@@ -372,7 +368,6 @@ public class BusStopActivity extends OrmLiteBaseActivity<DatabaseHelper> impleme
e.printStackTrace();
}
}
-
Log.i(TAG, "stops " + busStops);
if (busStops.size() == 1) {
diff --git a/src/net/cbaines/suma/BusStopOverlay.java b/src/net/cbaines/suma/BusStopOverlay.java
index 06a1729..4705d1d 100644
--- a/src/net/cbaines/suma/BusStopOverlay.java
+++ b/src/net/cbaines/suma/BusStopOverlay.java
@@ -29,6 +29,7 @@ import org.osmdroid.views.overlay.Overlay;
import android.app.Activity;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
@@ -39,313 +40,281 @@ import android.util.Log;
import android.view.MotionEvent;
import android.widget.Toast;
-import com.j256.ormlite.android.apptools.OpenHelperManager;
-import com.j256.ormlite.dao.Dao;
+public class BusStopOverlay extends Overlay implements RouteColorConstants, Preferences {
-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 float userScale = 1f;
- private Dao<BusStop, String> busStopDao;
+ private boolean[] routes = new boolean[5];
- private float userScale = 1f;
+ public BusStopOverlay(MapActivity context, List<BusStop> busStops) throws SQLException {
+ super(context);
- private boolean[] routes = new boolean[5];
+ this.context = context;
- public BusStopOverlay(MapActivity context, List<BusStop> busStops) throws SQLException {
- super(context);
+ marker = context.getResources().getDrawable(R.drawable.busstop);
+ favMarker = context.getResources().getDrawable(R.drawable.busstop_fav);
- this.context = context;
+ paint = new Paint();
+ paint.setStyle(Style.FILL);
+ paint.setStrokeWidth(6);
- 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();
-
- 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) {
+ this.busStops = busStops;
+ }
- if (shadow) {
- return;
+ void setRoutes(int route, boolean visible) {
+ routes[route] = visible;
}
- float scale = mScale * userScale;
+ @Override
+ public void draw(final Canvas canvas, final MapView mapView, final boolean shadow) {
- final Projection pj = mapView.getProjection();
+ if (shadow) {
+ return;
+ }
- final int markerWidth = (int) (marker.getIntrinsicWidth() * userScale);
- final int markerHeight = (int) (marker.getIntrinsicHeight() * userScale);
+ final float scale = mScale * userScale;
- mRect.set(0, 0, 0 + markerWidth, 0 + markerHeight);
- mRect.offset(-markerWidth / 2, -markerHeight);
- marker.setBounds(mRect);
- favMarker.setBounds(mRect);
+ final Projection pj = mapView.getProjection();
- /* Draw in backward cycle, so the items with the least index are on the front. */
+ final int markerWidth = (int) (marker.getIntrinsicWidth() * userScale);
+ final int markerHeight = (int) (marker.getIntrinsicHeight() * userScale);
- for (int stopNum = 0; stopNum < busStops.size(); stopNum++) {
- BusStop stop = busStops.get(stopNum);
+ mRect.set(0, 0, 0 + markerWidth, 0 + markerHeight);
+ mRect.offset(-markerWidth / 2, -markerHeight);
+ marker.setBounds(mRect);
+ favMarker.setBounds(mRect);
- byte routeNum = 0;
- final byte stopRoutes = stop.routes;
+ final SharedPreferences favouritesPreferences = context.getSharedPreferences(FAVOURITES_PREFERENCES, 0);
- 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;
+ pj.toMapPixels(stop.point, mCurScreenCoords);
+ if (!pj.getBoundingBox().increaseByScale(1.2f).contains(stop.point)) {
+ continue;
}
- }
- }
- if (!drawing)
- continue;
+ byte routeNum = 0;
+ final byte stopRoutes = stop.routes;
- }
+ boolean drawing = false;
- pj.toMapPixels(stop.point, mCurScreenCoords);
+ if (stop.uniLink) {
- if (stop.favourite) {
- Overlay.drawAt(canvas, favMarker, mCurScreenCoords.x, mCurScreenCoords.y, false);
- } else {
- Overlay.drawAt(canvas, marker, mCurScreenCoords.x, mCurScreenCoords.y, false);
- }
+ for (int i = 0; i < 5; i++) {
+ if ((stopRoutes & (1 << i)) != 0) {
+ routeNum++;
+ if (routes[i]) {
+ drawing = true;
+ }
+ }
+ }
- if (stop.uniLink) {
+ if (!drawing)
+ continue;
- 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 (favouritesPreferences.getBoolean(stop.id, false)) {
+ 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;
+
+ final float rectLeft = mCurScreenCoords.x + (8.8f * scale);
+ final float rectRight = rectLeft + (int) (8 * scale);
+
+ int yOfsetPerMarker = (int) (10 * scale);
+ int markerYSize = (int) (8 * scale);
+
+ 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) {
+
+ 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) {
+ 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, "busStop Pressed " + busStop.id);
-
- 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;
- }
- }
+ BusStop busStop = getSelectedItem(event, mapView);
- 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();
+ Log.i(TAG, "Pressed " + busStop.id);
- busStop.favourite = true;
- }
+ SharedPreferences favouritesPreferences = context.getSharedPreferences(FAVOURITES_PREFERENCES, 0);
- try {
- busStopDao.update(busStop);
- } catch (SQLException e) {
- e.printStackTrace();
- }
+ if (favouritesPreferences.getBoolean(busStop.id, false)) {
+ favouritesPreferences.edit().remove(busStop.id).commit();
- Collections.sort(busStops, new POIFavouriteComparator());
+ 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();
+
+ favouritesPreferences.edit().putBoolean(busStop.id, true).commit();
+ }
- mapView.invalidate();
+ Collections.sort(busStops, new POIFavouriteComparator(context.getSharedPreferences(FAVOURITES_PREFERENCES, 0)));
- 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);
+ mapView.invalidate();
+
+ 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);
- }
- }
- }
-
- 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;
- }
+
+ private BusStop getSelectedItem(final MotionEvent event, final MapView mapView) {
+ Log.i(TAG, "Getting selected item");
+
+ 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;
}
- }
- if (!drawing)
- continue;
}
+ return null;
+ }
+
+ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
+ Log.i(TAG, "Got a favourites change in the BuildingNumOverlay for key " + key);
- return busStop;
- }
+ Collections.sort(busStops, new POIFavouriteComparator(context.getSharedPreferences(FAVOURITES_PREFERENCES, 0)));
}
- return null;
- }
}
diff --git a/src/net/cbaines/suma/DataManager.java b/src/net/cbaines/suma/DataManager.java
index c6a3a36..2234328 100644
--- a/src/net/cbaines/suma/DataManager.java
+++ b/src/net/cbaines/suma/DataManager.java
@@ -66,823 +66,828 @@ import com.j256.ormlite.table.TableUtils;
public class DataManager {
- private final static String TAG = "DataManager";
+ private final static String TAG = "DataManager";
- private final static String busStopUrl = "http://data.southampton.ac.uk/bus-stop/";
+ private final static String busStopUrl = "http://data.southampton.ac.uk/bus-stop/";
- private static DatabaseHelper helper;
- private static Dao<BusRoute, Integer> busRouteDao;
- private static Dao<Bus, Integer> busDao;
- private static Dao<BusStop, String> busStopDao;
+ private static DatabaseHelper helper;
+ private static Dao<BusRoute, Integer> busRouteDao;
+ private static Dao<Bus, Integer> busDao;
+ private static Dao<BusStop, String> busStopDao;
- public static void loadBuildings(Context context) throws SQLException, IOException {
- DatabaseHelper helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
- Dao<Building, String> buildingDao = helper.getBuildingDao();
+ public static void loadBuildings(Context context) throws SQLException, IOException {
+ DatabaseHelper helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
+ Dao<Building, String> buildingDao = helper.getBuildingDao();
- TableUtils.clearTable(helper.getConnectionSource(), Building.class);
+ TableUtils.clearTable(helper.getConnectionSource(), Building.class);
- Log.i(TAG, "Begining loading buildings from csv");
+ Log.i(TAG, "Begining loading buildings from csv");
- HashMap<String, GeoPoint> buildingPoints = new HashMap<String, GeoPoint>();
+ HashMap<String, GeoPoint> buildingPoints = new HashMap<String, GeoPoint>();
- InputStream inputStream = context.getAssets().open("buildings_points.csv");
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
- String strLine;
- try {
- String def = bufferedReader.readLine();
- // Log.i(TAG, "Reading the definition " + def);
+ InputStream inputStream = context.getAssets().open("buildings_points.csv");
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+ String strLine;
+ try {
+ String def = bufferedReader.readLine();
+ // Log.i(TAG, "Reading the definition " + def);
- while ((strLine = bufferedReader.readLine()) != null) {
- // Log.i(TAG, "Data: " + strLine);
- String[] dataBits = strLine.split(",");
- GeoPoint point = Util.csLatLongToGeoPoint(dataBits[2], dataBits[1]);
- // Log.i(TAG, "Creating building with id " + dataBits[0] + " and " + point.getLatitudeE6() + " " +
- // point.getLongitudeE6());
- buildingPoints.put(dataBits[0], point);
- }
+ while ((strLine = bufferedReader.readLine()) != null) {
+ // Log.i(TAG, "Data: " + strLine);
+ String[] dataBits = strLine.split(",");
+ GeoPoint point = Util.csLatLongToGeoPoint(dataBits[2], dataBits[1]);
+ // Log.i(TAG, "Creating building with id " + dataBits[0] +
+ // " and " + point.getLatitudeE6() + " " +
+ // point.getLongitudeE6());
+ buildingPoints.put(dataBits[0], point);
+ }
- bufferedReader.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
+ bufferedReader.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
- // Log.i(TAG, "Number of building points " + buildingPoints.size());
+ // Log.i(TAG, "Number of building points " + buildingPoints.size());
+
+ inputStream = context.getAssets().open("building_estates.csv");
+ bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+
+ try {
+ String def = bufferedReader.readLine();
+ // Log.i(TAG, "Reading the definition " + def);
+
+ while ((strLine = bufferedReader.readLine()) != null) {
+ // Log.i(TAG, "Data: " + strLine);
+ if (strLine.startsWith("\"")) {
+ String[] quoteBits = strLine.split("\"");
+ // Log.i(TAG, "QuoteBits " + quoteBits[0] + " | " +
+ // quoteBits[1]);
+ String[] dataBits = quoteBits[2].split(",");
+ // Log.i(TAG, "dataBits " + dataBits[0] + " | " +
+ // dataBits[1]);
+
+ if (buildingPoints.get(dataBits[1]) == null) {
+ // Log.w(TAG, "Building " + dataBits[1] +
+ // " has a null point");
+ continue;
+ }
+
+ Building bdg = new Building(dataBits[1], buildingPoints.get(dataBits[1]), dataBits[3].equals("R"),
+ quoteBits[0]);
+ /*
+ * Polygon poly = buildingPolys.get(dataBits[1]);
+ *
+ * if (poly != null) { bdg.outline = poly; // Log.i(TAG, "Adding building " + key + " " +
+ * bdg.point.getLatitudeE6() + " " + bdg.point.getLongitudeE6() + " " + poly); } else { // Log.i(TAG,
+ * "Adding building " + key + " " + bdg.point.getLatitudeE6() + " " + bdg.point.getLongitudeE6()); }
+ */
+
+ // Log.i(TAG, "Creating building " + bdg.id + " " + bdg.name
+ // + " " + bdg.point + " " +
+ // bdg.residential + " " + bdg.outline);
+
+ buildingDao.create(bdg);
+
+ } else {
+
+ String[] dataBits = strLine.split(",");
+
+ if (buildingPoints.get(dataBits[1]) == null) {
+ // Log.w(TAG, "Building " + dataBits[1] +
+ // " has a null point");
+ continue;
+ }
+
+ Building bdg = new Building(dataBits[1], buildingPoints.get(dataBits[1]), dataBits[3].equals("R"),
+ dataBits[0]);
+ /*
+ * Polygon poly = buildingPolys.get(dataBits[1]);
+ *
+ * if (poly != null) { bdg.outline = poly; // Log.i(TAG, "Adding building " + key + " " +
+ * bdg.point.getLatitudeE6() + " " + bdg.point.getLongitudeE6() + " " + poly); } else { // Log.i(TAG,
+ * "Adding building " + key + " " + bdg.point.getLatitudeE6() + " " + bdg.point.getLongitudeE6()); }
+ */
+
+ // Log.i(TAG, "Creating building " + bdg.id + " " + bdg.name
+ // + " " + bdg.point + " " +
+ // bdg.residential + " " + bdg.outline);
+
+ buildingDao.create(bdg);
+
+ }
+ }
+
+ bufferedReader.close();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
- inputStream = context.getAssets().open("building_estates.csv");
- bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+ /*
+ * for (Iterator<String> iter = buildingPoints.keySet().iterator(); iter.hasNext();) { String key = iter.next();
+ *
+ * Building bdg = new Building(key, buildingPoints.get(key), false); Polygon poly = buildingPolys.get(key);
+ *
+ * if (poly != null) { bdg.outline = poly; // Log.i(TAG, "Adding building " + key + " " + bdg.point.getLatitudeE6() + " "
+ * + bdg.point.getLongitudeE6() + " " + poly); } else { // Log.i(TAG, "Adding building " + key + " " +
+ * bdg.point.getLatitudeE6() + " " + bdg.point.getLongitudeE6()); }
+ *
+ * buildingDao.create(bdg); }
+ */
- try {
- String def = bufferedReader.readLine();
- // Log.i(TAG, "Reading the definition " + def);
+ }
- while ((strLine = bufferedReader.readLine()) != null) {
- // Log.i(TAG, "Data: " + strLine);
- if (strLine.startsWith("\"")) {
- String[] quoteBits = strLine.split("\"");
- // Log.i(TAG, "QuoteBits " + quoteBits[0] + " | " + quoteBits[1]);
- String[] dataBits = quoteBits[2].split(",");
- // Log.i(TAG, "dataBits " + dataBits[0] + " | " + dataBits[1]);
+ public static void loadBusData(Context context, boolean onlyUniLink) throws SQLException, IOException {
+ DatabaseHelper helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
- if (buildingPoints.get(dataBits[1]) == null) {
- // Log.w(TAG, "Building " + dataBits[1] + " has a null point");
- continue;
- }
+ Dao<BusStop, String> busStopDao = helper.getBusStopDao();
+ Dao<BusRoute, Integer> busRouteDao = helper.getBusRouteDao();
+ Dao<RouteStops, Integer> routeStopsDao = helper.getRouteStopsDao();
- Building bdg = new Building(dataBits[1], buildingPoints.get(dataBits[1]), dataBits[3].equals("R"),
- quoteBits[0]);
- /*
- * Polygon poly = buildingPolys.get(dataBits[1]);
- *
- * if (poly != null) { bdg.outline = poly; // Log.i(TAG, "Adding building " + key + " " +
- * bdg.point.getLatitudeE6() + " " + bdg.point.getLongitudeE6() + " " + poly); } else { //
- * Log.i(TAG, "Adding building " + key + " " + bdg.point.getLatitudeE6() + " " +
- * bdg.point.getLongitudeE6()); }
- */
+ TableUtils.clearTable(helper.getConnectionSource(), BusStop.class);
+ TableUtils.clearTable(helper.getConnectionSource(), BusRoute.class);
+ TableUtils.clearTable(helper.getConnectionSource(), RouteStops.class);
- // Log.i(TAG, "Creating building " + bdg.id + " " + bdg.name + " " + bdg.point + " " +
- // bdg.residential + " " + bdg.outline);
+ Log.i(TAG, "Loading busstops from csv");
- buildingDao.create(bdg);
+ InputStream inputStream = context.getAssets().open("bus_stops.csv");
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+ String strLine = "";
- } else {
+ try {
+ String def = bufferedReader.readLine();
+ // Log.i(TAG, "Reading the definition " +def );
- String[] dataBits = strLine.split(",");
+ while ((strLine = bufferedReader.readLine()) != null) {
+ // Log.i(TAG, "Data: " + strLine);
+ String[] dataBits = strLine.split(",");
- if (buildingPoints.get(dataBits[1]) == null) {
- // Log.w(TAG, "Building " + dataBits[1] + " has a null point");
- continue;
- }
+ String[] quBitsLat = dataBits[3].substring(1, dataBits[3].length() - 1).split(" ");
+ String[] quBitsLng = dataBits[4].substring(1, dataBits[4].length() - 1).split(" ");
- Building bdg = new Building(dataBits[1], buildingPoints.get(dataBits[1]), dataBits[3].equals("R"),
- dataBits[0]);
- /*
- * Polygon poly = buildingPolys.get(dataBits[1]);
- *
- * if (poly != null) { bdg.outline = poly; // Log.i(TAG, "Adding building " + key + " " +
- * bdg.point.getLatitudeE6() + " " + bdg.point.getLongitudeE6() + " " + poly); } else { //
- * Log.i(TAG, "Adding building " + key + " " + bdg.point.getLatitudeE6() + " " +
- * bdg.point.getLongitudeE6()); }
- */
+ // Log.i(TAG, "Whole " + dataBits[3] + " First bit " +
+ // quBitsLat[0] + " last bit " + quBitsLat[1]);
+ double lat = Double.valueOf(quBitsLat[0]) + Double.valueOf(quBitsLat[1].substring(0, quBitsLat[1].length() - 1))
+ / 60d;
+ // Log.i(TAG, "Whole " + dataBits[4] + " First bit " +
+ // quBitsLng[0] + " last bit " + quBitsLng[1]);
+ double lng = Double.valueOf(quBitsLng[0]) + Double.valueOf(quBitsLng[1].substring(0, quBitsLng[1].length() - 1))
+ / 60d;
+ GeoPoint point = new GeoPoint((int) (lat * 1e6), (int) (lng * -1e6));
+ // Log.i(TAG, "Lat " + point.getLatitudeE6() + " lng " +
+ // point.getLongitudeE6());
- // Log.i(TAG, "Creating building " + bdg.id + " " + bdg.name + " " + bdg.point + " " +
- // bdg.residential + " " + bdg.outline);
+ busStopDao.create(new BusStop(dataBits[0].replace("\"", ""), dataBits[1].replace("\"", ""), dataBits[2].replace(
+ "\"", ""), point));
- buildingDao.create(bdg);
+ }
+ bufferedReader.close();
+ } catch (IOException e) {
+ Log.e(TAG, "Line: " + strLine);
+ e.printStackTrace();
}
- }
- bufferedReader.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
+ Log.i(TAG, "Finished loading busstops, now loading routes");
- /*
- * for (Iterator<String> iter = buildingPoints.keySet().iterator(); iter.hasNext();) { String key = iter.next();
- *
- * Building bdg = new Building(key, buildingPoints.get(key), false); Polygon poly = buildingPolys.get(key);
- *
- * if (poly != null) { bdg.outline = poly; // Log.i(TAG, "Adding building " + key + " " +
- * bdg.point.getLatitudeE6() + " " + bdg.point.getLongitudeE6() + " " + poly); } else { // Log.i(TAG,
- * "Adding building " + key + " " + bdg.point.getLatitudeE6() + " " + bdg.point.getLongitudeE6()); }
- *
- * buildingDao.create(bdg); }
- */
-
- }
-
- public static void loadBusData(Context context, boolean onlyUniLink) throws SQLException, IOException {
- DatabaseHelper helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
-
- Dao<BusStop, String> busStopDao = helper.getBusStopDao();
- Dao<BusRoute, Integer> busRouteDao = helper.getBusRouteDao();
- Dao<RouteStops, Integer> routeStopsDao = helper.getRouteStopsDao();
-
- TableUtils.clearTable(helper.getConnectionSource(), BusStop.class);
- TableUtils.clearTable(helper.getConnectionSource(), BusRoute.class);
- TableUtils.clearTable(helper.getConnectionSource(), RouteStops.class);
-
- Log.i(TAG, "Loading busstops from csv");
-
- InputStream inputStream = context.getAssets().open("bus_stops.csv");
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
- String strLine = "";
-
- try {
- String def = bufferedReader.readLine();
- // Log.i(TAG, "Reading the definition " +def );
-
- while ((strLine = bufferedReader.readLine()) != null) {
- // Log.i(TAG, "Data: " + strLine);
- String[] dataBits = strLine.split(",");
-
- String[] quBitsLat = dataBits[3].substring(1, dataBits[3].length() - 1).split(" ");
- String[] quBitsLng = dataBits[4].substring(1, dataBits[4].length() - 1).split(" ");
-
- // Log.i(TAG, "Whole " + dataBits[3] + " First bit " + quBitsLat[0] + " last bit " + quBitsLat[1]);
- double lat = Double.valueOf(quBitsLat[0])
- + Double.valueOf(quBitsLat[1].substring(0, quBitsLat[1].length() - 1)) / 60d;
- // Log.i(TAG, "Whole " + dataBits[4] + " First bit " + quBitsLng[0] + " last bit " + quBitsLng[1]);
- double lng = Double.valueOf(quBitsLng[0])
- + Double.valueOf(quBitsLng[1].substring(0, quBitsLng[1].length() - 1)) / 60d;
- GeoPoint point = new GeoPoint((int) (lat * 1e6), (int) (lng * -1e6));
- // Log.i(TAG, "Lat " + point.getLatitudeE6() + " lng " + point.getLongitudeE6());
-
- busStopDao.create(new BusStop(dataBits[0].replace("\"", ""), dataBits[1].replace("\"", ""), dataBits[2]
- .replace("\"", ""), point));
-
- }
-
- bufferedReader.close();
- } catch (IOException e) {
- Log.e(TAG, "Line: " + strLine);
- e.printStackTrace();
- }
+ inputStream = context.getAssets().open("routes.csv");
+ bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
- Log.i(TAG, "Finished loading busstops, now loading routes");
+ try {
+ String def = bufferedReader.readLine();
+ // Log.i(TAG, "Reading the definition " + def);
- inputStream = context.getAssets().open("routes.csv");
- bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+ while ((strLine = bufferedReader.readLine()) != null) {
+ // Log.i(TAG, "Data: " + strLine);
+ String[] dataBits = strLine.split(",");
- try {
- String def = bufferedReader.readLine();
- // Log.i(TAG, "Reading the definition " + def);
+ BusRoute route;
- while ((strLine = bufferedReader.readLine()) != null) {
- // Log.i(TAG, "Data: " + strLine);
- String[] dataBits = strLine.split(",");
+ boolean uniLink;
+ int id = Integer.parseInt(dataBits[0]);
+ if (id == 326 || id == 468 || id == 327 || id == 329 || id == 354) {
+ uniLink = true;
+ } else {
+ uniLink = false;
+ }
- BusRoute route;
+ route = new BusRoute(id, dataBits[1], dataBits[2].replace("\"", ""), uniLink);
- boolean uniLink;
- int id = Integer.parseInt(dataBits[0]);
- if (id == 326 || id == 468 || id == 327 || id == 329 || id == 354) {
- uniLink = true;
- } else {
- uniLink = false;
- }
+ if (id == 326) { // U1
+ route.forwardDirection = "A";
+ route.reverseDirection = "C";
+ } else if (id == 329) { // U2
+ route.forwardDirection = "B";
+ route.reverseDirection = "C";
+ } else if (id == 327) { // U6
+ route.forwardDirection = "H";
+ route.reverseDirection = "C";
+ }
+
+ // Log.i(TAG, "Loaded route " + route.id + " " + route.code +
+ // " " + route.label);
+ busRouteDao.create(route);
+
+ }
- route = new BusRoute(id, dataBits[1], dataBits[2].replace("\"", ""), uniLink);
-
- if (id == 326) { // U1
- route.forwardDirection = "A";
- route.reverseDirection = "C";
- } else if (id == 329) { // U2
- route.forwardDirection = "B";
- route.reverseDirection = "C";
- } else if (id == 327) { // U6
- route.forwardDirection = "H";
- route.reverseDirection = "C";
+ bufferedReader.close();
+ } catch (IOException e) {
+ Log.e(TAG, "Line: " + strLine);
+ e.printStackTrace();
}
- // Log.i(TAG, "Loaded route " + route.id + " " + route.code + " " + route.label);
- busRouteDao.create(route);
+ Log.i(TAG, "Finished loading routes, now loading routestops");
+
+ inputStream = context.getAssets().open("routestops.csv");
+ bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+
+ try {
+ String def = bufferedReader.readLine();
+ // Log.i(TAG, "Reading the definition " + def);
+
+ while ((strLine = bufferedReader.readLine()) != null) {
+ // Log.i(TAG, "Data: " + strLine);
+ String[] dataBits = strLine.split(",");
+
+ BusStop busStop = busStopDao.queryForId(dataBits[2]);
+ if (busStop != null) {
+ // Log.i(TAG, "Found stop " + stop.id);
+ } else {
+ Log.w(TAG, "No stop found for " + dataBits[2]);
+ continue;
+ }
+
+ BusRoute busRoute = busRouteDao.queryForId(Integer.parseInt(dataBits[0]));
+ if (busRoute != null) {
+ // Log.i(TAG, "Found route " + route.id);
+ } else {
+ Log.w(TAG, "No route found for " + dataBits[0]);
+ continue;
+ }
+
+ int sequence = Integer.parseInt(dataBits[1]);
+ Log.i(TAG, "Creating RouteStop " + busStop.id + " " + busRoute.code + " " + sequence);
+
+ routeStopsDao.create(new RouteStops(busStop, busRoute, sequence));
+
+ if (busRoute.id == 326) { // U1
+ busStop.routes = (byte) (busStop.routes | 1);
+ busStop.uniLink = true;
+ } else if (busRoute.id == 468) { // U1N
+ busStop.routes = (byte) (busStop.routes | (1 << 1));
+ busStop.uniLink = true;
+ } else if (busRoute.id == 329) { // U2
+ busStop.routes = (byte) (busStop.routes | (1 << 2));
+ busStop.uniLink = true;
+ } else if (busRoute.id == 327) { // U6
+ busStop.routes = (byte) (busStop.routes | (1 << 3));
+ busStop.uniLink = true;
+ } else if (busRoute.id == 354) { // U9
+ busStop.routes = (byte) (busStop.routes | (1 << 4));
+ busStop.uniLink = true;
+ }
+
+ // Log.v(TAG, "Stop routes " + busStop.routes);
+ busStopDao.update(busStop);
- }
+ }
- bufferedReader.close();
- } catch (IOException e) {
- Log.e(TAG, "Line: " + strLine);
- e.printStackTrace();
+ bufferedReader.close();
+ } catch (IOException e) {
+ Log.e(TAG, "Line: " + strLine);
+ e.printStackTrace();
+ }
+
+ /*
+ * for (Iterator<BusStop> busStopIter = busStopDao.iterator(); busStopIter.hasNext();) { BusStop stop =
+ * busStopIter.next(); // Log.i(TAG, "Looking at stop " + stop.id);
+ *
+ *
+ * QueryBuilder<RouteStops, Integer> routeStopsQueryBuilder = routeStopsDao.queryBuilder();
+ * routeStopsQueryBuilder.where().eq(columnName, value)
+ *
+ * DeleteBuilder<BusStop, String> deleteBuilder = busStopDao.deleteBuilder(); // only delete the rows where password is
+ * null deleteBuilder.where().in(RouteStops.STOP_ID_FIELD_NAME, objects) accountDao.delete(deleteBuilder.prepare());
+ *
+ *
+ * QueryBuilder<RouteStops, Integer> routeStopsQueryBuilder = routeStopsDao.queryBuilder();
+ * routeStopsQueryBuilder.setCountOf(true); routeStopsQueryBuilder.where().eq(RouteStops.STOP_ID_FIELD_NAME, stop);
+ *
+ * PreparedQuery<RouteStops> routeStopsPreparedQuery = routeStopsQueryBuilder.prepare(); List<RouteStops> routeStops =
+ * routeStopsDao.query(routeStopsPreparedQuery); // long num = routeStopsDao.query(routeStopsPreparedQuery).size(); //
+ * Log.i(TAG, "Number is " + num);
+ *
+ * stop.uniLink = false; for (RouteStops routeStop : routeStops) { if (routeStop.busRoute.uniLink) { stop.uniLink = true;
+ * } } busStopDao.update(stop); }
+ */
+
+ Log.i(TAG, "Finished loading bus data");
}
- Log.i(TAG, "Finished loading routes, now loading routestops");
+ public static void loadSiteData(Context context) throws SQLException, IOException {
+ Log.i(TAG, "Begining loading site data");
- inputStream = context.getAssets().open("routestops.csv");
- bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+ DatabaseHelper helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
- try {
- String def = bufferedReader.readLine();
- // Log.i(TAG, "Reading the definition " + def);
+ TableUtils.clearTable(helper.getConnectionSource(), Site.class);
- while ((strLine = bufferedReader.readLine()) != null) {
- // Log.i(TAG, "Data: " + strLine);
- String[] dataBits = strLine.split(",");
+ Dao<Site, String> siteDao = helper.getSiteDao();
- BusStop busStop = busStopDao.queryForId(dataBits[2]);
- if (busStop != null) {
- // Log.i(TAG, "Found stop " + stop.id);
- } else {
- Log.w(TAG, "No stop found for " + dataBits[2]);
- continue;
- }
+ InputStream inputStream = context.getAssets().open("sites.csv");
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+ String strLine = null;
- BusRoute busRoute = busRouteDao.queryForId(Integer.parseInt(dataBits[0]));
- if (busRoute != null) {
- // Log.i(TAG, "Found route " + route.id);
- } else {
- Log.w(TAG, "No route found for " + dataBits[0]);
- continue;
- }
+ try {
+ String def = bufferedReader.readLine();
+ // Log.i(TAG, "Reading the site definition " + def);
- int sequence = Integer.parseInt(dataBits[1]);
- Log.i(TAG, "Creating RouteStop " + busStop.id + " " + busRoute.code + " " + sequence);
-
- routeStopsDao.create(new RouteStops(busStop, busRoute, sequence));
-
- if (busRoute.id == 326) { // U1
- busStop.routes = (byte) (busStop.routes | 1);
- busStop.uniLink = true;
- } else if (busRoute.id == 468) { // U1N
- busStop.routes = (byte) (busStop.routes | (1 << 1));
- busStop.uniLink = true;
- } else if (busRoute.id == 329) { // U2
- busStop.routes = (byte) (busStop.routes | (1 << 2));
- busStop.uniLink = true;
- } else if (busRoute.id == 327) { // U6
- busStop.routes = (byte) (busStop.routes | (1 << 3));
- busStop.uniLink = true;
- } else if (busRoute.id == 354) { // U9
- busStop.routes = (byte) (busStop.routes | (1 << 4));
- busStop.uniLink = true;
- } else {
- busStop.routes = 0;
- }
+ while ((strLine = bufferedReader.readLine()) != null) {
+ // Log.i(TAG, "Site Data: " + strLine);
+ String[] dataBits = strLine.split(",");
- // Log.v(TAG, "Stop routes " + busStop.routes);
- busStopDao.update(busStop);
+ GeoPoint point = null;
+ if (dataBits[2].length() > 1 && dataBits[3].length() > 1) {
+ point = Util.csLatLongToGeoPoint(dataBits[2], dataBits[3]);
+ } else {
+ point = new GeoPoint(0, 0);
+ }
- }
+ Polygon poly = Util.csPolygonToPolygon(strLine.split("\"")[1]);
+ // Log.i(TAG, "Polygon: " + poly);
- bufferedReader.close();
- } catch (IOException e) {
- Log.e(TAG, "Line: " + strLine);
- e.printStackTrace();
- }
+ siteDao.create(new Site(dataBits[0], dataBits[1], point, poly));
+ }
- /*
- * for (Iterator<BusStop> busStopIter = busStopDao.iterator(); busStopIter.hasNext();) { BusStop stop =
- * busStopIter.next(); // Log.i(TAG, "Looking at stop " + stop.id);
- *
- *
- * QueryBuilder<RouteStops, Integer> routeStopsQueryBuilder = routeStopsDao.queryBuilder();
- * routeStopsQueryBuilder.where().eq(columnName, value)
- *
- * DeleteBuilder<BusStop, String> deleteBuilder = busStopDao.deleteBuilder(); // only delete the rows where
- * password is null deleteBuilder.where().in(RouteStops.STOP_ID_FIELD_NAME, objects)
- * accountDao.delete(deleteBuilder.prepare());
- *
- *
- * QueryBuilder<RouteStops, Integer> routeStopsQueryBuilder = routeStopsDao.queryBuilder();
- * routeStopsQueryBuilder.setCountOf(true); routeStopsQueryBuilder.where().eq(RouteStops.STOP_ID_FIELD_NAME,
- * stop);
- *
- * PreparedQuery<RouteStops> routeStopsPreparedQuery = routeStopsQueryBuilder.prepare(); List<RouteStops>
- * routeStops = routeStopsDao.query(routeStopsPreparedQuery); // long num =
- * routeStopsDao.query(routeStopsPreparedQuery).size(); // Log.i(TAG, "Number is " + num);
- *
- * stop.uniLink = false; for (RouteStops routeStop : routeStops) { if (routeStop.busRoute.uniLink) {
- * stop.uniLink = true; } } busStopDao.update(stop); }
- */
-
- Log.i(TAG, "Finished loading bus data");
- }
-
- public static void loadSiteData(Context context) throws SQLException, IOException {
- Log.i(TAG, "Begining loading site data");
-
- DatabaseHelper helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
-
- TableUtils.clearTable(helper.getConnectionSource(), Site.class);
-
- Dao<Site, String> siteDao = helper.getSiteDao();
-
- InputStream inputStream = context.getAssets().open("sites.csv");
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
- String strLine = null;
-
- try {
- String def = bufferedReader.readLine();
- // Log.i(TAG, "Reading the site definition " + def);
-
- while ((strLine = bufferedReader.readLine()) != null) {
- // Log.i(TAG, "Site Data: " + strLine);
- String[] dataBits = strLine.split(",");
-
- GeoPoint point = null;
- if (dataBits[2].length() > 1 && dataBits[3].length() > 1) {
- point = Util.csLatLongToGeoPoint(dataBits[2], dataBits[3]);
- } else {
- point = new GeoPoint(0, 0);
+ bufferedReader.close();
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ Log.e(TAG, "Site Line: " + strLine);
+ e.printStackTrace();
}
- Polygon poly = Util.csPolygonToPolygon(strLine.split("\"")[1]);
- // Log.i(TAG, "Polygon: " + poly);
+ Log.i(TAG, "Loaded sites from csv");
+ }
- siteDao.create(new Site(dataBits[0], dataBits[1], point, poly));
- }
+ private static Stop getStop(Context context, JSONObject stopObj, Set<BusRoute> routes, BusStop busStop) throws SQLException,
+ JSONException {
+
+ if (helper == null)
+ helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
+ if (busRouteDao == null)
+ busRouteDao = helper.getBusRouteDao();
+ Dao<RouteStops, Integer> routeStopsDao = null;
+ if (routeStopsDao == null)
+ routeStopsDao = helper.getRouteStopsDao();
+ if (busDao == null)
+ busDao = helper.getBusDao();
+ if (busStopDao == null)
+ busStopDao = helper.getBusStopDao();
+
+ String time = stopObj.getString("time");
+
+ GregorianCalendar calender = new GregorianCalendar();
+ boolean live = true;
+ if (!time.equals("Due")) {
+
+ // Log.v(TAG, "Time: " + time + " current time " +
+ // calender.getTime());
+
+ if (time.contains(":")) {
+ String[] minAndHour = time.split(":");
+ calender.set(Calendar.HOUR_OF_DAY, Integer.parseInt(minAndHour[0]));
+ calender.set(Calendar.MINUTE, Integer.parseInt(minAndHour[1]));
+ live = false;
+ } else {
+ // Log.i(TAG, "Parsing " + time.substring(0, time.length() - 1)
+ // + " for min");
+ calender.add(Calendar.MINUTE, Integer.parseInt(time.substring(0, time.length() - 1)));
+ }
- bufferedReader.close();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- Log.e(TAG, "Site Line: " + strLine);
- e.printStackTrace();
- }
+ // Log.v(TAG, "Date: " + calender.getTime());
+ }
- Log.i(TAG, "Loaded sites from csv");
- }
-
- private static Stop getStop(Context context, JSONObject stopObj, Set<BusRoute> routes, BusStop busStop)
- throws SQLException, JSONException {
-
- if (helper == null)
- helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
- if (busRouteDao == null)
- busRouteDao = helper.getBusRouteDao();
- Dao<RouteStops, Integer> routeStopsDao = null;
- if (routeStopsDao == null)
- routeStopsDao = helper.getRouteStopsDao();
- if (busDao == null)
- busDao = helper.getBusDao();
- if (busStopDao == null)
- busStopDao = helper.getBusStopDao();
-
- String time = stopObj.getString("time");
-
- GregorianCalendar calender = new GregorianCalendar();
- boolean live = true;
- if (!time.equals("Due")) {
-
- // Log.v(TAG, "Time: " + time + " current time " + calender.getTime());
-
- if (time.contains(":")) {
- String[] minAndHour = time.split(":");
- calender.set(Calendar.HOUR_OF_DAY, Integer.parseInt(minAndHour[0]));
- calender.set(Calendar.MINUTE, Integer.parseInt(minAndHour[1]));
- live = false;
- } else {
- // Log.i(TAG, "Parsing " + time.substring(0, time.length() - 1) + " for min");
- calender.add(Calendar.MINUTE, Integer.parseInt(time.substring(0, time.length() - 1)));
- }
-
- // Log.v(TAG, "Date: " + calender.getTime());
- }
+ String name = stopObj.getString("name");
+
+ BusRoute route = null;
+ String dir = "";
+
+ for (BusRoute tempRoute : routes) {
+ if (name.contains("U")) {
+ if (name.equals("U1N")) {
+ if (tempRoute.code.equals(name)) {
+ route = tempRoute;
+ dir = null;
+ }
+ } else if (name.equals("U1E")) {
+ if (tempRoute.code.equals("U1")) {
+ route = tempRoute;
+ dir = "E";
+ }
+ } else {
+ if (tempRoute.code.equals(name.substring(0, 2))) {
+ route = tempRoute;
+ if (route.forwardDirection.equals(name.substring(2))) {
+ dir = route.forwardDirection;
+ } else if (route.reverseDirection.equals(name.substring(2))) {
+ dir = route.reverseDirection;
+ } else {
+ Log.e(TAG, "Error detecting direction for " + name);
+ dir = null;
+ return null;
+ }
+ }
+ }
+ } else {
+ if (tempRoute.code.equals(name)) {
+ route = tempRoute;
+ dir = null;
+ }
+ }
+ }
- String name = stopObj.getString("name");
+ if (route == null) {
+ Log.e(TAG, "Route not found (route == null) " + name);
+ return null;
+ }
- BusRoute route = null;
- String dir = "";
+ if (dir != null && dir.equals("")) {
+ Log.e(TAG, "Error detecting direction for " + name);
+ return null;
+ }
- for (BusRoute tempRoute : routes) {
- if (name.contains("U")) {
- if (name.equals("U1N")) {
- if (tempRoute.code.equals(name)) {
- route = tempRoute;
- dir = null;
- }
+ String destString = stopObj.getString("dest");
+ BusStop destStop = null;
+
+ if (destString.equals("Central Station")) {
+ destStop = busStopDao.queryForId("SN120520");
+ } else if (destString.equals("Civic Centre")) {
+ destStop = busStopDao.queryForId("SN120527");
+ } else if (destString.equals("City DG4")) {
+ destStop = busStopDao.queryForId("HAA13579");
+ } else if (destString.equals("Airport")) {
+ destStop = busStopDao.queryForId("HA030184");
+ } else if (destString.equals("City, Town Quay")) {
+ destStop = busStopDao.queryForId("SNA13766");
+ } else if (destString.equals("City Centre")) {
+ destStop = busStopDao.queryForId("SNA13766");
+ } else if (destString.equals("Dock Gate 4")) {
+ destStop = busStopDao.queryForId("MG1031");
+ } else if (destString.equals("Eastleigh")) {
+ destStop = busStopDao.queryForId("HA030212");
+ } else if (destString.equals("Crematorium")) {
+ destStop = busStopDao.queryForId("SN121009");
+ } else if (destString.equals("General Hosp")) {
+ destStop = busStopDao.queryForId("SNA19482");
+ } else if (destString.equals("Wessex Lane")) {
+ destStop = busStopDao.queryForId("SNA19780");
} else {
- if (tempRoute == null) {
- Log.e(TAG, "tempRoute == null");
- }
- if (tempRoute.code == null) {
- Log.e(TAG, "tempRoute.code == null");
- }
- if (tempRoute.code.equals(name.substring(0, 2))) {
- route = tempRoute;
- if (route.forwardDirection.equals(name.substring(2))) {
- dir = route.forwardDirection;
- } else if (route.reverseDirection.equals(name.substring(2))) {
- dir = route.reverseDirection;
+ Log.e(TAG, "Unknown end dest " + destString + " for route " + route.code);
+ }
+
+ if (destStop != null) {
+
+ QueryBuilder<RouteStops, Integer> routeStopsQueryBuilder = routeStopsDao.queryBuilder();
+ routeStopsQueryBuilder.where().eq(RouteStops.ROUTE_ID_FIELD_NAME, route.id).and()
+ .eq(RouteStops.STOP_ID_FIELD_NAME, destStop.id);
+ PreparedQuery<RouteStops> routeStopsPreparedQuery = routeStopsQueryBuilder.prepare();
+
+ List<RouteStops> routeStops = routeStopsDao.query(routeStopsPreparedQuery);
+ if (routeStops.size() > 0) {
+ Log.i(TAG, "Found " + routeStops.size() + " stops matching the destStop " + destStop + " on route " + route.code);
} else {
- Log.e(TAG, "Error detecting direction for " + name);
- dir = null;
- return null;
+ Log.w(TAG, "Found " + routeStops.size() + " stops matching the destStop " + destStop + " on route " + route.code);
}
- }
- }
- } else {
- if (tempRoute.code.equals(name)) {
- route = tempRoute;
- dir = null;
}
- }
- }
- if (route == null) {
- Log.e(TAG, "Route not found (route == null) " + name);
- return null;
- }
+ Date now = new Date(System.currentTimeMillis());
- if (dir != null && dir.equals("")) {
- Log.e(TAG, "Error detecting direction for " + name);
- return null;
- }
+ String busID = null;
+ Stop stop;
+ Bus bus;
+ if (stopObj.has("vehicle")) {
+ busID = stopObj.getString("vehicle");
- String destString = stopObj.getString("dest");
- BusStop destStop = null;
-
- if (destString.equals("Central Station")) {
- destStop = busStopDao.queryForId("SN120520");
- } else if (destString.equals("Civic Centre")) {
- destStop = busStopDao.queryForId("SN120527");
- } else if (destString.equals("City DG4")) {
- destStop = busStopDao.queryForId("HAA13579");
- } else if (destString.equals("Airport")) {
- destStop = busStopDao.queryForId("HA030184");
- } else if (destString.equals("City, Town Quay")) {
- destStop = busStopDao.queryForId("SNA13766");
- } else if (destString.equals("City Centre")) {
- destStop = busStopDao.queryForId("SNA13766");
- } else if (destString.equals("Dock Gate 4")) {
- destStop = busStopDao.queryForId("MG1031");
- } else if (destString.equals("Eastleigh")) {
- destStop = busStopDao.queryForId("HA030212");
- } else if (destString.equals("Crematorium")) {
- destStop = busStopDao.queryForId("SN121009");
- } else if (destString.equals("General Hosp")) {
- destStop = busStopDao.queryForId("SNA19482");
- } else if (destString.equals("Wessex Lane")) {
- destStop = busStopDao.queryForId("SNA19780");
- } else {
- Log.e(TAG, "Unknown end dest " + destString + " for route " + route.code);
- }
+ QueryBuilder<Bus, Integer> busQueryBuilder = busDao.queryBuilder();
+ busQueryBuilder.where().eq(Bus.ID_FIELD_NAME, busID);
+ PreparedQuery<Bus> busPreparedQuery = busQueryBuilder.prepare();
- if (destStop != null) {
-
- QueryBuilder<RouteStops, Integer> routeStopsQueryBuilder = routeStopsDao.queryBuilder();
- routeStopsQueryBuilder.where().eq(RouteStops.ROUTE_ID_FIELD_NAME, route.id).and()
- .eq(RouteStops.STOP_ID_FIELD_NAME, destStop.id);
- PreparedQuery<RouteStops> routeStopsPreparedQuery = routeStopsQueryBuilder.prepare();
-
- List<RouteStops> routeStops = routeStopsDao.query(routeStopsPreparedQuery);
- if (routeStops.size() > 0) {
- Log.i(TAG, "Found " + routeStops.size() + " stops matching the destStop " + destStop + " on route "
- + route.code);
- } else {
- Log.w(TAG, "Found " + routeStops.size() + " stops matching the destStop " + destStop + " on route "
- + route.code);
- }
- }
+ bus = busDao.queryForFirst(busPreparedQuery);
- Date now = new Date(System.currentTimeMillis());
-
- String busID = null;
- Stop stop;
- Bus bus;
- if (stopObj.has("vehicle")) {
- busID = stopObj.getString("vehicle");
-
- QueryBuilder<Bus, Integer> busQueryBuilder = busDao.queryBuilder();
- busQueryBuilder.where().eq(Bus.ID_FIELD_NAME, busID);
- PreparedQuery<Bus> busPreparedQuery = busQueryBuilder.prepare();
-
- bus = busDao.queryForFirst(busPreparedQuery);
-
- if (bus == null) {
- bus = new Bus(busID, route, dir);
- bus.destination = destStop;
- busDao.create(bus);
- } else {
- bus.destination = destStop;
- bus.route = route;
- bus.direction = dir;
- busDao.update(bus);
- }
-
- } else {
- bus = new Bus(null, route, dir);
- busDao.create(bus);
- }
+ if (bus == null) {
+ bus = new Bus(busID, route, dir);
+ bus.destination = destStop;
+ busDao.create(bus);
+ } else {
+ bus.destination = destStop;
+ bus.route = route;
+ bus.direction = dir;
+ busDao.update(bus);
+ }
- stop = new Stop(bus, busStop, calender.getTime(), now, live);
+ } else {
+ bus = new Bus(null, route, dir);
+ busDao.create(bus);
+ }
- return stop;
- }
+ stop = new Stop(bus, busStop, calender.getTime(), now, live);
- public static Timetable getTimetable(Context context, String busStop, boolean keepUniLink, boolean keepNonUniLink)
- throws SQLException, ClientProtocolException, IOException, JSONException {
+ return stop;
+ }
- if (helper == null)
- helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
- if (busRouteDao == null)
- busRouteDao = helper.getBusRouteDao();
- if (busStopDao == null)
- busStopDao = helper.getBusStopDao();
+ public static Timetable getTimetable(Context context, String busStop, boolean keepUniLink, boolean keepNonUniLink)
+ throws SQLException, ClientProtocolException, IOException, JSONException {
- Timetable timetable = new Timetable();
+ if (helper == null)
+ helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
+ if (busRouteDao == null)
+ busRouteDao = helper.getBusRouteDao();
+ if (busStopDao == null)
+ busStopDao = helper.getBusStopDao();
- String file = getFileFromServer(busStopUrl + busStop + ".json");
+ Timetable timetable = new Timetable();
- JSONObject data = new JSONObject(file);
- JSONArray stopsArray = data.getJSONArray("stops");
- JSONObject routesObject = data.getJSONObject("routes");
+ String file = getFileFromServer(busStopUrl + busStop + ".json");
- HashSet<BusRoute> busRoutes = new HashSet<BusRoute>();
- for (Iterator<String> keyIter = routesObject.keys(); keyIter.hasNext();) {
- String key = keyIter.next();
+ JSONObject data = new JSONObject(file);
+ JSONArray stopsArray = data.getJSONArray("stops");
+ JSONObject routesObject = data.getJSONObject("routes");
- Log.v(TAG, "Route Key: " + key);
+ HashSet<BusRoute> busRoutes = new HashSet<BusRoute>();
+ for (Iterator<String> keyIter = routesObject.keys(); keyIter.hasNext();) {
+ String key = keyIter.next();
- BusRoute route = busRouteDao.queryForId(Integer.parseInt(key.substring(key.length() - 3, key.length())));
+ Log.v(TAG, "Route Key: " + key);
- if (route != null) {
- busRoutes.add(route);
- } else {
- throw new RuntimeException("Route not found " + key.substring(key.length() - 3, key.length()) + " "
- + key);
- }
- }
+ BusRoute route = busRouteDao.queryForId(Integer.parseInt(key.substring(key.length() - 3, key.length())));
- Log.i(TAG, "Number of entries " + data.length());
+ if (route != null) {
+ busRoutes.add(route);
+ } else {
+ throw new RuntimeException("Route not found " + key.substring(key.length() - 3, key.length()) + " " + key);
+ }
+ }
- Log.i(TAG, "Stops: " + data.getJSONArray("stops"));
+ Log.i(TAG, "Number of entries " + data.length());
- for (int stopNum = 0; stopNum < stopsArray.length(); stopNum++) {
- JSONObject stopObj = stopsArray.getJSONObject(stopNum);
+ Log.i(TAG, "Stops: " + data.getJSONArray("stops"));
- if (!keepNonUniLink && !stopObj.getString("name").startsWith("U")) {
- Log.v(TAG, "Skipping non uni-link stop " + stopObj.getString("name"));
- continue;
- }
+ for (int stopNum = 0; stopNum < stopsArray.length(); stopNum++) {
+ JSONObject stopObj = stopsArray.getJSONObject(stopNum);
- if (!keepUniLink && stopObj.getString("name").startsWith("U")) {
- Log.v(TAG, "Skipping uni-link stop " + stopObj.getString("name"));
- continue;
- }
+ if (!keepNonUniLink && !stopObj.getString("name").startsWith("U")) {
+ Log.v(TAG, "Skipping non uni-link stop " + stopObj.getString("name"));
+ continue;
+ }
- BusStop busStopObj = busStopDao.queryForId(busStop);
- if (busStopObj == null) {
- Log.e(TAG, "BusStopObj == null");
- }
+ if (!keepUniLink && stopObj.getString("name").startsWith("U")) {
+ Log.v(TAG, "Skipping uni-link stop " + stopObj.getString("name"));
+ continue;
+ }
- Stop stop = getStop(context, stopObj, busRoutes, busStopObj);
+ BusStop busStopObj = busStopDao.queryForId(busStop);
+ if (busStopObj == null) {
+ Log.e(TAG, "BusStopObj == null");
+ }
- if (stop == null) {
- Log.w(TAG, "Null stop, skiping");
- continue;
- }
+ Stop stop = getStop(context, stopObj, busRoutes, busStopObj);
- Log.v(TAG, "Found stop for a unidentified " + stop.bus.toString() + " at " + stop.busStop.id + " at "
- + stop.arivalTime);
+ if (stop == null) {
+ Log.w(TAG, "Null stop, skiping");
+ continue;
+ }
- timetable.add(stop);
- }
+ Log.v(TAG, "Found stop for a unidentified " + stop.bus.toString() + " at " + stop.busStop.id + " at "
+ + stop.arivalTime);
- timetable.fetchTime = new Date(System.currentTimeMillis());
- return timetable;
- }
+ timetable.add(stop);
+ }
- public static Timetable getTimetable(Context context, Bus bus, BusStop startStop, int num) throws SQLException,
- ClientProtocolException, IOException, JSONException {
+ timetable.fetchTime = new Date(System.currentTimeMillis());
+ return timetable;
+ }
- if (helper == null)
- helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
- if (busRouteDao == null)
- busRouteDao = helper.getBusRouteDao();
- if (busStopDao == null)
- busStopDao = helper.getBusStopDao();
+ public static Timetable getTimetable(Context context, Bus bus, BusStop startStop, int num) throws SQLException,
+ ClientProtocolException, IOException, JSONException {
- Timetable timetable = new Timetable();
+ if (helper == null)
+ helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
+ if (busRouteDao == null)
+ busRouteDao = helper.getBusRouteDao();
+ if (busStopDao == null)
+ busStopDao = helper.getBusStopDao();
- List<BusStop> busStops = new ArrayList<BusStop>(num);
- busStops.add(startStop);
+ Timetable timetable = new Timetable();
- BusRoute route = bus.route;
+ List<BusStop> busStops = new ArrayList<BusStop>(num);
+ busStops.add(startStop);
- for (int i = 0; i < num; i++) {
- BusStop nextStop = route.moveInRoute(context, busStops.get(i), bus.direction, 1);
+ BusRoute route = bus.route;
- if (nextStop != null) {
- busStops.add(nextStop);
- } else {
- Log.e(TAG, "nextStop is null");
- }
- }
+ for (int i = 0; i < num; i++) {
+ BusStop nextStop = route.moveInRoute(context, busStops.get(i), bus.direction, 1);
+
+ if (nextStop != null) {
+ busStops.add(nextStop);
+ } else {
+ Log.e(TAG, "nextStop is null");
+ }
+ }
- for (BusStop busStop : busStops) {
+ for (BusStop busStop : busStops) {
- String file = getFileFromServer(busStopUrl + busStop.id + ".json");
+ String file = getFileFromServer(busStopUrl + busStop.id + ".json");
- JSONObject data = new JSONObject(file);
- JSONArray stopsArray = data.getJSONArray("stops");
+ JSONObject data = new JSONObject(file);
+ JSONArray stopsArray = data.getJSONArray("stops");
- HashSet<BusRoute> busRoutes = new HashSet<BusRoute>();
- busRoutes.add(bus.route);
+ HashSet<BusRoute> busRoutes = new HashSet<BusRoute>();
+ busRoutes.add(bus.route);
- Log.v(TAG, "Number of entries " + data.length());
+ Log.v(TAG, "Number of entries " + data.length());
- Log.v(TAG, "Stops: " + data.getJSONArray("stops"));
+ Log.v(TAG, "Stops: " + data.getJSONArray("stops"));
- for (int stopNum = 0; stopNum < stopsArray.length(); stopNum++) {
- JSONObject stopObj = stopsArray.getJSONObject(stopNum);
+ for (int stopNum = 0; stopNum < stopsArray.length(); stopNum++) {
+ JSONObject stopObj = stopsArray.getJSONObject(stopNum);
- if (stopObj.getString("vehicle").equals(bus.id)) {
+ if (stopObj.getString("vehicle").equals(bus.id)) {
- Stop stop = getStop(context, stopObj, busRoutes, busStop);
+ Stop stop = getStop(context, stopObj, busRoutes, busStop);
- if (stop == null) {
- Log.w(TAG, "Null stop, skiping");
- continue;
- }
+ if (stop == null) {
+ Log.w(TAG, "Null stop, skiping");
+ continue;
+ }
- Log.v(TAG, "Found stop for a unidentified " + stop.bus.toString() + " at " + stop.busStop.id
- + " at " + stop.arivalTime);
+ Log.v(TAG, "Found stop for a unidentified " + stop.bus.toString() + " at " + stop.busStop.id + " at "
+ + stop.arivalTime);
- timetable.add(stop);
+ timetable.add(stop);
+ }
+ }
}
- }
- }
- timetable.fetchTime = new Date(System.currentTimeMillis());
+ timetable.fetchTime = new Date(System.currentTimeMillis());
+
+ return timetable;
+ }
- return timetable;
- }
+ public static Stop getStop(Context context, Bus bus, BusStop busStop) throws SQLException, ClientProtocolException,
+ IOException, JSONException {
- public static Stop getStop(Context context, Bus bus, BusStop busStop) throws SQLException, ClientProtocolException,
- IOException, JSONException {
+ if (helper == null)
+ helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
+ if (busRouteDao == null)
+ busRouteDao = helper.getBusRouteDao();
+ if (busStopDao == null)
+ busStopDao = helper.getBusStopDao();
- if (helper == null)
- helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
- if (busRouteDao == null)
- busRouteDao = helper.getBusRouteDao();
- if (busStopDao == null)
- busStopDao = helper.getBusStopDao();
+ String file = getFileFromServer(busStopUrl + busStop.id + ".json");
- String file = getFileFromServer(busStopUrl + busStop.id + ".json");
+ JSONObject data = new JSONObject(file);
+ JSONArray stopsArray = data.getJSONArray("stops");
- JSONObject data = new JSONObject(file);
- JSONArray stopsArray = data.getJSONArray("stops");
+ HashSet<BusRoute> busRoutes = new HashSet<BusRoute>();
+ busRouteDao.refresh(bus.route);
+ busRoutes.add(bus.route);
- HashSet<BusRoute> busRoutes = new HashSet<BusRoute>();
- busRouteDao.refresh(bus.route);
- busRoutes.add(bus.route);
+ Stop stop = null;
- Stop stop = null;
+ // Log.v(TAG, "Number of entries " + data.length());
- // Log.v(TAG, "Number of entries " + data.length());
+ // Log.v(TAG, "Stops: " + data.getJSONArray("stops"));
- // Log.v(TAG, "Stops: " + data.getJSONArray("stops"));
+ for (int stopNum = 0; stopNum < stopsArray.length(); stopNum++) {
+ JSONObject stopObj = stopsArray.getJSONObject(stopNum);
- for (int stopNum = 0; stopNum < stopsArray.length(); stopNum++) {
- JSONObject stopObj = stopsArray.getJSONObject(stopNum);
+ // Log.v(TAG, "stopObj: " + stopObj);
+ if (stopObj.has("vehicle") && stopObj.getString("vehicle").equals(bus.id)) {
- // Log.v(TAG, "stopObj: " + stopObj);
- if (stopObj.has("vehicle") && stopObj.getString("vehicle").equals(bus.id)) {
+ stop = getStop(context, stopObj, busRoutes, busStop);
+ break;
- stop = getStop(context, stopObj, busRoutes, busStop);
- break;
+ // Log.v(TAG, "Found stop for a unidentified " +
+ // stop.bus.toString() + " at " + stop.busStop.id + " at "
+ // + stop.arivalTime);
+ }
+ }
- // Log.v(TAG, "Found stop for a unidentified " + stop.bus.toString() + " at " + stop.busStop.id + " at "
- // + stop.arivalTime);
- }
+ return stop;
}
- return stop;
- }
+ static PathOverlay getRoutePath(InputStream routeResource, int colour, ResourceProxy resProxy) {
+ PathOverlay data = null;
- static PathOverlay getRoutePath(InputStream routeResource, int colour, ResourceProxy resProxy) {
- PathOverlay data = null;
+ // sax stuff
+ try {
+ SAXParserFactory spf = SAXParserFactory.newInstance();
+ SAXParser sp = spf.newSAXParser();
- // sax stuff
- try {
- SAXParserFactory spf = SAXParserFactory.newInstance();
- SAXParser sp = spf.newSAXParser();
+ XMLReader xr = sp.getXMLReader();
- XMLReader xr = sp.getXMLReader();
+ DataHandler dataHandler = new DataHandler(colour, resProxy);
+ xr.setContentHandler(dataHandler);
- DataHandler dataHandler = new DataHandler(colour, resProxy);
- xr.setContentHandler(dataHandler);
+ xr.parse(new InputSource(routeResource));
- xr.parse(new InputSource(routeResource));
+ data = dataHandler.getData();
- data = dataHandler.getData();
+ } catch (ParserConfigurationException pce) {
+ Log.e("SAX XML", "sax parse error", pce);
+ } catch (SAXException se) {
+ Log.e("SAX XML", "sax error", se);
+ } catch (IOException ioe) {
+ Log.e("SAX XML", "sax parse io error", ioe);
+ }
- } catch (ParserConfigurationException pce) {
- Log.e("SAX XML", "sax parse error", pce);
- } catch (SAXException se) {
- Log.e("SAX XML", "sax error", se);
- } catch (IOException ioe) {
- Log.e("SAX XML", "sax parse io error", ioe);
+ return data;
}
- return data;
- }
-
- public static String getFileFromServer(String request) throws ClientProtocolException, IOException {
- StringBuilder builder = new StringBuilder();
- HttpClient client = new DefaultHttpClient();
- HttpGet httpGet = new HttpGet(request);
- Log.v("Util.getFileFromServer", "Request used: " + request);
-
- HttpResponse response = client.execute(httpGet);
- StatusLine statusLine = response.getStatusLine();
- int statusCode = statusLine.getStatusCode();
- if (statusCode == 200) {
- HttpEntity entity = response.getEntity();
- InputStream content = entity.getContent();
- BufferedReader reader = new BufferedReader(new InputStreamReader(content));
- String line;
- while ((line = reader.readLine()) != null) {
- builder.append(line);
- }
- } else {
- Log.e("", "Failed to download file");
+ public static String getFileFromServer(String request) throws ClientProtocolException, IOException {
+ StringBuilder builder = new StringBuilder();
+ HttpClient client = new DefaultHttpClient();
+ HttpGet httpGet = new HttpGet(request);
+ Log.v("Util.getFileFromServer", "Request used: " + request);
+
+ HttpResponse response = client.execute(httpGet);
+ StatusLine statusLine = response.getStatusLine();
+ int statusCode = statusLine.getStatusCode();
+ if (statusCode == 200) {
+ HttpEntity entity = response.getEntity();
+ InputStream content = entity.getContent();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(content));
+ String line;
+ while ((line = reader.readLine()) != null) {
+ builder.append(line);
+ }
+ } else {
+ Log.e("", "Failed to download file");
+ }
+
+ return builder.toString();
}
- return builder.toString();
- }
-
- public static void routeMovementTest(Context context) throws SQLException {
-
- Dao<RouteStops, Integer> routeStopsDao = null;
-
- if (helper == null)
- helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
- if (routeStopsDao == null)
- routeStopsDao = helper.getRouteStopsDao();
- if (busRouteDao == null)
- busRouteDao = helper.getBusRouteDao();
- if (busStopDao == null)
- busStopDao = helper.getBusStopDao();
-
- for (BusRoute busRoute : busRouteDao) {
- if (!busRoute.code.startsWith("U") || busRoute.code.equals("U9")) {
- continue;
- }
- List<RouteStops> routeStops = routeStopsDao.queryForEq(RouteStops.ROUTE_ID_FIELD_NAME, busRoute.id);
-
- ArrayList<String> directions = new ArrayList<String>();
- if (busRoute.forwardDirection != null) {
- directions.add(busRoute.forwardDirection);
- }
- if (busRoute.reverseDirection != null) {
- directions.add(busRoute.reverseDirection);
- }
- if (directions.size() == 0) {
- directions.add(null);
- }
-
- BusStop startBusStop = null;
-
- for (int moveAmount = 1; moveAmount >= -1; moveAmount = moveAmount - 2) {
- for (String direction : directions) {
- for (int busStop = 0; busStop < routeStops.size() && busStop >= 0; busStop = busStop + moveAmount) {
- // if (routeStops.get(busStop).stop.equals(startBusStop))
- // continue;
- startBusStop = routeStops.get(busStop).busStop;
- busStopDao.refresh(startBusStop);
-
- BusStop predictedNextStop = busRoute.moveInRoute(context, startBusStop, direction, moveAmount);
-
- BusStop nextStop;
- if (busStop == routeStops.size() - 1) {
- nextStop = routeStops.get(0).busStop;
- } else {
- nextStop = routeStops.get(busStop + 1).busStop;
+ public static void routeMovementTest(Context context) throws SQLException {
+
+ Dao<RouteStops, Integer> routeStopsDao = null;
+
+ if (helper == null)
+ helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
+ if (routeStopsDao == null)
+ routeStopsDao = helper.getRouteStopsDao();
+ if (busRouteDao == null)
+ busRouteDao = helper.getBusRouteDao();
+ if (busStopDao == null)
+ busStopDao = helper.getBusStopDao();
+
+ for (BusRoute busRoute : busRouteDao) {
+ if (!busRoute.code.startsWith("U") || busRoute.code.equals("U9")) {
+ continue;
}
- busStopDao.refresh(nextStop);
+ List<RouteStops> routeStops = routeStopsDao.queryForEq(RouteStops.ROUTE_ID_FIELD_NAME, busRoute.id);
- if (!nextStop.equals(predictedNextStop) && !startBusStop.equals(nextStop)) {
- Log.e(TAG, "predicted: " + predictedNextStop + " next: " + nextStop);
- Log.e(TAG, startBusStop.id + " " + nextStop.id);
- return;
+ ArrayList<String> directions = new ArrayList<String>();
+ if (busRoute.forwardDirection != null) {
+ directions.add(busRoute.forwardDirection);
+ }
+ if (busRoute.reverseDirection != null) {
+ directions.add(busRoute.reverseDirection);
+ }
+ if (directions.size() == 0) {
+ directions.add(null);
+ }
+
+ BusStop startBusStop = null;
+
+ for (int moveAmount = 1; moveAmount >= -1; moveAmount = moveAmount - 2) {
+ for (String direction : directions) {
+ for (int busStop = 0; busStop < routeStops.size() && busStop >= 0; busStop = busStop + moveAmount) {
+ // if
+ // (routeStops.get(busStop).stop.equals(startBusStop))
+ // continue;
+ startBusStop = routeStops.get(busStop).busStop;
+ busStopDao.refresh(startBusStop);
+
+ BusStop predictedNextStop = busRoute.moveInRoute(context, startBusStop, direction, moveAmount);
+
+ BusStop nextStop;
+ if (busStop == routeStops.size() - 1) {
+ nextStop = routeStops.get(0).busStop;
+ } else {
+ nextStop = routeStops.get(busStop + 1).busStop;
+ }
+ busStopDao.refresh(nextStop);
+
+ if (!nextStop.equals(predictedNextStop) && !startBusStop.equals(nextStop)) {
+ Log.e(TAG, "predicted: " + predictedNextStop + " next: " + nextStop);
+ Log.e(TAG, startBusStop.id + " " + nextStop.id);
+ return;
+ }
+ }
+ }
}
- }
}
- }
- }
- }
+ }
}
diff --git a/src/net/cbaines/suma/DatabaseHelper.java b/src/net/cbaines/suma/DatabaseHelper.java
index 2d8f9d2..4563d7c 100644
--- a/src/net/cbaines/suma/DatabaseHelper.java
+++ b/src/net/cbaines/suma/DatabaseHelper.java
@@ -40,7 +40,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final String DATABASE_PATH = "/data/data/net.cbaines.suma/databases/";
private static final String DATABASE_NAME = "data.db";
- private static final int DATABASE_VERSION = 39;
+ private static final int DATABASE_VERSION = 40;
private static final String TAG = "DatabaseHelper";
diff --git a/src/net/cbaines/suma/MapActivity.java b/src/net/cbaines/suma/MapActivity.java
index cad7567..07806fa 100644
--- a/src/net/cbaines/suma/MapActivity.java
+++ b/src/net/cbaines/suma/MapActivity.java
@@ -70,1244 +70,1228 @@ import com.j256.ormlite.dao.Dao;
* @author Christopher Baines <cbaines8@gmail.com>
*
*/
-public class MapActivity extends OrmLiteBaseActivity<DatabaseHelper> implements MapViewConstants, Runnable,
- RouteColorConstants, OnItemClickListener, OnItemLongClickListener, OnSharedPreferenceChangeListener,
- Preferences {
-
- /**
- * Enable to use the database in the assets folder, if its not enabled, the database is built from the csv files in
- * the assets folder
- */
- private boolean useBundledDatabase = true;
-
- private MapView mapView;
- private MapController mapController;
- private ResourceProxy mResourceProxy;
+public class MapActivity extends OrmLiteBaseActivity<DatabaseHelper> implements MapViewConstants, Runnable, RouteColorConstants,
+ OnItemClickListener, OnItemLongClickListener, OnSharedPreferenceChangeListener, Preferences {
- private long startTime;
-
- static final int VIEW_DIALOG_ID = 0;
- static final int FAVOURITE_DIALOG_ID = 1;
- private POIDialog favDialog;
-
- private HashMap<String, Overlay> overlays = new HashMap<String, Overlay>();
- private HashMap<String, Overlay> pastOverlays;
-
- // Overlays
-
- // -- Building Overlays
- static final String BUILDING_OVERLAYS = "buildingOverlays:";
-
- // ---- Residential Building Overlay
- private static final String RESIDENTIAL_BUILDING_OVERLAY = "residentialBuildingOverlay";
- private BuildingNumOverlay residentialBuildingOverlay;
- static final boolean RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT = true;
- private static final int RESIDENTIAL_BUILDING_OVERLAY_RANK = 6;
-
- // ---- Non-Residential Building Overlay
- private static final String NON_RESIDENTIAL_BUILDING_OVERLAY = "nonResidentialBuildingOverlay";
- private BuildingNumOverlay nonResidentialBuildingOverlay;
- static final boolean NON_RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT = true;
- private static final int NON_RESIDENTIAL_BUILDING_OVERLAY_RANK = 5;
-
- static final String[] BUILDING_TYPES = { RESIDENTIAL_BUILDING_OVERLAY, NON_RESIDENTIAL_BUILDING_OVERLAY };
-
- // -- Bus Stop Overlays
- static final String BUS_STOP_OVERLAYS = "busStopOverlays:";
-
- // ---- Uni-Link Bus Stop Overlay
- private static final String UNI_LINK_BUS_STOP_OVERLAY = "uniLinkBusStopOverlay";
- private BusStopOverlay uniLinkBusStopOverlay;
- static final boolean UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT = true;
- private static final int UNI_LINK_BUS_STOP_OVERLAY_RANK = 3;
+ /**
+ * Enable to use the database in the assets folder, if its not enabled, the database is built from the csv files in the assets
+ * folder
+ */
+ private boolean useBundledDatabase = true;
- // ---- Non Uni-Link Bus Stop Overlay
- private BusStopOverlay nonUniLinkBusStopOverlay;
- private static final int NON_UNI_LINK_BUS_STOP_OVERLAY_RANK = 4;
+ private MapView mapView;
+ private MapController mapController;
+ private ResourceProxy mResourceProxy;
- // -- Site Overlays
- static final String[] SITE_NAMES = { "Highfield Campus", "Boldrewood Campus", "Avenue Campus",
- "Winchester School of Art", "The University of Southampton Science Park",
- "National Oceanography Centre Campus", "Boat House", "Southampton General Hospital",
- "Royal South Hants Hospital", "Belgrave Industrial Site", "Highfield Hall", "Glen Eyre Hall",
- "South Hill Hall", "Chamberlain Hall", "Hartley Grove", "Bencraft Hall", "Connaught Hall",
- "Montefiore Hall", "Stoneham Hall", "Erasmus Park" };
+ private long startTime;
- private static final String SITE_OVERLAYS = "siteOverlays:";
- private HashMap<Site, PathOverlay> siteOverlays = new HashMap<Site, PathOverlay>(21);
- static final boolean SITE_OVERLAYS_ENABLED_BY_DEFAULT = false;
- private static final int SITE_OVERLAYS_RANK = 8;
+ static final int VIEW_DIALOG_ID = 0;
+ static final int FAVOURITE_DIALOG_ID = 1;
+ private POIDialog favDialog;
- // -- Route Overlays
- private static final String BUS_ROUTE_OVERLAYS = "routeOverlays:";
- private HashMap<BusRoute, PathOverlay> busRouteOverlays = new HashMap<BusRoute, PathOverlay>(5);
- static final boolean BUS_ROUTE_OVERLAYS_ENABLED_BY_DEFAULT = true;
- private static final int BUS_ROUTE_OVERLAYS_RANK = 7;
+ private HashMap<String, Overlay> overlays = new HashMap<String, Overlay>();
+ private HashMap<String, Overlay> pastOverlays;
- // -- Other
- static final String OTHER_OVERLAYS = "otherOverlay:";
+ // Overlays
- // ---- Scale Bar Overlay
- private static final String SCALE_BAR_OVERLAY = "scaleBarOverlay";
- private ScaleBarOverlay scaleBarOverlay;
- static final boolean SCALE_BAR_OVERLAY_ENABLED_BY_DEFAULT = true;
- private static final int SCALE_BAR_OVERLAY_RANK = 1;
+ // -- Building Overlays
+ static final String BUILDING_OVERLAYS = "buildingOverlays:";
- // ---- My Location Overlay
- private static final String MY_LOCATION_OVERLAY = "myLocationOverlay";
- private static final String MY_LOCATION_OVERLAY_COMPASS = "myLocationOverlayCompass";
- private MyLocationOverlay myLocationOverlay;
- static final boolean MY_LOCATION_OVERLAY_ENABLED_BY_DEFAULT = true;
- static final boolean MY_LOCATION_OVERLAY_COMPASS_ENABLED_BY_DEFAULT = true;
- private static final int MY_LOCATION_OVERLAY_RANK = 2;
+ // ---- Residential Building Overlay
+ private static final String RESIDENTIAL_BUILDING_OVERLAY = "residentialBuildingOverlay";
+ private BuildingNumOverlay residentialBuildingOverlay;
+ static final boolean RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT = true;
+ private static final int RESIDENTIAL_BUILDING_OVERLAY_RANK = 6;
- static final String[] OTHER_OVERLAY_NAMES = { SCALE_BAR_OVERLAY, MY_LOCATION_OVERLAY, MY_LOCATION_OVERLAY_COMPASS };
+ // ---- Non-Residential Building Overlay
+ private static final String NON_RESIDENTIAL_BUILDING_OVERLAY = "nonResidentialBuildingOverlay";
+ private BuildingNumOverlay nonResidentialBuildingOverlay;
+ static final boolean NON_RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT = true;
+ private static final int NON_RESIDENTIAL_BUILDING_OVERLAY_RANK = 5;
- // Other bits
+ static final String[] BUILDING_TYPES = { RESIDENTIAL_BUILDING_OVERLAY, NON_RESIDENTIAL_BUILDING_OVERLAY };
- // Uni-Link routes
- static final String[] UNI_LINK_ROUTES = { "U1", "U1N", "U2", "U6", "U9" };
+ // -- Bus Stop Overlays
+ static final String BUS_STOP_OVERLAYS = "busStopOverlays:";
- static final String[] PREFERENCES_GROUPS = { BUS_STOP_OVERLAYS, BUS_ROUTE_OVERLAYS, BUILDING_OVERLAYS,
- SITE_OVERLAYS, OTHER_OVERLAYS };
+ // ---- Uni-Link Bus Stop Overlay
+ private static final String UNI_LINK_BUS_STOP_OVERLAY = "uniLinkBusStopOverlay";
+ private BusStopOverlay uniLinkBusStopOverlay;
+ static final boolean UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT = true;
+ private static final int UNI_LINK_BUS_STOP_OVERLAY_RANK = 3;
- static final String[][] PREFERENCES_CHILDREN = { UNI_LINK_ROUTES, UNI_LINK_ROUTES, BUILDING_TYPES, SITE_NAMES,
- OTHER_OVERLAY_NAMES };
+ // ---- Non Uni-Link Bus Stop Overlay
+ private BusStopOverlay nonUniLinkBusStopOverlay;
+ private static final int NON_UNI_LINK_BUS_STOP_OVERLAY_RANK = 4;
- /**
- * The toast for this activity, storing the toast centrally allows it to be changed quickly, instead of a queue
- * building up
- */
- Toast activityToast;
+ // -- Site Overlays
+ static final String[] SITE_NAMES = { "Highfield Campus", "Boldrewood Campus", "Avenue Campus", "Winchester School of Art",
+ "The University of Southampton Science Park", "National Oceanography Centre Campus", "Boat House",
+ "Southampton General Hospital", "Royal South Hants Hospital", "Belgrave Industrial Site", "Highfield Hall",
+ "Glen Eyre Hall", "South Hill Hall", "Chamberlain Hall", "Hartley Grove", "Bencraft Hall", "Connaught Hall",
+ "Montefiore Hall", "Stoneham Hall", "Erasmus Park" };
- private MapActivity instance;
+ private static final String SITE_OVERLAYS = "siteOverlays:";
+ private HashMap<Site, PathOverlay> siteOverlays = new HashMap<Site, PathOverlay>(21);
+ static final boolean SITE_OVERLAYS_ENABLED_BY_DEFAULT = false;
+ private static final int SITE_OVERLAYS_RANK = 8;
- private static final String TAG = "SUM";
+ // -- Route Overlays
+ private static final String BUS_ROUTE_OVERLAYS = "routeOverlays:";
+ private HashMap<BusRoute, PathOverlay> busRouteOverlays = new HashMap<BusRoute, PathOverlay>(5);
+ static final boolean BUS_ROUTE_OVERLAYS_ENABLED_BY_DEFAULT = true;
+ private static final int BUS_ROUTE_OVERLAYS_RANK = 7;
- @SuppressWarnings("unchecked")
- public void onCreate(Bundle savedInstanceState) {
- startTime = System.currentTimeMillis();
+ // -- Other
+ static final String OTHER_OVERLAYS = "otherOverlay:";
- super.onCreate(savedInstanceState);
+ // ---- Scale Bar Overlay
+ private static final String SCALE_BAR_OVERLAY = "scaleBarOverlay";
+ private ScaleBarOverlay scaleBarOverlay;
+ static final boolean SCALE_BAR_OVERLAY_ENABLED_BY_DEFAULT = true;
+ private static final int SCALE_BAR_OVERLAY_RANK = 1;
- instance = this;
+ // ---- My Location Overlay
+ private static final String MY_LOCATION_OVERLAY = "myLocationOverlay";
+ private static final String MY_LOCATION_OVERLAY_COMPASS = "myLocationOverlayCompass";
+ private MyLocationOverlay myLocationOverlay;
+ static final boolean MY_LOCATION_OVERLAY_ENABLED_BY_DEFAULT = true;
+ static final boolean MY_LOCATION_OVERLAY_COMPASS_ENABLED_BY_DEFAULT = true;
+ private static final int MY_LOCATION_OVERLAY_RANK = 2;
- Thread databaseThread = new Thread(this); // Start the database thread
- databaseThread.start();
+ static final String[] OTHER_OVERLAY_NAMES = { SCALE_BAR_OVERLAY, MY_LOCATION_OVERLAY_COMPASS, MY_LOCATION_OVERLAY };
- setContentView(R.layout.main);
+ // Other bits
- Log.i(TAG, "Finished setting content view " + (System.currentTimeMillis() - startTime));
+ // Uni-Link routes
+ static final String[] UNI_LINK_ROUTES = { "U1", "U1N", "U2", "U6", "U9" };
- mapView = (MapView) this.findViewById(R.id.mapview);
- mapView.setTileSource(TileSourceFactory.MAPQUESTOSM);
- mapView.setBuiltInZoomControls(true);
- mapView.setMultiTouchControls(true);
+ static final String[] PREFERENCES_GROUPS = { BUS_STOP_OVERLAYS, BUS_ROUTE_OVERLAYS, BUILDING_OVERLAYS, SITE_OVERLAYS,
+ OTHER_OVERLAYS };
- pastOverlays = (HashMap<String, Overlay>) getLastNonConfigurationInstance();
+ static final String[][] PREFERENCES_CHILDREN = { UNI_LINK_ROUTES, UNI_LINK_ROUTES, BUILDING_TYPES, SITE_NAMES,
+ OTHER_OVERLAY_NAMES };
- /*
- * SensorManager mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); This code in the
- * following constructor causes problems in some emulators, disable sensors to fix.
+ /**
+ * The toast for this activity, storing the toast centrally allows it to be changed quickly, instead of a queue building up
*/
- Log.i(TAG, "Starting creating myLocationOverlay");
- myLocationOverlay = new MyLocationOverlay(instance, mapView);
- Log.i(TAG, "Finished creating myLocationOverlay");
-
- while (databaseThread.isAlive()) {
- Thread.yield();
- }
-
- new Thread(new Runnable() {
- public void run() {
- Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
- try {
- showOverlays();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }).start();
-
- Log.i(TAG, "Started loading thread " + (System.currentTimeMillis() - startTime));
-
- mapController = mapView.getController();
- mResourceProxy = new DefaultResourceProxyImpl(getApplicationContext());
+ Toast activityToast;
- GeoPoint userLocation = null;
+ private MapActivity instance;
- Bundle extras = getIntent().getExtras();
- if (extras != null && extras.containsKey("poiPoint")) {
- String poiPoint = getIntent().getExtras().getString("poiPoint");
- Log.i(TAG, "poiPoint " + poiPoint);
+ private static final String TAG = "SUM";
- String[] bits = poiPoint.split(",");
+ @SuppressWarnings("unchecked")
+ public void onCreate(Bundle savedInstanceState) {
+ startTime = System.currentTimeMillis();
- userLocation = new GeoPoint(Double.valueOf(bits[0]), Double.valueOf(bits[1]));
- mapController.setZoom(20);
+ super.onCreate(savedInstanceState);
- } else {
- userLocation = myLocationOverlay.getMyLocation();
- if (userLocation == null) {
- userLocation = new GeoPoint(50935551, -1393488); // ECS
- }
- mapController.setZoom(15);
- }
-
- mapController.setCenter(userLocation);
-
- Log.i(TAG, "Finished onCreate " + (System.currentTimeMillis() - startTime));
- }
-
- public void onResume() {
- super.onResume();
- Log.i(TAG, "OnResume");
- if (myLocationOverlay != null) {
- final SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
- final SharedPreferences activityPrefs = getPreferences(0);
-
- if (activityPrefs.getBoolean(OTHER_OVERLAYS + MY_LOCATION_OVERLAY_COMPASS, false)) {
- myLocationOverlay.enableCompass();
- } else {
- myLocationOverlay.disableCompass();
- }
-
- if (activityPrefs.getBoolean(OTHER_OVERLAYS + MY_LOCATION_OVERLAY, false)
- && sharedPrefs.getBoolean(GPS_ENABLED, false)) {
- myLocationOverlay.enableMyLocation();
- } else {
- myLocationOverlay.disableMyLocation();
- }
-
- sharedPrefs.registerOnSharedPreferenceChangeListener(this);
- activityPrefs.registerOnSharedPreferenceChangeListener(this);
- }
- }
-
- public void onPause() {
- super.onResume();
- Log.i(TAG, "OnPause");
- if (myLocationOverlay != null) {
- myLocationOverlay.disableMyLocation();
- myLocationOverlay.disableCompass();
- }
- }
+ instance = this;
- public void finish() {
- super.finish();
- }
+ Thread databaseThread = new Thread(this); // Start the database thread
+ databaseThread.start();
- @Override
- public Object onRetainNonConfigurationInstance() {
- return overlays;
- }
+ setContentView(R.layout.main);
- public void run() {
- Log.i(TAG, "Begining loading database " + (System.currentTimeMillis() - startTime));
+ Log.i(TAG, "Finished setting content view " + (System.currentTimeMillis() - startTime));
- DatabaseHelper helper = getHelper();
- Log.i(TAG, "Got the helper at " + (System.currentTimeMillis() - startTime));
+ mapView = (MapView) this.findViewById(R.id.mapview);
+ mapView.setTileSource(TileSourceFactory.MAPQUESTOSM);
+ mapView.setBuiltInZoomControls(true);
+ mapView.setMultiTouchControls(true);
- boolean dbExist = helper.checkDataBase();
- Log.i(TAG, "Finished checking the database at " + (System.currentTimeMillis() - startTime));
+ pastOverlays = (HashMap<String, Overlay>) getLastNonConfigurationInstance();
- if (dbExist) {
- // do nothing - database already exist
- } else {
+ /*
+ * SensorManager mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); This code in the following
+ * constructor causes problems in some emulators, disable sensors to fix.
+ */
+ Log.i(TAG, "Starting creating myLocationOverlay");
+ myLocationOverlay = new MyLocationOverlay(instance, mapView);
+ myLocationOverlay.setEnabled(true);
+ Log.i(TAG, "Finished creating myLocationOverlay");
- if (useBundledDatabase) {
- try {
- // By calling this method and empty database will be created into the default system path
- // of your application so we are gonna be able to overwrite that database with our database.
- Log.i(TAG, "GetReadableDatabase");
- helper.getWritableDatabase().close();
-
- helper.copyDataBase();
- Log.i(TAG, "Out of copy database");
- } catch (IOException ioe) {
- throw new Error("Unable to create database");
+ while (databaseThread.isAlive()) {
+ Thread.yield();
}
- } else {
- Thread buildingThread = null;
- Thread busStopThread = null;
- Thread siteThread = null;
- Log.i(TAG, "Begining loading databases " + (System.currentTimeMillis() - startTime));
- try {
- Dao<Building, String> buildingDao;
-
- buildingDao = helper.getBuildingDao();
-
- long buildingCount = buildingDao.countOf();
- Log.i(TAG, "Building count " + buildingCount);
- if (buildingCount < 260) {
- buildingThread = new Thread(new Runnable() {
- public void run() {
- try {
- DataManager.loadBuildings(instance);
- Log.i(TAG, "Loaded building database " + (System.currentTimeMillis() - startTime));
- } catch (SQLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- });
-
- buildingThread.start();
- }
-
- Dao<BusStop, String> busStopDao = helper.getBusStopDao();
- Dao<BusRoute, Integer> busRouteDao = helper.getBusRouteDao();
- Dao<RouteStops, Integer> routeStopsDao = helper.getRouteStopsDao();
-
- long busStopCount = busStopDao.countOf();
- long busRouteCount = busRouteDao.countOf();
- long routeStopsCount = routeStopsDao.countOf();
-
- Log.i(TAG, "BusStop count " + busStopCount);
- Log.i(TAG, "BusRoute count " + busRouteCount);
- Log.i(TAG, "RouteStops count " + routeStopsCount);
- if (busStopCount < 217 || busRouteCount < 5 || routeStopsCount < 327) {
- busStopThread = new Thread(new Runnable() {
- public void run() {
+ new Thread(new Runnable() {
+ public void run() {
+ Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
try {
- DataManager.loadBusData(instance, true);
- Log.i(TAG, "Loaded bus stop database " + (System.currentTimeMillis() - startTime));
+ showOverlays();
} catch (SQLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
+ e.printStackTrace();
}
- }
- });
-
- busStopThread.start();
- }
+ }
+ }).start();
- Dao<Site, String> siteDao = helper.getSiteDao();
+ Log.i(TAG, "Started loading thread " + (System.currentTimeMillis() - startTime));
- long siteCount = siteDao.countOf();
- Log.i(TAG, "Sites count " + siteCount);
- if (siteCount < 21) {
- siteThread = new Thread(new Runnable() {
- public void run() {
- try {
- DataManager.loadSiteData(instance);
- Log.i(TAG, "Loaded site database " + (System.currentTimeMillis() - startTime));
- } catch (SQLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- });
+ mapController = mapView.getController();
+ mResourceProxy = new DefaultResourceProxyImpl(getApplicationContext());
- siteThread.start();
- }
+ GeoPoint userLocation = null;
- while (true) {
- if ((buildingThread == null || !buildingThread.isAlive())
- && (busStopThread == null || !busStopThread.isAlive())
- && (siteThread == null || !siteThread.isAlive()))
- break;
+ Bundle extras = getIntent().getExtras();
+ if (extras != null && extras.containsKey("poiPoint")) {
+ String poiPoint = getIntent().getExtras().getString("poiPoint");
+ Log.i(TAG, "poiPoint " + poiPoint);
- Thread.yield();
- }
+ String[] bits = poiPoint.split(",");
- Log.i(TAG, "Finished loading databases " + (System.currentTimeMillis() - startTime));
+ userLocation = new GeoPoint(Double.valueOf(bits[0]), Double.valueOf(bits[1]));
+ mapController.setZoom(20);
- } catch (SQLException e1) {
- e1.printStackTrace();
+ } else {
+ userLocation = myLocationOverlay.getMyLocation();
+ if (userLocation == null) {
+ userLocation = new GeoPoint(50935551, -1393488); // ECS
+ }
+ mapController.setZoom(15);
}
- }
-
- }
-
- Log.i(TAG, "Begining setting up the static values " + (System.currentTimeMillis() - startTime));
- Log.i(TAG, "Finished the database thread " + (System.currentTimeMillis() - startTime));
- }
+ mapController.setCenter(userLocation);
- private void showOverlays() throws SQLException {
- Log.i(TAG, "Began showing overlays at " + (System.currentTimeMillis() - startTime));
-
- if (pastOverlays != null) {
- Log.i(TAG, "Able to recover some/all of the overlays from a previous activity");
- } else {
- Log.i(TAG, "Unable to recover overlays");
+ Log.i(TAG, "Finished onCreate " + (System.currentTimeMillis() - startTime));
}
- final SharedPreferences activityPrefs = getPreferences(0);
+ public void onResume() {
+ super.onResume();
+ Log.i(TAG, "OnResume");
+ if (myLocationOverlay != null) {
+ final SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
+ final SharedPreferences activityPrefs = getPreferences(0);
- showUtilityOverlays();
+ if (activityPrefs.getBoolean(OTHER_OVERLAYS + MY_LOCATION_OVERLAY_COMPASS,
+ MY_LOCATION_OVERLAY_COMPASS_ENABLED_BY_DEFAULT)) {
+ myLocationOverlay.enableCompass();
+ } else {
+ myLocationOverlay.disableCompass();
+ }
- showUniLinkBusStopOverlay();
+ if (activityPrefs.getBoolean(OTHER_OVERLAYS + MY_LOCATION_OVERLAY, MY_LOCATION_OVERLAY_ENABLED_BY_DEFAULT)
+ && sharedPrefs.getBoolean(GPS_ENABLED, GPS_ENABLED_BY_DEFAULT)) {
+ myLocationOverlay.enableMyLocation();
+ } else {
+ myLocationOverlay.disableMyLocation();
+ }
- showNonUniLinkBusStopOverlay();
+ sharedPrefs.registerOnSharedPreferenceChangeListener(this);
+ activityPrefs.registerOnSharedPreferenceChangeListener(this);
+ }
+ }
- if (activityPrefs.getBoolean(BUILDING_OVERLAYS + RESIDENTIAL_BUILDING_OVERLAY,
- RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT)
- || activityPrefs.getBoolean(BUILDING_OVERLAYS + NON_RESIDENTIAL_BUILDING_OVERLAY,
- NON_RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT)) {
- showBuildingOverlays();
+ public void onPause() {
+ super.onResume();
+ Log.i(TAG, "OnPause");
+ if (myLocationOverlay != null) {
+ myLocationOverlay.disableMyLocation();
+ myLocationOverlay.disableCompass();
+ }
}
- Log.i(TAG, "Begining to show the route overlays at " + (System.currentTimeMillis() - startTime));
- for (BusRoute busRoute : getHelper().getBusRouteDao()) {
- if (!busRoute.uniLink) {
- Log.v(TAG, "Bus route " + busRoute.code + "(" + busRoute.id + ") is not unilink");
- continue;
- }
- Log.v(TAG, "Looking at showing " + busRoute.code + " route overlay");
- if (activityPrefs.getBoolean(BUS_ROUTE_OVERLAYS + busRoute.code, BUS_ROUTE_OVERLAYS_ENABLED_BY_DEFAULT)) {
- showRouteOverlay(busRoute);
- }
+ public void finish() {
+ super.finish();
}
- Log.i(TAG, "Finished loading routes " + (System.currentTimeMillis() - startTime));
-
- Log.i(TAG, "Begining to show the site overlays at " + (System.currentTimeMillis() - startTime));
- try {
- for (Site site : getHelper().getSiteDao()) {
- Log.v(TAG, "Looking at showing " + site.name + " site overlay");
- if (activityPrefs.getBoolean(SITE_OVERLAYS + site.name, SITE_OVERLAYS_ENABLED_BY_DEFAULT)) {
- showSiteOverlay(site);
- }
- }
- } catch (SQLException e) {
- e.printStackTrace();
+
+ @Override
+ public Object onRetainNonConfigurationInstance() {
+ return overlays;
}
- Log.i(TAG, "Finished showing the site overlays " + (System.currentTimeMillis() - startTime));
- Log.i(TAG, "Finished showing all the overlays " + (System.currentTimeMillis() - startTime));
- }
+ public void run() {
+ Log.i(TAG, "Begining loading database " + (System.currentTimeMillis() - startTime));
- private void showUtilityOverlays() {
- new Thread(new Runnable() {
- public void run() {
- Log.i(TAG, "Begining showing the utility overlays " + (System.currentTimeMillis() - startTime));
+ DatabaseHelper helper = getHelper();
+ Log.i(TAG, "Got the helper at " + (System.currentTimeMillis() - startTime));
- final SharedPreferences activityPrefs = getPreferences(0);
- final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0));
+ boolean dbExist = helper.checkDataBase();
+ Log.i(TAG, "Finished checking the database at " + (System.currentTimeMillis() - startTime));
- if (scaleBarOverlay != null) {
- Log.v(TAG, "ScaleBarOverlay is already created");
+ if (dbExist) {
+ // do nothing - database already exist
} else {
- if (pastOverlays != null
- && (scaleBarOverlay = (ScaleBarOverlay) pastOverlays.get(SCALE_BAR_OVERLAY)) != null) {
- Log.i(TAG, "Finished restoring utility overlays " + (System.currentTimeMillis() - startTime));
- } else {
- scaleBarOverlay = new ScaleBarOverlay(instance);
- }
- overlays.put(SCALE_BAR_OVERLAY, scaleBarOverlay);
+ if (useBundledDatabase) {
+ try {
+ // By calling this method and empty database will be created
+ // into the default system path
+ // of your application so we are gonna be able to overwrite
+ // that database with our database.
+ Log.i(TAG, "GetReadableDatabase");
+ helper.getWritableDatabase().close();
+
+ helper.copyDataBase();
+ Log.i(TAG, "Out of copy database");
+ } catch (IOException ioe) {
+ throw new Error("Unable to create database");
+ }
+ } else {
+ Thread buildingThread = null;
+ Thread busStopThread = null;
+ Thread siteThread = null;
- synchronized (mapView.getOverlays()) {
- mapView.getOverlays().add(scaleBarOverlay);
- mapView.getOverlays().add(myLocationOverlay);
- Collections.sort(mapView.getOverlays(), comparator);
- }
+ Log.i(TAG, "Begining loading databases " + (System.currentTimeMillis() - startTime));
+ try {
+ Dao<Building, String> buildingDao;
+
+ buildingDao = helper.getBuildingDao();
+
+ long buildingCount = buildingDao.countOf();
+ Log.i(TAG, "Building count " + buildingCount);
+ if (buildingCount < 260) {
+ buildingThread = new Thread(new Runnable() {
+ public void run() {
+ try {
+ DataManager.loadBuildings(instance);
+ Log.i(TAG, "Loaded building database " + (System.currentTimeMillis() - startTime));
+ } catch (SQLException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+
+ buildingThread.start();
+ }
+
+ Dao<BusStop, String> busStopDao = helper.getBusStopDao();
+ Dao<BusRoute, Integer> busRouteDao = helper.getBusRouteDao();
+ Dao<RouteStops, Integer> routeStopsDao = helper.getRouteStopsDao();
+
+ long busStopCount = busStopDao.countOf();
+ long busRouteCount = busRouteDao.countOf();
+ long routeStopsCount = routeStopsDao.countOf();
+
+ Log.i(TAG, "BusStop count " + busStopCount);
+ Log.i(TAG, "BusRoute count " + busRouteCount);
+ Log.i(TAG, "RouteStops count " + routeStopsCount);
+ if (busStopCount < 217 || busRouteCount < 5 || routeStopsCount < 327) {
+ busStopThread = new Thread(new Runnable() {
+ public void run() {
+ try {
+ DataManager.loadBusData(instance, true);
+ Log.i(TAG, "Loaded bus stop database " + (System.currentTimeMillis() - startTime));
+ } catch (SQLException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+
+ busStopThread.start();
+ }
+
+ Dao<Site, String> siteDao = helper.getSiteDao();
+
+ long siteCount = siteDao.countOf();
+ Log.i(TAG, "Sites count " + siteCount);
+ if (siteCount < 21) {
+ siteThread = new Thread(new Runnable() {
+ public void run() {
+ try {
+ DataManager.loadSiteData(instance);
+ Log.i(TAG, "Loaded site database " + (System.currentTimeMillis() - startTime));
+ } catch (SQLException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+
+ siteThread.start();
+ }
+
+ while (true) {
+ if ((buildingThread == null || !buildingThread.isAlive())
+ && (busStopThread == null || !busStopThread.isAlive())
+ && (siteThread == null || !siteThread.isAlive()))
+ break;
+
+ Thread.yield();
+ }
+
+ Log.i(TAG, "Finished loading databases " + (System.currentTimeMillis() - startTime));
+
+ } catch (SQLException e1) {
+ e1.printStackTrace();
+ }
+ }
}
- scaleBarOverlay.setEnabled(activityPrefs.getBoolean(OTHER_OVERLAYS + SCALE_BAR_OVERLAY,
- SCALE_BAR_OVERLAY_ENABLED_BY_DEFAULT));
-
- mapView.postInvalidate();
-
- Log.i(TAG, "Finished showing utility overlays " + (System.currentTimeMillis() - startTime));
- }
- }).start();
- }
+ Log.i(TAG, "Begining setting up the static values " + (System.currentTimeMillis() - startTime));
- private void showRouteOverlay(final BusRoute route) {
- new Thread(new Runnable() {
- public void run() {
- Log.i(TAG, "Begining showing route " + route.code + " overlay at "
- + (System.currentTimeMillis() - startTime));
+ Log.i(TAG, "Finished the database thread " + (System.currentTimeMillis() - startTime));
+ }
- final SharedPreferences activityPrefs = getPreferences(0);
- final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0));
+ private void showOverlays() throws SQLException {
+ Log.i(TAG, "Began showing overlays at " + (System.currentTimeMillis() - startTime));
- PathOverlay routeOverlay;
- if ((routeOverlay = busRouteOverlays.get(route)) != null) {
- Log.v(TAG, route.code + " route overlay already existed");
+ if (pastOverlays != null) {
+ Log.i(TAG, "Able to recover some/all of the overlays from a previous activity");
} else {
- if (pastOverlays != null
- && (routeOverlay = (PathOverlay) pastOverlays.get(BUS_ROUTE_OVERLAYS + route.code)) != null) {
- Log.v(TAG, "Restored " + route.code + " route overlay");
- if (route.code.equals("U1")) {
- PathOverlay routeOverlayU1E = (PathOverlay) pastOverlays.get(BUS_ROUTE_OVERLAYS + "U1E");
- overlays.put(BUS_ROUTE_OVERLAYS + "U1E", routeOverlayU1E);
- }
- } else {
- InputStream resource = null;
- int colour = 0;
- if (route.code.equals("U1")) {
- resource = getResources().openRawResource(R.raw.u1);
- colour = U1;
-
- // TODO Is this a route like U1N or, something else, this hack works somewhat for now?
- PathOverlay routeOverlayU1E = DataManager.getRoutePath(
- getResources().openRawResource(R.raw.u1e), colour, mResourceProxy);
- routeOverlayU1E.getPaint().setAntiAlias(true);
- routeOverlayU1E.getPaint().setAlpha(145);
- routeOverlayU1E.getPaint().setStrokeWidth(12);
- routeOverlayU1E.getPaint().setPathEffect(new DashPathEffect(new float[] { 20, 16 }, 0));
- routeOverlayU1E.setEnabled(activityPrefs.getBoolean("Bus Routes:" + route.code, true));
-
- busRouteOverlays.put(new BusRoute(1000, "U1E", "U1E Route Label", true), routeOverlayU1E);
- overlays.put(BUS_ROUTE_OVERLAYS + route.code + "E", routeOverlayU1E);
- } else if (route.code.equals("U1N")) {
- resource = getResources().openRawResource(R.raw.u1n);
- colour = U1N;
- } else if (route.code.equals("U2")) {
- resource = getResources().openRawResource(R.raw.u2);
- colour = U2;
- } else if (route.code.equals("U6")) {
- resource = getResources().openRawResource(R.raw.u6);
- colour = U6;
- } else if (route.code.equals("U9")) {
- resource = getResources().openRawResource(R.raw.u9);
- colour = U9;
- } else {
- Log.w(TAG, "Wierd route " + route);
- }
-
- routeOverlay = DataManager.getRoutePath(resource, colour, mResourceProxy);
+ Log.i(TAG, "Unable to recover overlays");
+ }
- Log.v(TAG, "Path overlay has " + routeOverlay.getNumberOfPoints() + " points");
+ final SharedPreferences activityPrefs = getPreferences(0);
- routeOverlay.getPaint().setAntiAlias(true);
- routeOverlay.getPaint().setAlpha(145);
- routeOverlay.getPaint().setStrokeWidth(12);
- }
+ showUtilityOverlays();
- busRouteOverlays.put(route, routeOverlay);
- overlays.put(BUS_ROUTE_OVERLAYS + route.code, routeOverlay);
+ showUniLinkBusStopOverlay();
- synchronized (mapView.getOverlays()) {
- mapView.getOverlays().add(routeOverlay);
- Collections.sort(mapView.getOverlays(), comparator);
- }
+ showNonUniLinkBusStopOverlay();
+ if (activityPrefs.getBoolean(BUILDING_OVERLAYS + RESIDENTIAL_BUILDING_OVERLAY,
+ RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT)
+ || activityPrefs.getBoolean(BUILDING_OVERLAYS + NON_RESIDENTIAL_BUILDING_OVERLAY,
+ NON_RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT)) {
+ showBuildingOverlays();
}
- routeOverlay.setEnabled(activityPrefs.getBoolean(BUS_ROUTE_OVERLAYS + route.code,
- BUS_ROUTE_OVERLAYS_ENABLED_BY_DEFAULT));
- if (route.code.equals("U1")) {
- overlays.get(BUS_ROUTE_OVERLAYS + "U1E").setEnabled(
- activityPrefs.getBoolean(BUS_ROUTE_OVERLAYS + "U1", BUS_ROUTE_OVERLAYS_ENABLED_BY_DEFAULT));
+ Log.i(TAG, "Begining to show the route overlays at " + (System.currentTimeMillis() - startTime));
+ for (BusRoute busRoute : getHelper().getBusRouteDao()) {
+ if (!busRoute.uniLink) {
+ Log.v(TAG, "Bus route " + busRoute.code + "(" + busRoute.id + ") is not unilink");
+ continue;
+ }
+ Log.v(TAG, "Looking at showing " + busRoute.code + " route overlay");
+ if (activityPrefs.getBoolean(BUS_ROUTE_OVERLAYS + busRoute.code, BUS_ROUTE_OVERLAYS_ENABLED_BY_DEFAULT)) {
+ showRouteOverlay(busRoute);
+ }
}
+ Log.i(TAG, "Finished loading routes " + (System.currentTimeMillis() - startTime));
- mapView.postInvalidate();
+ Log.i(TAG, "Begining to show the site overlays at " + (System.currentTimeMillis() - startTime));
+ try {
+ for (Site site : getHelper().getSiteDao()) {
+ Log.v(TAG, "Looking at showing " + site.name + " site overlay");
+ if (activityPrefs.getBoolean(SITE_OVERLAYS + site.name, SITE_OVERLAYS_ENABLED_BY_DEFAULT)) {
+ showSiteOverlay(site);
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ Log.i(TAG, "Finished showing the site overlays " + (System.currentTimeMillis() - startTime));
- Log.i(TAG, "Finished showing route " + route.code + " overlay at "
- + (System.currentTimeMillis() - startTime));
- }
- }).start();
- }
+ Log.i(TAG, "Finished showing all the overlays " + (System.currentTimeMillis() - startTime));
+ }
- private void showSiteOverlay(final Site site) {
+ private void showUtilityOverlays() {
+ new Thread(new Runnable() {
+ public void run() {
+ Log.i(TAG, "Begining showing the utility overlays " + (System.currentTimeMillis() - startTime));
- new Thread(new Runnable() {
- public void run() {
- Log.i(TAG, "Begining showing site " + site.name + " overlay at "
- + (System.currentTimeMillis() - startTime));
+ final SharedPreferences activityPrefs = getPreferences(0);
+ final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0));
- final SharedPreferences activityPrefs = getPreferences(0);
- final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0));
+ if (scaleBarOverlay != null) {
+ Log.v(TAG, "ScaleBarOverlay is already created");
+ } else {
+ if (pastOverlays != null && (scaleBarOverlay = (ScaleBarOverlay) pastOverlays.get(SCALE_BAR_OVERLAY)) != null) {
+ Log.i(TAG, "Finished restoring utility overlays " + (System.currentTimeMillis() - startTime));
+ } else {
+ scaleBarOverlay = new ScaleBarOverlay(instance);
+ }
- PathOverlay siteOverlay;
- if ((siteOverlay = siteOverlays.get(site)) != null) {
+ overlays.put(SCALE_BAR_OVERLAY, scaleBarOverlay);
- } else {
- if (pastOverlays != null
- && (siteOverlay = (PathOverlay) pastOverlays.get(SITE_OVERLAYS + site.name)) != null) {
- Log.i(TAG, "Restored " + site.name + " site overlay");
- } else {
-
- siteOverlay = new PathOverlay(Color.BLUE, instance);
- Paint paint = siteOverlay.getPaint();
- paint.setAntiAlias(true);
- paint.setStrokeWidth(1.5f);
- for (int i = 0; i < site.outline.points.length; i++) {
- siteOverlay.addPoint(site.outline.points[i]);
- }
- siteOverlay.addPoint(site.outline.points[0]);
+ synchronized (mapView.getOverlays()) {
+ mapView.getOverlays().add(scaleBarOverlay);
+ mapView.getOverlays().add(myLocationOverlay);
+ Collections.sort(mapView.getOverlays(), comparator);
+ }
- }
+ }
- siteOverlays.put(site, siteOverlay);
- overlays.put(SITE_OVERLAYS + site.name, siteOverlay);
+ scaleBarOverlay.setEnabled(activityPrefs.getBoolean(OTHER_OVERLAYS + SCALE_BAR_OVERLAY,
+ SCALE_BAR_OVERLAY_ENABLED_BY_DEFAULT));
- Log.v(TAG, "Applyed the site overlay, now sorting them");
+ mapView.postInvalidate();
- synchronized (mapView.getOverlays()) {
- mapView.getOverlays().add(siteOverlay);
- Collections.sort(mapView.getOverlays(), comparator);
- }
- }
+ Log.i(TAG, "Finished showing utility overlays " + (System.currentTimeMillis() - startTime));
+ }
+ }).start();
+ }
- siteOverlay.setEnabled(activityPrefs.getBoolean(SITE_OVERLAYS + site.name,
- SITE_OVERLAYS_ENABLED_BY_DEFAULT));
+ private void showRouteOverlay(final BusRoute route) {
+ new Thread(new Runnable() {
+ public void run() {
+ Log.i(TAG, "Begining showing route " + route.code + " overlay at " + (System.currentTimeMillis() - startTime));
- mapView.postInvalidate();
+ final SharedPreferences activityPrefs = getPreferences(0);
+ final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0));
- Log.i(TAG, "Finished showing site " + site.name + " overlay at "
- + (System.currentTimeMillis() - startTime));
- }
- }).start();
- }
+ PathOverlay routeOverlay;
+ if ((routeOverlay = busRouteOverlays.get(route)) != null) {
+ Log.v(TAG, route.code + " route overlay already existed");
+ } else {
+ if (pastOverlays != null
+ && (routeOverlay = (PathOverlay) pastOverlays.get(BUS_ROUTE_OVERLAYS + route.code)) != null) {
+ Log.v(TAG, "Restored " + route.code + " route overlay");
+ if (route.code.equals("U1")) {
+ PathOverlay routeOverlayU1E = (PathOverlay) pastOverlays.get(BUS_ROUTE_OVERLAYS + "U1E");
+ overlays.put(BUS_ROUTE_OVERLAYS + "U1E", routeOverlayU1E);
+ }
+ } else {
+ InputStream resource = null;
+ int colour = 0;
+ if (route.code.equals("U1")) {
+ resource = getResources().openRawResource(R.raw.u1);
+ colour = U1;
+
+ // TODO Is this a route like U1N or, something else,
+ // this hack works somewhat for now?
+ PathOverlay routeOverlayU1E = DataManager.getRoutePath(getResources().openRawResource(R.raw.u1e),
+ colour, mResourceProxy);
+ routeOverlayU1E.getPaint().setAntiAlias(true);
+ routeOverlayU1E.getPaint().setAlpha(145);
+ routeOverlayU1E.getPaint().setStrokeWidth(12);
+ routeOverlayU1E.getPaint().setPathEffect(new DashPathEffect(new float[] { 20, 16 }, 0));
+
+ busRouteOverlays.put(new BusRoute(1000, "U1E", "U1E Route Label", true), routeOverlayU1E);
+ overlays.put(BUS_ROUTE_OVERLAYS + "U1E", routeOverlayU1E);
+ synchronized (mapView.getOverlays()) {
+ mapView.getOverlays().add(routeOverlayU1E);
+ }
+ } else if (route.code.equals("U1N")) {
+ resource = getResources().openRawResource(R.raw.u1n);
+ colour = U1N;
+ } else if (route.code.equals("U2")) {
+ resource = getResources().openRawResource(R.raw.u2);
+ colour = U2;
+ } else if (route.code.equals("U6")) {
+ resource = getResources().openRawResource(R.raw.u6);
+ colour = U6;
+ } else if (route.code.equals("U9")) {
+ resource = getResources().openRawResource(R.raw.u9);
+ colour = U9;
+ } else {
+ Log.w(TAG, "Wierd route " + route);
+ }
+
+ routeOverlay = DataManager.getRoutePath(resource, colour, mResourceProxy);
+
+ Log.v(TAG, "Path overlay has " + routeOverlay.getNumberOfPoints() + " points");
+
+ routeOverlay.getPaint().setAntiAlias(true);
+ routeOverlay.getPaint().setAlpha(145);
+ routeOverlay.getPaint().setStrokeWidth(12);
+ }
+
+ busRouteOverlays.put(route, routeOverlay);
+ overlays.put(BUS_ROUTE_OVERLAYS + route.code, routeOverlay);
+
+ synchronized (mapView.getOverlays()) {
+ mapView.getOverlays().add(routeOverlay);
+ Collections.sort(mapView.getOverlays(), comparator);
+ }
- private void showBuildingOverlays() {
- new Thread(new Runnable() {
- public void run() {
- Log.i(TAG, "Begining showing building overlays at " + (System.currentTimeMillis() - startTime));
+ }
- final SharedPreferences activityPrefs = getPreferences(0);
- final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0));
+ routeOverlay.setEnabled(activityPrefs.getBoolean(BUS_ROUTE_OVERLAYS + route.code,
+ BUS_ROUTE_OVERLAYS_ENABLED_BY_DEFAULT));
+ if (route.code.equals("U1")) {
+ overlays.get(BUS_ROUTE_OVERLAYS + "U1E").setEnabled(
+ activityPrefs.getBoolean(BUS_ROUTE_OVERLAYS + "U1", BUS_ROUTE_OVERLAYS_ENABLED_BY_DEFAULT));
+ }
- if (residentialBuildingOverlay != null) {
+ mapView.postInvalidate();
- } else {
- if (pastOverlays != null
- && (residentialBuildingOverlay = (BuildingNumOverlay) pastOverlays
- .get(RESIDENTIAL_BUILDING_OVERLAY)) != null) {
- nonResidentialBuildingOverlay = (BuildingNumOverlay) pastOverlays
- .get(NON_RESIDENTIAL_BUILDING_OVERLAY);
-
- Log.i(TAG, "Restored building overlays");
- } else {
- try {
+ Log.i(TAG, "Finished showing route " + route.code + " overlay at " + (System.currentTimeMillis() - startTime));
+ }
+ }).start();
+ }
- Log.v(TAG, "Begining the creation of the building overlays");
+ private void showSiteOverlay(final Site site) {
- ArrayList<Building> residentialBuildings = new ArrayList<Building>();
- ArrayList<Building> nonResidentialBuildings = new ArrayList<Building>();
+ new Thread(new Runnable() {
+ public void run() {
+ Log.i(TAG, "Begining showing site " + site.name + " overlay at " + (System.currentTimeMillis() - startTime));
- Dao<Building, String> buildingDao;
+ final SharedPreferences activityPrefs = getPreferences(0);
+ final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0));
- buildingDao = getHelper().getBuildingDao();
+ PathOverlay siteOverlay;
+ if ((siteOverlay = siteOverlays.get(site)) != null) {
- for (Building building : buildingDao) {
- if (building.residential == true) {
- if (building.favourite) {
- residentialBuildings.add(building);
- } else {
- residentialBuildings.add(0, building);
- }
} else {
- if (building.favourite) {
- nonResidentialBuildings.add(building);
- } else {
- nonResidentialBuildings.add(0, building);
- }
+ if (pastOverlays != null && (siteOverlay = (PathOverlay) pastOverlays.get(SITE_OVERLAYS + site.name)) != null) {
+ Log.i(TAG, "Restored " + site.name + " site overlay");
+ } else {
+
+ siteOverlay = new PathOverlay(Color.BLUE, instance);
+ Paint paint = siteOverlay.getPaint();
+ paint.setAntiAlias(true);
+ paint.setStrokeWidth(1.5f);
+ for (int i = 0; i < site.outline.points.length; i++) {
+ siteOverlay.addPoint(site.outline.points[i]);
+ }
+ siteOverlay.addPoint(site.outline.points[0]);
+
+ }
+
+ siteOverlays.put(site, siteOverlay);
+ overlays.put(SITE_OVERLAYS + site.name, siteOverlay);
+
+ Log.v(TAG, "Applyed the site overlay, now sorting them");
+
+ synchronized (mapView.getOverlays()) {
+ mapView.getOverlays().add(siteOverlay);
+ Collections.sort(mapView.getOverlays(), comparator);
+ }
}
- }
- residentialBuildingOverlay = new BuildingNumOverlay(instance, residentialBuildings);
- nonResidentialBuildingOverlay = new BuildingNumOverlay(instance, nonResidentialBuildings);
+ siteOverlay.setEnabled(activityPrefs.getBoolean(SITE_OVERLAYS + site.name, SITE_OVERLAYS_ENABLED_BY_DEFAULT));
- Log.v(TAG, "Applyed the site overlay, now sorting them");
+ mapView.postInvalidate();
- } catch (SQLException e) {
- e.printStackTrace();
+ Log.i(TAG, "Finished showing site " + site.name + " overlay at " + (System.currentTimeMillis() - startTime));
}
- }
+ }).start();
+ }
- overlays.put(RESIDENTIAL_BUILDING_OVERLAY, residentialBuildingOverlay);
- overlays.put(NON_RESIDENTIAL_BUILDING_OVERLAY, nonResidentialBuildingOverlay);
+ private void showBuildingOverlays() {
+ new Thread(new Runnable() {
+ public void run() {
+ Log.i(TAG, "Begining showing building overlays at " + (System.currentTimeMillis() - startTime));
- synchronized (mapView.getOverlays()) {
- mapView.getOverlays().add(residentialBuildingOverlay);
- mapView.getOverlays().add(nonResidentialBuildingOverlay);
- Collections.sort(mapView.getOverlays(), comparator);
- }
- }
+ final SharedPreferences activityPrefs = getPreferences(0);
+ final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0));
- residentialBuildingOverlay.setEnabled(activityPrefs.getBoolean(BUILDING_OVERLAYS
- + RESIDENTIAL_BUILDING_OVERLAY, RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT));
- nonResidentialBuildingOverlay.setEnabled(activityPrefs.getBoolean(BUILDING_OVERLAYS
- + NON_RESIDENTIAL_BUILDING_OVERLAY, NON_RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT));
+ if (residentialBuildingOverlay != null) {
- mapView.postInvalidate();
+ } else {
+ if (pastOverlays != null
+ && (residentialBuildingOverlay = (BuildingNumOverlay) pastOverlays.get(RESIDENTIAL_BUILDING_OVERLAY)) != null) {
+ nonResidentialBuildingOverlay = (BuildingNumOverlay) pastOverlays.get(NON_RESIDENTIAL_BUILDING_OVERLAY);
+
+ Log.i(TAG, "Restored building overlays");
+ } else {
+ try {
+
+ Log.v(TAG, "Begining the creation of the building overlays");
+
+ ArrayList<Building> residentialBuildings = new ArrayList<Building>();
+ ArrayList<Building> nonResidentialBuildings = new ArrayList<Building>();
+
+ Dao<Building, String> buildingDao;
+
+ buildingDao = getHelper().getBuildingDao();
+
+ final SharedPreferences favouritesPrefs = getSharedPreferences(FAVOURITES_PREFERENCES, MODE_PRIVATE);
+
+ for (Building building : buildingDao) {
+ if (building.residential == true) {
+ if (favouritesPrefs.getBoolean(building.id, false)) {
+ residentialBuildings.add(building);
+ } else {
+ residentialBuildings.add(0, building);
+ }
+ } else {
+ if (favouritesPrefs.getBoolean(building.id, false)) {
+ nonResidentialBuildings.add(building);
+ } else {
+ nonResidentialBuildings.add(0, building);
+ }
+ }
+ }
+
+ residentialBuildingOverlay = new BuildingNumOverlay(instance, residentialBuildings);
+ nonResidentialBuildingOverlay = new BuildingNumOverlay(instance, nonResidentialBuildings);
+
+ Log.v(TAG, "Applyed the site overlay, now sorting them");
+
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ overlays.put(RESIDENTIAL_BUILDING_OVERLAY, residentialBuildingOverlay);
+ overlays.put(NON_RESIDENTIAL_BUILDING_OVERLAY, nonResidentialBuildingOverlay);
+
+ synchronized (mapView.getOverlays()) {
+ mapView.getOverlays().add(residentialBuildingOverlay);
+ mapView.getOverlays().add(nonResidentialBuildingOverlay);
+ Collections.sort(mapView.getOverlays(), comparator);
+ }
+ }
- Log.i(TAG, "Finished showing building overlays at " + (System.currentTimeMillis() - startTime));
- }
- }).start();
- }
+ residentialBuildingOverlay.setEnabled(activityPrefs.getBoolean(BUILDING_OVERLAYS + RESIDENTIAL_BUILDING_OVERLAY,
+ RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT));
+ nonResidentialBuildingOverlay.setEnabled(activityPrefs.getBoolean(BUILDING_OVERLAYS
+ + NON_RESIDENTIAL_BUILDING_OVERLAY, NON_RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT));
- private void showUniLinkBusStopOverlay() {
- new Thread(new Runnable() {
- public void run() {
- Log.i(TAG, "Begining showing bus stop overlays at " + (System.currentTimeMillis() - startTime));
+ mapView.postInvalidate();
- final SharedPreferences activityPrefs = getPreferences(0);
- final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0));
-
- if (uniLinkBusStopOverlay != null) {
- if (!activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U1",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
- && !activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U1N",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
- && !activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U2",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
- && !activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U6",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
- && !activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U9",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)) {
- Log.i(TAG, "Uni-Link bus stop overlay not needed");
- overlays.remove(UNI_LINK_BUS_STOP_OVERLAY);
-
- synchronized (mapView.getOverlays()) {
- mapView.getOverlays().remove(uniLinkBusStopOverlay);
- Collections.sort(mapView.getOverlays(), comparator);
+ Log.i(TAG, "Finished showing building overlays at " + (System.currentTimeMillis() - startTime));
}
+ }).start();
+ }
- uniLinkBusStopOverlay = null;
- } else {
- uniLinkBusStopOverlay.setRoutes(0, activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U1",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
- uniLinkBusStopOverlay.setRoutes(1, activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U1N",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
- uniLinkBusStopOverlay.setRoutes(2, activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U2",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
- uniLinkBusStopOverlay.setRoutes(3, activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U6",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
- uniLinkBusStopOverlay.setRoutes(4, activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U9",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
- }
- } else {
- if (activityPrefs
- .getBoolean(BUS_STOP_OVERLAYS + "U1", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
- || activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U1N",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
- || activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U2",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
- || activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U6",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
- || activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U9",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)) {
- if (pastOverlays != null
- && (uniLinkBusStopOverlay = (BusStopOverlay) pastOverlays
- .get(UNI_LINK_BUS_STOP_OVERLAY)) != null) {
- Log.i(TAG, "Restored Uni-Link bus stop overlay");
- } else {
-
- try {
- List<BusStop> busStops;
- Log.v(TAG, "Begin fetching BusStops at " + (System.currentTimeMillis() - startTime));
-
- busStops = getHelper().getBusStopDao().queryForEq(BusStop.UNI_LINK_FIELD_NAME, true);
+ private void showUniLinkBusStopOverlay() {
+ new Thread(new Runnable() {
+ public void run() {
+ Log.i(TAG, "Begining showing bus stop overlays at " + (System.currentTimeMillis() - startTime));
+
+ final SharedPreferences activityPrefs = getPreferences(0);
+ final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0));
+
+ if (uniLinkBusStopOverlay != null) {
+ if (!activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U1", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
+ && !activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U1N", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
+ && !activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U2", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
+ && !activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U6", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
+ && !activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U9", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)) {
+ Log.i(TAG, "Uni-Link bus stop overlay not needed");
+ overlays.remove(UNI_LINK_BUS_STOP_OVERLAY);
+
+ synchronized (mapView.getOverlays()) {
+ mapView.getOverlays().remove(uniLinkBusStopOverlay);
+ Collections.sort(mapView.getOverlays(), comparator);
+ }
+
+ uniLinkBusStopOverlay = null;
+ } else {
+ uniLinkBusStopOverlay.setRoutes(0,
+ activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U1", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
+ uniLinkBusStopOverlay.setRoutes(1,
+ activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U1N", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
+ uniLinkBusStopOverlay.setRoutes(2,
+ activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U2", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
+ uniLinkBusStopOverlay.setRoutes(3,
+ activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U6", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
+ uniLinkBusStopOverlay.setRoutes(4,
+ activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U9", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
+ }
+ } else {
+ if (activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U1", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
+ || activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U1N", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
+ || activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U2", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
+ || activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U6", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)
+ || activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U9", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)) {
+ if (pastOverlays != null
+ && (uniLinkBusStopOverlay = (BusStopOverlay) pastOverlays.get(UNI_LINK_BUS_STOP_OVERLAY)) != null) {
+ Log.i(TAG, "Restored Uni-Link bus stop overlay");
+ } else {
+
+ try {
+ List<BusStop> busStops;
+ Log.v(TAG, "Begin fetching BusStops at " + (System.currentTimeMillis() - startTime));
+
+ busStops = getHelper().getBusStopDao().queryForEq(BusStop.UNI_LINK_FIELD_NAME, true);
+
+ Log.v(TAG, "Finished fetching BusStops at " + (System.currentTimeMillis() - startTime));
+
+ uniLinkBusStopOverlay = new BusStopOverlay(instance, busStops);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ uniLinkBusStopOverlay.setRoutes(0,
+ activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U1", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
+ uniLinkBusStopOverlay.setRoutes(1,
+ activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U1N", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
+ uniLinkBusStopOverlay.setRoutes(2,
+ activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U2", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
+ uniLinkBusStopOverlay.setRoutes(3,
+ activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U6", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
+ uniLinkBusStopOverlay.setRoutes(4,
+ activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U9", UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
+
+ overlays.put(UNI_LINK_BUS_STOP_OVERLAY, uniLinkBusStopOverlay);
+
+ Log.v(TAG, "Applyed the site overlay, now sorting them");
+
+ synchronized (mapView.getOverlays()) {
+ mapView.getOverlays().add(uniLinkBusStopOverlay);
+ Collections.sort(mapView.getOverlays(), comparator);
+ }
+ }
+ }
- Log.v(TAG, "Finished fetching BusStops at " + (System.currentTimeMillis() - startTime));
+ mapView.postInvalidate();
- uniLinkBusStopOverlay = new BusStopOverlay(instance, busStops);
- } catch (SQLException e) {
- e.printStackTrace();
- }
+ Log.i(TAG, "Finished showing bus stop overlays at " + (System.currentTimeMillis() - startTime));
}
+ }).start();
+ }
- uniLinkBusStopOverlay.setRoutes(0, activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U1",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
- uniLinkBusStopOverlay.setRoutes(1, activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U1N",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
- uniLinkBusStopOverlay.setRoutes(2, activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U2",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
- uniLinkBusStopOverlay.setRoutes(3, activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U6",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
- uniLinkBusStopOverlay.setRoutes(4, activityPrefs.getBoolean(BUS_STOP_OVERLAYS + "U9",
- UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
-
- overlays.put(UNI_LINK_BUS_STOP_OVERLAY, uniLinkBusStopOverlay);
+ private void showNonUniLinkBusStopOverlay() {
+ new Thread(new Runnable() {
+ public void run() {
+ Log.i(TAG, "Begining showing non uni link bus stop overlays at " + (System.currentTimeMillis() - startTime));
+
+ // final SharedPreferences activityPrefs = getPreferences(0);
+ final SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(instance);
+ final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0));
+
+ if (nonUniLinkBusStopOverlay != null) {
+ nonUniLinkBusStopOverlay.setEnabled(sharedPrefs.getBoolean(NON_UNI_LINK_BUS_STOPS_OVERLAY,
+ NON_UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
+
+ Log.i(TAG,
+ "nonUniLinkBusStopOverlay enabled ? "
+ + sharedPrefs.getBoolean(NON_UNI_LINK_BUS_STOPS_OVERLAY,
+ NON_UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
+ } else if (sharedPrefs.getBoolean(NON_UNI_LINK_BUS_STOPS_OVERLAY,
+ NON_UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)) {
+ if (pastOverlays != null
+ && (nonUniLinkBusStopOverlay = (BusStopOverlay) pastOverlays.get(NON_UNI_LINK_BUS_STOPS_OVERLAY)) != null) {
+ Log.i(TAG, "Restored non Uni-Link bus stop overlays");
+ } else {
+ try {
+ List<BusStop> busStops;
+ Log.v(TAG, "Begin fetching non Uni-Link BusStops at " + (System.currentTimeMillis() - startTime));
+
+ busStops = getHelper().getBusStopDao().queryForEq(BusStop.UNI_LINK_FIELD_NAME, false);
+
+ Log.v(TAG,
+ "Finished fetching " + busStops.size() + " non Uni-Link BusStops at "
+ + (System.currentTimeMillis() - startTime));
+
+ nonUniLinkBusStopOverlay = new BusStopOverlay(instance, busStops);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ overlays.put(NON_UNI_LINK_BUS_STOPS_OVERLAY, nonUniLinkBusStopOverlay);
+
+ Log.v(TAG, "Applyed the site overlay, now sorting them");
+
+ synchronized (mapView.getOverlays()) {
+ mapView.getOverlays().add(nonUniLinkBusStopOverlay);
+ Collections.sort(mapView.getOverlays(), comparator);
+ }
+ }
- Log.v(TAG, "Applyed the site overlay, now sorting them");
+ if (nonUniLinkBusStopOverlay != null) {
- synchronized (mapView.getOverlays()) {
- mapView.getOverlays().add(uniLinkBusStopOverlay);
- Collections.sort(mapView.getOverlays(), comparator);
- }
- }
- }
+ }
- mapView.postInvalidate();
-
- Log.i(TAG, "Finished showing bus stop overlays at " + (System.currentTimeMillis() - startTime));
- }
- }).start();
- }
-
- private void showNonUniLinkBusStopOverlay() {
- new Thread(new Runnable() {
- public void run() {
- Log.i(TAG, "Begining showing non uni link bus stop overlays at "
- + (System.currentTimeMillis() - startTime));
-
- // final SharedPreferences activityPrefs = getPreferences(0);
- final SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(instance);
- final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0));
-
- if (nonUniLinkBusStopOverlay != null) {
- nonUniLinkBusStopOverlay.setEnabled(sharedPrefs.getBoolean(NON_UNI_LINK_BUS_STOPS_OVERLAY,
- NON_UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
-
- Log.i(TAG,
- "nonUniLinkBusStopOverlay enabled ? "
- + sharedPrefs.getBoolean(NON_UNI_LINK_BUS_STOPS_OVERLAY,
- NON_UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
- } else if (sharedPrefs.getBoolean(NON_UNI_LINK_BUS_STOPS_OVERLAY,
- NON_UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT)) {
- if (pastOverlays != null
- && (nonUniLinkBusStopOverlay = (BusStopOverlay) pastOverlays
- .get(NON_UNI_LINK_BUS_STOPS_OVERLAY)) != null) {
- Log.i(TAG, "Restored non Uni-Link bus stop overlays");
- } else {
- try {
- List<BusStop> busStops;
- Log.v(TAG, "Begin fetching non Uni-Link BusStops at "
- + (System.currentTimeMillis() - startTime));
+ mapView.postInvalidate();
- busStops = getHelper().getBusStopDao().queryForEq(BusStop.UNI_LINK_FIELD_NAME, false);
+ Log.i(TAG, "Finished showing non Uni-Link bus stop overlays at " + (System.currentTimeMillis() - startTime));
+ }
+ }).start();
+ }
- Log.v(TAG,
- "Finished fetching " + busStops.size() + " non Uni-Link BusStops at "
- + (System.currentTimeMillis() - startTime));
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.map_menu, menu);
+ return true;
+ }
- nonUniLinkBusStopOverlay = new BusStopOverlay(instance, busStops);
- } catch (SQLException e) {
- e.printStackTrace();
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ // Handle item selection
+ switch (item.getItemId()) {
+ case R.id.menu_find:
+ Intent i = new Intent(MapActivity.this, FindActivity.class);
+ startActivityForResult(i, 0);
+ return true;
+ case R.id.menu_preferences:
+ Intent settingsActivity = new Intent(getBaseContext(), PreferencesActivity.class);
+ startActivity(settingsActivity);
+ return true;
+ case R.id.menu_find_my_location:
+ final SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
+ if (sharedPrefs.getBoolean(GPS_ENABLED, GPS_ENABLED_BY_DEFAULT)) {
+ myLocationOverlay.enableMyLocation();
+ GeoPoint userLocation = myLocationOverlay.getMyLocation();
+ sharedPrefs.edit().putBoolean(MY_LOCATION_OVERLAY, true).commit();
+ if (userLocation != null) {
+ Log.i(TAG, "Found user location, scrolling to " + userLocation);
+ mapController.animateTo(userLocation);
+ myLocationOverlay.enableFollowLocation();
+ }
+ } else {
+ DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ switch (which) {
+ case DialogInterface.BUTTON_POSITIVE:
+ Editor editor = sharedPrefs.edit();
+ editor.putBoolean(GPS_ENABLED, true);
+ editor.commit();
+
+ myLocationOverlay.enableMyLocation();
+ GeoPoint userLocation = myLocationOverlay.getMyLocation();
+ sharedPrefs.edit().putBoolean(MY_LOCATION_OVERLAY, true).commit();
+ if (userLocation != null) {
+ Log.i(TAG, "Found user location, scrolling to " + userLocation);
+ mapController.animateTo(userLocation);
+ myLocationOverlay.enableFollowLocation();
+ }
+ break;
+
+ case DialogInterface.BUTTON_NEGATIVE:
+ // No button clicked
+ break;
+ }
+ }
+ };
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setMessage("GPS is not enabled, do you wish to enable it?").setPositiveButton("Yes", dialogClickListener)
+ .setNegativeButton("No", dialogClickListener).show();
}
- }
- overlays.put(NON_UNI_LINK_BUS_STOPS_OVERLAY, nonUniLinkBusStopOverlay);
+ return true;
+ case R.id.menu_view:
+ Log.i(TAG, "Showing view dialog");
+ showDialog(VIEW_DIALOG_ID);
+ return false;
+ case R.id.menu_favourites:
+ Log.i(TAG, "Showing favourite dialog");
+
+ showDialog(FAVOURITE_DIALOG_ID);
+ if (favDialog == null) {
+ Log.e(TAG, "Very wierd, just tried to launch the favourite's dialog, but its null?");
+ return false;
+ }
- Log.v(TAG, "Applyed the site overlay, now sorting them");
+ refreshFavouriteDialog();
- synchronized (mapView.getOverlays()) {
- mapView.getOverlays().add(nonUniLinkBusStopOverlay);
- Collections.sort(mapView.getOverlays(), comparator);
- }
+ return false;
+ case R.id.menu_about:
+ Intent aboutIntent = new Intent(MapActivity.this, AboutActivity.class);
+ startActivityForResult(aboutIntent, 0);
+ return true;
+ default:
+ Log.e(TAG, "No known menu option selected");
+ return super.onOptionsItemSelected(item);
}
+ }
- if (nonUniLinkBusStopOverlay != null) {
+ private void refreshFavouriteDialog() {
+ ArrayList<POI> newFavouriteItems = new ArrayList<POI>();
+ try {
+ Dao<Building, String> buildingDao = getHelper().getBuildingDao();
+ Dao<BusStop, String> busStopDao = getHelper().getBusStopDao();
+
+ final SharedPreferences favouritesPrefs = getSharedPreferences(FAVOURITES_PREFERENCES, MODE_PRIVATE);
+ for (String id : favouritesPrefs.getAll().keySet()) {
+ Building building;
+ BusStop busStop;
+ if ((building = buildingDao.queryForId(id)) != null) {
+ newFavouriteItems.add(building);
+ } else if ((busStop = busStopDao.queryForId(id)) != null) {
+ newFavouriteItems.add(busStop);
+ } else {
+ Log.e(TAG, "Item in favourites " + id + " cannot be found");
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
}
- mapView.postInvalidate();
-
- Log.i(TAG, "Finished showing non Uni-Link bus stop overlays at "
- + (System.currentTimeMillis() - startTime));
- }
- }).start();
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.map_menu, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // Handle item selection
- switch (item.getItemId()) {
- case R.id.menu_find:
- Intent i = new Intent(MapActivity.this, FindActivity.class);
- startActivityForResult(i, 0);
- return true;
- case R.id.menu_preferences:
- Intent settingsActivity = new Intent(getBaseContext(), PreferencesActivity.class);
- startActivity(settingsActivity);
- return true;
- case R.id.menu_find_my_location:
- final SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
- if (sharedPrefs.getBoolean("GPSEnabled", false)) {
- GeoPoint userLocation = myLocationOverlay.getMyLocation();
- if (userLocation != null) {
- Log.i(TAG, "Found user location, scrolling to " + userLocation);
- mapController.animateTo(userLocation);
- myLocationOverlay.enableFollowLocation();
+ Log.i(TAG, "There are " + newFavouriteItems.size() + " favourites");
+ if (newFavouriteItems.size() == 0) {
+ Log.i(TAG, "Favourite dialog has no favourites, displaying message");
+ favDialog.setMessage(getResources().getString(R.string.favourites_dialog_message));
+ favDialog.setItems(null);
+ } else {
+ favDialog.setMessage("");
+ favDialog.setItems(newFavouriteItems);
}
- } else {
- DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- switch (which) {
- case DialogInterface.BUTTON_POSITIVE:
- Editor editor = sharedPrefs.edit();
- editor.putBoolean("GPSEnabled", true);
- editor.commit();
- break;
-
- case DialogInterface.BUTTON_NEGATIVE:
- // No button clicked
- break;
- }
- }
- };
-
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setMessage("GPS is not enabled, do you wish to enable it?")
- .setPositiveButton("Yes", dialogClickListener).setNegativeButton("No", dialogClickListener)
- .show();
- }
-
- return true;
- case R.id.menu_view:
- Log.i(TAG, "Showing view dialog");
- showDialog(VIEW_DIALOG_ID);
- return false;
- case R.id.menu_favourites:
- Log.i(TAG, "Showing favourite dialog");
-
- showDialog(FAVOURITE_DIALOG_ID);
- if (favDialog == null) {
- Log.e(TAG, "Very wierd, just tried to launch the favourite's dialog, but its null?");
- return false;
- }
-
- refreshFavouriteDialog();
-
- return false;
- case R.id.menu_about:
- Intent aboutIntent = new Intent(MapActivity.this, AboutActivity.class);
- startActivityForResult(aboutIntent, 0);
- return true;
- default:
- Log.e(TAG, "No known menu option selected");
- return super.onOptionsItemSelected(item);
}
- }
-
- private void refreshFavouriteDialog() {
- ArrayList<POI> newFavouriteItems = new ArrayList<POI>();
-
- try {
- Dao<Building, String> buildingDao = getHelper().getBuildingDao();
- Dao<BusStop, String> busStopDao = getHelper().getBusStopDao();
- newFavouriteItems.addAll(buildingDao.queryForEq(POI.FAVOURITE_FIELD_NAME, true));
- newFavouriteItems.addAll(busStopDao.queryForEq(POI.FAVOURITE_FIELD_NAME, true));
- } catch (SQLException e) {
- e.printStackTrace();
+ @Override
+ public boolean onSearchRequested() {
+ Intent i = new Intent(MapActivity.this, FindActivity.class);
+ startActivityForResult(i, 0);
+ return false;
}
- Log.i(TAG, "There are " + newFavouriteItems.size() + " favourites");
- if (newFavouriteItems.size() == 0) {
- Log.i(TAG, "Favourite dialog has no favourites, displaying message");
- favDialog.setMessage(getResources().getString(R.string.favourites_dialog_message));
- favDialog.setItems(null);
- } else {
- favDialog.setMessage("");
- favDialog.setItems(newFavouriteItems);
- }
- }
-
- @Override
- public boolean onSearchRequested() {
- Intent i = new Intent(MapActivity.this, FindActivity.class);
- startActivityForResult(i, 0);
- return false;
- }
-
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- Log.i(TAG, "Got activity result");
- if (resultCode == RESULT_OK) {
-
- POI poi = null;
- Bundle bundle = data.getExtras();
- if (bundle == null) {
- Log.i(TAG, "Bundle is null");
- } else {
- String poiId = (String) bundle.get("poi");
- if (poiId != null) {
- Log.i(TAG, "Got id " + poiId);
- try {
- poi = getHelper().getBuildingDao().queryForId(poiId);
- if (poi == null) {
- poi = getHelper().getBusStopDao().queryForId(poiId);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
-
- if (poi == null) {
- Log.e(TAG, "Could not find poi " + poiId + " in onActivityResult");
- } else {
- if (myLocationOverlay != null) {
- // It could be null if it has not been enabled
- myLocationOverlay.disableFollowLocation();
- }
- mapController.setZoom(20);
- mapController.setCenter(poi.point);
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ Log.i(TAG, "Got activity result");
+ if (resultCode == RESULT_OK) {
- }
- } else {
- Log.i(TAG, "Got null poi id");
+ POI poi = null;
+ Bundle bundle = data.getExtras();
+ if (bundle == null) {
+ Log.i(TAG, "Bundle is null");
+ } else {
+ String poiId = (String) bundle.get("poi");
+ if (poiId != null) {
+ Log.i(TAG, "Got id " + poiId);
+ try {
+ poi = getHelper().getBuildingDao().queryForId(poiId);
+ if (poi == null) {
+ poi = getHelper().getBusStopDao().queryForId(poiId);
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+
+ if (poi == null) {
+ Log.e(TAG, "Could not find poi " + poiId + " in onActivityResult");
+ } else {
+ if (myLocationOverlay != null) {
+ // It could be null if it has not been enabled
+ myLocationOverlay.disableFollowLocation();
+ }
+ mapController.setZoom(20);
+ mapController.setCenter(poi.point);
+
+ }
+ } else {
+ Log.i(TAG, "Got null poi id");
+ }
- // mapController.setZoom(15);
- // mapController.setCenter(new GeoPoint(50935551, -1393488));
- }
+ if (favDialog != null) {
+ refreshFavouriteDialog();
+ }
- // This handles the possible change in favourite state caused by the user within the BusTimeActivity
- try {
- String busStopID = bundle.getString("busStopChanged");
- if (busStopID != null && busStopID.length() != 0) {
- Log.v(TAG, "Got a busStop id back from the BusTimeActivity " + busStopID);
- BusStop busStop = getHelper().getBusStopDao().queryForId(busStopID);
-
- if (busStop.uniLink) {
- uniLinkBusStopOverlay.refresh(busStop); // This does not invalidate the map, but it seems to
- // make the changes appear
- } else {
- nonUniLinkBusStopOverlay.refresh(busStop); // This does not invalidate the map, but it seems
- // to
- // make the changes appear
+ mapView.invalidate();
}
- }
- } catch (SQLException e) {
- e.printStackTrace();
}
- if (favDialog != null) {
- refreshFavouriteDialog();
- }
- }
}
- }
-
- /*
- * public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
- *
- * mapView.post(new Runnable() { public void run() { // updateEnabledOverlays(); TODO Fix whatever this did?
- * mapView.invalidate(); } });
- *
- * return true; }
- */
-
- protected Dialog onCreateDialog(int id) {
- switch (id) {
- case VIEW_DIALOG_ID:
- ViewDialog viewDialog = new ViewDialog(instance);
- return viewDialog;
- case FAVOURITE_DIALOG_ID:
- favDialog = new POIDialog(instance);
- favDialog.setOnItemClickListener(this);
- favDialog.setOnItemLongClickListener(this);
- favDialog.setTitle(R.string.favourites_dialog_title);
- return favDialog;
+ /*
+ * public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
+ *
+ * mapView.post(new Runnable() { public void run() { // updateEnabledOverlays(); TODO Fix whatever this did?
+ * mapView.invalidate(); } });
+ *
+ * return true; }
+ */
+
+ protected Dialog onCreateDialog(int id) {
+ switch (id) {
+ case VIEW_DIALOG_ID:
+ ViewDialog viewDialog = new ViewDialog(instance);
+ return viewDialog;
+ case FAVOURITE_DIALOG_ID:
+ favDialog = new POIDialog(instance);
+ favDialog.setOnItemClickListener(this);
+ favDialog.setOnItemLongClickListener(this);
+ favDialog.setTitle(R.string.favourites_dialog_title);
+ return favDialog;
+ }
+ return null;
}
- return null;
- }
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- Log.i(TAG, "OnItemClick pos " + position + " id " + id);
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ Log.i(TAG, "OnItemClick pos " + position + " id " + id);
- String poiId = favDialog.adapter.getItemStringId(position);
+ String poiId = favDialog.adapter.getItemStringId(position);
- Log.i(TAG, "POI " + poiId + " selected");
+ Log.i(TAG, "POI " + poiId + " selected");
- POI poi = null;
+ POI poi = null;
- if (poiId != null) {
- Log.i(TAG, "Got id " + poiId);
- try {
- poi = getHelper().getBuildingDao().queryForId(poiId);
- if (poi == null) {
- poi = getHelper().getBusStopDao().queryForId(poiId);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
+ if (poiId != null) {
+ Log.i(TAG, "Got id " + poiId);
+ try {
+ poi = getHelper().getBuildingDao().queryForId(poiId);
+ if (poi == null) {
+ poi = getHelper().getBusStopDao().queryForId(poiId);
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
- if (poi == null) {
- Log.e(TAG, "Could not find poi " + poiId + " in onActivityResult");
- } else {
- if (myLocationOverlay != null) {
- myLocationOverlay.disableFollowLocation();
- }
- mapController.setZoom(20);
- mapController.setCenter(poi.point);
+ if (poi == null) {
+ Log.e(TAG, "Could not find poi " + poiId + " in onActivityResult");
+ } else {
+ if (myLocationOverlay != null) {
+ myLocationOverlay.disableFollowLocation();
+ }
+ mapController.setZoom(20);
+ mapController.setCenter(poi.point);
- favDialog.dismiss();
+ favDialog.dismiss();
- }
- } else {
- Log.i(TAG, "Got null poi id");
+ }
+ } else {
+ Log.i(TAG, "Got null poi id");
+
+ // mapController.setZoom(15);
+ // mapController.setCenter(new GeoPoint(50935551, -1393488));
+ }
- // mapController.setZoom(15);
- // mapController.setCenter(new GeoPoint(50935551, -1393488));
}
- }
+ /**
+ * Long click on a item in the favourites menu
+ */
+ public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
+
+ Log.i(TAG, "OnItemClick pos " + position + " id " + id);
- /**
- * Long click on a item in the favourites menu
- */
- public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
+ String poiId = favDialog.adapter.getItemStringId(position);
- Log.i(TAG, "OnItemClick pos " + position + " id " + id);
+ Log.i(TAG, "POI " + poiId + " selected");
- String poiId = favDialog.adapter.getItemStringId(position);
+ POI poi = null;
- Log.i(TAG, "POI " + poiId + " selected");
+ if (poiId != null) {
+ Log.i(TAG, "Got id " + poiId);
+ try {
+ poi = getHelper().getBuildingDao().queryForId(poiId);
+ if (poi == null) {
+ poi = getHelper().getBusStopDao().queryForId(poiId);
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
- POI poi = null;
+ if (poi == null) {
+ Log.e(TAG, "Could not find poi " + poiId + " in onActivityResult");
+ } else {
+ if (poi.type == POI.BUS_STOP) {
+ BusStop busStop = (BusStop) poi;
- if (poiId != null) {
- Log.i(TAG, "Got id " + poiId);
- try {
- poi = getHelper().getBuildingDao().queryForId(poiId);
- if (poi == null) {
- poi = getHelper().getBusStopDao().queryForId(poiId);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
+ Log.i(TAG, "Pressed " + busStop.id);
- if (poi == null) {
- Log.e(TAG, "Could not find poi " + poiId + " in onActivityResult");
- } else {
- if (poi.type == POI.BUS_STOP) {
- BusStop busStop = (BusStop) poi;
+ Intent i = new Intent(this, BusStopActivity.class);
+ i.putExtra("busStopID", busStop.id);
+ i.putExtra("busStopName", busStop.description);
+ startActivityForResult(i, 0);
- Log.i(TAG, "Pressed " + busStop.id);
+ return true;
- Intent i = new Intent(this, BusStopActivity.class);
- i.putExtra("busStopID", busStop.id);
- i.putExtra("busStopName", busStop.description);
- startActivityForResult(i, 0);
+ } else {
- return true;
+ myLocationOverlay.disableFollowLocation();
+ mapController.setZoom(20);
+ mapController.setCenter(poi.point);
+ favDialog.dismiss();
+ favDialog = null;
+ }
+ }
} else {
+ Log.i(TAG, "Got null poi id");
- myLocationOverlay.disableFollowLocation();
- mapController.setZoom(20);
- mapController.setCenter(poi.point);
-
- favDialog.dismiss();
- favDialog = null;
+ // mapController.setZoom(15);
+ // mapController.setCenter(new GeoPoint(50935551, -1393488));
}
- }
- } else {
- Log.i(TAG, "Got null poi id");
- // mapController.setZoom(15);
- // mapController.setCenter(new GeoPoint(50935551, -1393488));
+ return true;
}
- return true;
- }
+ private class OverlayRankComparator implements Comparator<Overlay> {
+ // private final SharedPreferences prefs;
- private class OverlayRankComparator implements Comparator<Overlay> {
- // private final SharedPreferences prefs;
+ OverlayRankComparator(SharedPreferences prefs) {
+ // this.prefs = prefs;
+ }
- OverlayRankComparator(SharedPreferences prefs) {
- // this.prefs = prefs;
- }
+ public int compare(Overlay arg0, Overlay arg1) {
+ return getRank(arg1) - getRank(arg0);
+ }
- public int compare(Overlay arg0, Overlay arg1) {
- return getRank(arg1) - getRank(arg0);
+ private final int getRank(Overlay overlay) { // TODO: Dont hardcode the
+ // rank values
+ if (overlay == scaleBarOverlay) {
+ return SCALE_BAR_OVERLAY_RANK;
+ } else if (overlay == myLocationOverlay) {
+ return MY_LOCATION_OVERLAY_RANK;
+ } else if (overlay == uniLinkBusStopOverlay) {
+ return UNI_LINK_BUS_STOP_OVERLAY_RANK;
+ } else if (overlay == nonUniLinkBusStopOverlay) {
+ return NON_UNI_LINK_BUS_STOP_OVERLAY_RANK;
+ } else if (overlay.equals(residentialBuildingOverlay)) {
+ return RESIDENTIAL_BUILDING_OVERLAY_RANK;
+ } else if (overlay.equals(nonResidentialBuildingOverlay)) {
+ return NON_RESIDENTIAL_BUILDING_OVERLAY_RANK;
+ } else if (siteOverlays != null && siteOverlays.values().contains(overlay)) {
+ return SITE_OVERLAYS_RANK;
+ } else if (busRouteOverlays != null && busRouteOverlays.values().contains(overlay)) {
+ return BUS_ROUTE_OVERLAYS_RANK;
+ } else {
+ Log.e(TAG, "Trying to rank unknown overlay " + overlay);
+ return -1;
+ }
+ }
}
- private final int getRank(Overlay overlay) { // TODO: Dont hardcode the rank values
- if (overlay == scaleBarOverlay) {
- return SCALE_BAR_OVERLAY_RANK;
- } else if (overlay == myLocationOverlay) {
- return MY_LOCATION_OVERLAY_RANK;
- } else if (overlay == uniLinkBusStopOverlay) {
- return UNI_LINK_BUS_STOP_OVERLAY_RANK;
- } else if (overlay == nonUniLinkBusStopOverlay) {
- return NON_UNI_LINK_BUS_STOP_OVERLAY_RANK;
- } else if (overlay.equals(residentialBuildingOverlay)) {
- return RESIDENTIAL_BUILDING_OVERLAY_RANK;
- } else if (overlay.equals(nonResidentialBuildingOverlay)) {
- return NON_RESIDENTIAL_BUILDING_OVERLAY_RANK;
- } else if (siteOverlays != null && siteOverlays.values().contains(overlay)) {
- return SITE_OVERLAYS_RANK;
- } else if (busRouteOverlays != null && busRouteOverlays.values().contains(overlay)) {
- return BUS_ROUTE_OVERLAYS_RANK;
- } else {
- Log.e(TAG, "Trying to rank unknown overlay " + overlay);
- return -1;
- }
- }
- }
-
- /**
- * Handles all changes in preferences
- */
- public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
- Log.v(TAG, "Got shared prefs changed event for key " + key);
-
- // Shared Preferences
- if (key.equals(GPS_ENABLED)) {
- final SharedPreferences activityPrefs = getPreferences(0);
-
- if (activityPrefs.getBoolean("Other:Compass", false) && prefs.getBoolean("GPSEnabled", false)) {
- myLocationOverlay.enableMyLocation();
- } else {
- myLocationOverlay.disableMyLocation();
- }
- } else if (key.equals(NON_UNI_LINK_BUS_TIMES)) {
- // Noting to do here atm
- } else if (key.equals(UNI_LINK_BUS_TIMES)) {
- // Noting to do here atm
- } else if (key.startsWith(BUS_STOP_OVERLAYS)) {
- showUniLinkBusStopOverlay();
- } else if (key.equals(NON_UNI_LINK_BUS_STOPS_OVERLAY)) {
- showNonUniLinkBusStopOverlay();
- } else if (key.startsWith(BUS_ROUTE_OVERLAYS)) {
- try {
- String routeName = key.substring(BUS_ROUTE_OVERLAYS.length(), key.length());
- for (BusRoute route : getHelper().getBusRouteDao()) {
- Log.v(TAG, route.code + " " + routeName);
- if (route.code.equals(routeName)) {
- showRouteOverlay(route);
- }
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- } else if (key.startsWith(BUILDING_OVERLAYS)) {
- showBuildingOverlays();
- } else if (key.startsWith(SITE_OVERLAYS)) {
- String siteName = key.substring(SITE_OVERLAYS.length(), key.length());
- try {
- for (Site site : getHelper().getSiteDao()) {
- if (site.name.equals(siteName)) {
- showSiteOverlay(site);
- }
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- } else if (key.startsWith(OTHER_OVERLAYS)) {
- if (key.substring(OTHER_OVERLAYS.length(), key.length()).equals(SCALE_BAR_OVERLAY)) {
- showUtilityOverlays();
- } else if (key.substring(OTHER_OVERLAYS.length(), key.length()).equals(MY_LOCATION_OVERLAY_COMPASS)) {
- if (prefs.getBoolean(key, MY_LOCATION_OVERLAY_COMPASS_ENABLED_BY_DEFAULT)) {
- myLocationOverlay.enableCompass();
- } else {
- myLocationOverlay.disableCompass();
- }
- } else if (key.substring(OTHER_OVERLAYS.length(), key.length()).equals(MY_LOCATION_OVERLAY)) {
- final SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
+ /**
+ * Handles all changes in preferences
+ */
+ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
+ Log.v(TAG, "Got shared prefs changed event for key " + key);
- if (prefs.getBoolean(key, MY_LOCATION_OVERLAY_ENABLED_BY_DEFAULT)
- && sharedPrefs.getBoolean(GPS_ENABLED, GPS_ENABLED_BY_DEFAULT)) {
- myLocationOverlay.enableMyLocation();
+ // Shared Preferences
+ if (key.equals(GPS_ENABLED)) {
+ final SharedPreferences activityPrefs = getPreferences(0);
+
+ if (activityPrefs.getBoolean("Other:Compass", false) && prefs.getBoolean("GPSEnabled", false)) {
+ myLocationOverlay.enableMyLocation();
+ } else {
+ myLocationOverlay.disableMyLocation();
+ }
+ } else if (key.equals(NON_UNI_LINK_BUS_TIMES)) {
+ // Noting to do here atm
+ } else if (key.equals(UNI_LINK_BUS_TIMES)) {
+ // Noting to do here atm
+ } else if (key.startsWith(BUS_STOP_OVERLAYS)) {
+ showUniLinkBusStopOverlay();
+ } else if (key.equals(NON_UNI_LINK_BUS_STOPS_OVERLAY)) {
+ showNonUniLinkBusStopOverlay();
+ } else if (key.startsWith(BUS_ROUTE_OVERLAYS)) {
+ try {
+ String routeName = key.substring(BUS_ROUTE_OVERLAYS.length(), key.length());
+ for (BusRoute route : getHelper().getBusRouteDao()) {
+ Log.v(TAG, route.code + " " + routeName);
+ if (route.code.equals(routeName)) {
+ showRouteOverlay(route);
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ } else if (key.startsWith(BUILDING_OVERLAYS)) {
+ showBuildingOverlays();
+ } else if (key.startsWith(SITE_OVERLAYS)) {
+ String siteName = key.substring(SITE_OVERLAYS.length(), key.length());
+ try {
+ for (Site site : getHelper().getSiteDao()) {
+ if (site.name.equals(siteName)) {
+ showSiteOverlay(site);
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ } else if (key.startsWith(OTHER_OVERLAYS)) {
+ if (key.substring(OTHER_OVERLAYS.length(), key.length()).equals(SCALE_BAR_OVERLAY)) {
+ showUtilityOverlays();
+ } else if (key.substring(OTHER_OVERLAYS.length(), key.length()).equals(MY_LOCATION_OVERLAY_COMPASS)) {
+ if (prefs.getBoolean(key, MY_LOCATION_OVERLAY_COMPASS_ENABLED_BY_DEFAULT)) {
+ myLocationOverlay.enableCompass();
+ } else {
+ myLocationOverlay.disableCompass();
+ }
+ mapView.invalidate();
+ } else if (key.substring(OTHER_OVERLAYS.length(), key.length()).equals(MY_LOCATION_OVERLAY)) {
+ final SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
+
+ if (prefs.getBoolean(key, MY_LOCATION_OVERLAY_ENABLED_BY_DEFAULT)
+ && sharedPrefs.getBoolean(GPS_ENABLED, GPS_ENABLED_BY_DEFAULT)) {
+ myLocationOverlay.enableMyLocation();
+ } else {
+ myLocationOverlay.disableMyLocation();
+ }
+ mapView.invalidate();
+ } else {
+ Log.e(TAG, "Unhandled preference key " + key);
+ }
} else {
- myLocationOverlay.disableMyLocation();
+ Log.e(TAG, "Unhandled preference key " + key);
}
- } else {
- Log.e(TAG, "Unhandled preference key " + key);
- }
- } else {
- Log.e(TAG, "Unhandled preference key " + key);
}
- }
}
diff --git a/src/net/cbaines/suma/POI.java b/src/net/cbaines/suma/POI.java
index 244198d..485845c 100644
--- a/src/net/cbaines/suma/POI.java
+++ b/src/net/cbaines/suma/POI.java
@@ -32,7 +32,6 @@ public abstract class POI {
public static final String ID_FIELD_NAME = "id";
public static final String POINT_FIELD_NAME = "point";
- public static final String FAVOURITE_FIELD_NAME = "favourite";
POI() {
}
@@ -48,9 +47,6 @@ public abstract class POI {
@DatabaseField(id = true)
public String id;
- @DatabaseField(canBeNull = false)
- public boolean favourite; // This field is not assessed by equals
-
public int distTo = -1; // Used by the comparator to store distances, then later by the gui to display them.
public String type;
diff --git a/src/net/cbaines/suma/POIFavouriteComparator.java b/src/net/cbaines/suma/POIFavouriteComparator.java
index 94148d4..341ff4c 100644
--- a/src/net/cbaines/suma/POIFavouriteComparator.java
+++ b/src/net/cbaines/suma/POIFavouriteComparator.java
@@ -21,20 +21,28 @@ package net.cbaines.suma;
import java.util.Comparator;
+import android.content.SharedPreferences;
+
public class POIFavouriteComparator implements Comparator<POI> {
- public int compare(POI poi1, POI poi2) {
- if (poi1.favourite) {
- if (poi2.favourite) {
- return 0;
- } else {
- return 1;
- }
- } else if (poi2.favourite) {
- return -1;
- } else {
- return 0;
+ SharedPreferences favourites;
+
+ POIFavouriteComparator(SharedPreferences favourites) {
+ this.favourites = favourites;
+ }
+
+ public int compare(POI poi1, POI poi2) {
+ if (favourites.getBoolean(poi1.id, false)) {
+ if (favourites.getBoolean(poi2.id, false)) {
+ return 0;
+ } else {
+ return 1;
+ }
+ } else if (favourites.getBoolean(poi2.id, false)) {
+ return -1;
+ } else {
+ return 0;
+ }
}
- }
}
diff --git a/src/net/cbaines/suma/Preferences.java b/src/net/cbaines/suma/Preferences.java
index a978dd9..84e1d27 100644
--- a/src/net/cbaines/suma/Preferences.java
+++ b/src/net/cbaines/suma/Preferences.java
@@ -10,4 +10,6 @@ public interface Preferences {
static final boolean NON_UNI_LINK_BUS_TIMES_ENABLED_BY_DEFAULT = false;
static final String NON_UNI_LINK_BUS_STOPS_OVERLAY = "nonUniLinkBusStops";
static final boolean NON_UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT = false;
+
+ static final String FAVOURITES_PREFERENCES = "favourites";
}
diff --git a/src/net/cbaines/suma/StopView.java b/src/net/cbaines/suma/StopView.java
index ce17721..27c3a4c 100644
--- a/src/net/cbaines/suma/StopView.java
+++ b/src/net/cbaines/suma/StopView.java
@@ -87,6 +87,7 @@ public class StopView extends LinearLayout implements OnClickListener, OnLongCli
if (stop.bus.id != null) {
if (stop.live) {
+
onClickMessage = "Bus " + stop.bus.toString() + " at "
+ DateFormat.getTimeInstance(DateFormat.SHORT).format(stop.arivalTime);
} else {
@@ -112,6 +113,7 @@ public class StopView extends LinearLayout implements OnClickListener, OnLongCli
public void onClick(View v) {
if (context.activityToast == null) {
+
context.activityToast = Toast.makeText(context, onClickMessage, Toast.LENGTH_SHORT);
} else {
context.activityToast.setText(onClickMessage);
@@ -122,6 +124,7 @@ public class StopView extends LinearLayout implements OnClickListener, OnLongCli
}
public boolean onLongClick(View v) {
+
DatabaseHelper helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
try {
@@ -141,6 +144,7 @@ public class StopView extends LinearLayout implements OnClickListener, OnLongCli
} else {
if (!stop.bus.route.uniLink) {
if (context.activityToast == null) {
+
context.activityToast = Toast.makeText(context, "Bus schedules only avalible for Uni-Link buses",
Toast.LENGTH_SHORT);
} else {
@@ -150,6 +154,7 @@ public class StopView extends LinearLayout implements OnClickListener, OnLongCli
context.activityToast.show();
} else {
if (context.activityToast == null) {
+
context.activityToast = Toast.makeText(context, "Bus schedules not avalible for unidentified buses",
Toast.LENGTH_SHORT);
} else {
diff --git a/src/net/cbaines/suma/ViewDialog.java b/src/net/cbaines/suma/ViewDialog.java
index 432fec1..e97cbdf 100644
--- a/src/net/cbaines/suma/ViewDialog.java
+++ b/src/net/cbaines/suma/ViewDialog.java
@@ -36,239 +36,243 @@ import android.widget.TextView;
class ViewDialog extends Dialog implements OnChildClickListener {
- private final ExpandableListView epView;
-
- private static final String TAG = "ViewDialog";
-
- private final MyExpandableListAdapter mAdapter;
-
- private OnChildClickListener listener;
-
- private String[] busRoutes;
- private String[] buildingTypes;
- private String[] other;
- private String[] groupHeadings;
- private String[] siteNames;
-
- protected MapActivity context;
-
- public ViewDialog(MapActivity context) {
- super(context);
-
- this.context = context;
-
- busRoutes = context.getResources().getStringArray(R.array.uniLinkBusRoutes);
- buildingTypes = context.getResources().getStringArray(R.array.buildingTypes);
- other = context.getResources().getStringArray(R.array.utilityOverlays);
- groupHeadings = context.getResources().getStringArray(R.array.preferencesHeadings);
- siteNames = MapActivity.SITE_NAMES; // TODO: Temp hack, should be included in the strings res for translation
- // purposes?
-
- setContentView(R.layout.view_dialog);
- setTitle("Select the map elements to display");
-
- WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
- lp.copyFrom(this.getWindow().getAttributes());
- lp.width = WindowManager.LayoutParams.FILL_PARENT;
- lp.height = WindowManager.LayoutParams.FILL_PARENT;
-
- this.getWindow().setAttributes(lp);
-
- epView = (ExpandableListView) findViewById(R.id.view_list);
- mAdapter = new MyExpandableListAdapter(context);
- epView.setAdapter(mAdapter);
- epView.setOnChildClickListener(this);
-
- }
-
- public void setOnItemClickListener(OnChildClickListener onChildClickListener) {
- Log.i(TAG, "Listener set for dialog");
- listener = onChildClickListener;
- }
-
- class MyExpandableListAdapter extends BaseExpandableListAdapter implements Preferences {
-
- private LayoutInflater inflater;
-
- private static final String TAG = "MyExpandableListAdapter";
-
- // Bus Stops
- // |_ U1
- // |_ U1N
- // |_ U2
- // |_ U6
- // |_ U9
- // Bus Routes
- // |_ U1
- // |_ U1N
- // |_ U2
- // |_ U6
- // |_ U9
- // Buildings
- // |_ Residential
- // |_ Non-Residential
- // Site Outlines
- // |_ Highfield Campus
- // |_ Boldrewood Campus
- // |_ Avenue Campus
- // |_ Winchester School of Art
- // |_ The University of Southampton Science Park
- // |_ National Oceanography Centre Campus
- // |_ Boat House
- // |_ Southampton General Hospital
- // |_ Royal South Hants Hospital
- // |_ Belgrave Industrial Site
- // |_ Highfield Hall
- // |_ Glen Eyre Hall
- // |_ South Hill Hall
- // |_ Chamberlain Hall
- // |_ Hartley Grove
- // |_ Bencraft Hall
- // |_ Connaught Hall
- // |_ Montefiore Hall
- // |_ Stoneham Hall
- // |_ Erasmus Park
- // Other
- // |_ Scale Bar
- // |_ Compass
- // |_ My Location
-
- MyExpandableListAdapter(Context context) {
- inflater = LayoutInflater.from(context);
- }
+ private final ExpandableListView epView;
+
+ private static final String TAG = "ViewDialog";
+
+ private final MyExpandableListAdapter mAdapter;
+
+ private OnChildClickListener listener;
+
+ private String[] busRoutes;
+ private String[] buildingTypes;
+ private String[] other;
+ private String[] groupHeadings;
+ private String[] siteNames;
+
+ protected MapActivity context;
+
+ public ViewDialog(MapActivity context) {
+ super(context);
+
+ this.context = context;
+
+ busRoutes = context.getResources().getStringArray(R.array.uniLinkBusRoutes);
+ buildingTypes = context.getResources().getStringArray(R.array.buildingTypes);
+ other = context.getResources().getStringArray(R.array.utilityOverlays);
+ groupHeadings = context.getResources().getStringArray(R.array.preferencesHeadings);
+ siteNames = MapActivity.SITE_NAMES; // TODO: Temp hack, should be included in the strings res for translation
+ // purposes?
+
+ setContentView(R.layout.view_dialog);
+ setTitle("Select the map elements to display");
+
+ WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
+ lp.copyFrom(this.getWindow().getAttributes());
+ lp.width = WindowManager.LayoutParams.FILL_PARENT;
+ lp.height = WindowManager.LayoutParams.FILL_PARENT;
+
+ this.getWindow().setAttributes(lp);
+
+ epView = (ExpandableListView) findViewById(R.id.view_list);
+ mAdapter = new MyExpandableListAdapter(context);
+ epView.setAdapter(mAdapter);
+ epView.setOnChildClickListener(this);
- public Object getChild(int groupPosition, int childPosition) {
- if (groupPosition == 0 || groupPosition == 1) {
- return busRoutes[childPosition];
- } else if (groupPosition == 2) {
- return buildingTypes[childPosition];
- } else if (groupPosition == 3) {
- return siteNames[childPosition];
- } else if (groupPosition == 4) {
- return other[childPosition];
- } else {
- Log.e(TAG, "Unrecognised groupPosition " + groupPosition);
- return null;
- }
}
- public long getChildId(int groupPosition, int childPosition) {
- return groupPosition * 50 + childPosition;
+ public void setOnItemClickListener(OnChildClickListener onChildClickListener) {
+ Log.i(TAG, "Listener set for dialog");
+ listener = onChildClickListener;
}
- public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
- ViewGroup parent) {
- View v = null;
- if (convertView != null)
- v = convertView;
- else
- v = inflater.inflate(R.layout.view_child_row, parent, false);
- String c = (String) getChild(groupPosition, childPosition);
- TextView childName = (TextView) v.findViewById(R.id.childname);
- if (childName != null)
- childName.setText(c);
- CheckBox cb = (CheckBox) v.findViewById(R.id.check1);
- cb.setClickable(false);
- cb.setFocusable(false);
- if (context == null) {
- Log.e(TAG, "context == null");
- }
- SharedPreferences activityPrefs = context.getPreferences(0);
-
- String str = MapActivity.PREFERENCES_GROUPS[groupPosition]
- + MapActivity.PREFERENCES_CHILDREN[groupPosition][childPosition];
-
- if (groupPosition == 0) {
- cb.setChecked(activityPrefs.getBoolean(str, MapActivity.UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
- } else if (groupPosition == 1) {
- cb.setChecked(activityPrefs.getBoolean(str, MapActivity.BUS_ROUTE_OVERLAYS_ENABLED_BY_DEFAULT));
- } else if (groupPosition == 2) {
- if (childPosition == 0) {
- cb.setChecked(activityPrefs.getBoolean(str,
- MapActivity.RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT));
- } else {
- cb.setChecked(activityPrefs.getBoolean(str,
- MapActivity.NON_RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT));
+ class MyExpandableListAdapter extends BaseExpandableListAdapter implements Preferences {
+
+ private LayoutInflater inflater;
+
+ private static final String TAG = "MyExpandableListAdapter";
+
+ // Bus Stops
+ // |_ U1
+ // |_ U1N
+ // |_ U2
+ // |_ U6
+ // |_ U9
+ // Bus Routes
+ // |_ U1
+ // |_ U1N
+ // |_ U2
+ // |_ U6
+ // |_ U9
+ // Buildings
+ // |_ Residential
+ // |_ Non-Residential
+ // Site Outlines
+ // |_ Highfield Campus
+ // |_ Boldrewood Campus
+ // |_ Avenue Campus
+ // |_ Winchester School of Art
+ // |_ The University of Southampton Science Park
+ // |_ National Oceanography Centre Campus
+ // |_ Boat House
+ // |_ Southampton General Hospital
+ // |_ Royal South Hants Hospital
+ // |_ Belgrave Industrial Site
+ // |_ Highfield Hall
+ // |_ Glen Eyre Hall
+ // |_ South Hill Hall
+ // |_ Chamberlain Hall
+ // |_ Hartley Grove
+ // |_ Bencraft Hall
+ // |_ Connaught Hall
+ // |_ Montefiore Hall
+ // |_ Stoneham Hall
+ // |_ Erasmus Park
+ // Other
+ // |_ Scale Bar
+ // |_ Compass
+ // |_ My Location
+
+ MyExpandableListAdapter(Context context) {
+ inflater = LayoutInflater.from(context);
}
- } else if (groupPosition == 3) {
- cb.setChecked(activityPrefs.getBoolean(str, MapActivity.SITE_OVERLAYS_ENABLED_BY_DEFAULT));
- } else if (groupPosition == 4) {
- cb.setChecked(activityPrefs.getBoolean(str, MapActivity.SCALE_BAR_OVERLAY_ENABLED_BY_DEFAULT));
- }
- return v;
- }
- public int getChildrenCount(int groupPosition) {
- if (groupPosition == 0 || groupPosition == 1) {
- return busRoutes.length;
- } else if (groupPosition == 2) {
- return buildingTypes.length;
- } else if (groupPosition == 3) {
- return siteNames.length;
- } else if (groupPosition == 4) {
- return other.length;
- }
- return 0;
- }
+ public Object getChild(int groupPosition, int childPosition) {
+ if (groupPosition == 0 || groupPosition == 1) {
+ return busRoutes[childPosition];
+ } else if (groupPosition == 2) {
+ return buildingTypes[childPosition];
+ } else if (groupPosition == 3) {
+ return siteNames[childPosition];
+ } else if (groupPosition == 4) {
+ return other[childPosition];
+ } else {
+ Log.e(TAG, "Unrecognised groupPosition " + groupPosition);
+ return null;
+ }
+ }
- public Object getGroup(int groupPosition) {
- return groupHeadings[groupPosition];
- }
+ public long getChildId(int groupPosition, int childPosition) {
+ return groupPosition * 50 + childPosition;
+ }
- public int getGroupCount() {
- return groupHeadings.length;
- }
+ public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
+ View v = null;
+ if (convertView != null)
+ v = convertView;
+ else
+ v = inflater.inflate(R.layout.view_child_row, parent, false);
+ String c = (String) getChild(groupPosition, childPosition);
+ TextView childName = (TextView) v.findViewById(R.id.childname);
+ if (childName != null)
+ childName.setText(c);
+ CheckBox cb = (CheckBox) v.findViewById(R.id.check1);
+ cb.setClickable(false);
+ cb.setFocusable(false);
+ if (context == null) {
+ Log.e(TAG, "context == null");
+ }
+ SharedPreferences activityPrefs = context.getPreferences(0);
+
+ String str = MapActivity.PREFERENCES_GROUPS[groupPosition]
+ + MapActivity.PREFERENCES_CHILDREN[groupPosition][childPosition];
+
+ if (groupPosition == 0) {
+ cb.setChecked(activityPrefs.getBoolean(str, MapActivity.UNI_LINK_BUS_STOP_OVERLAY_ENABLED_BY_DEFAULT));
+ } else if (groupPosition == 1) {
+ cb.setChecked(activityPrefs.getBoolean(str, MapActivity.BUS_ROUTE_OVERLAYS_ENABLED_BY_DEFAULT));
+ } else if (groupPosition == 2) {
+ if (childPosition == 0) {
+ cb.setChecked(activityPrefs.getBoolean(str, MapActivity.RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT));
+ } else {
+ cb.setChecked(activityPrefs.getBoolean(str, MapActivity.NON_RESIDENTIAL_BUILDING_OVERLAY_ENABLED_BY_DEFAULT));
+ }
+ } else if (groupPosition == 3) {
+ cb.setChecked(activityPrefs.getBoolean(str, MapActivity.SITE_OVERLAYS_ENABLED_BY_DEFAULT));
+ } else if (groupPosition == 4) {
+ if (childPosition == 0) {
+ cb.setChecked(activityPrefs.getBoolean(str, MapActivity.SCALE_BAR_OVERLAY_ENABLED_BY_DEFAULT));
+ } else if (childPosition == 1) {
+ cb.setChecked(activityPrefs.getBoolean(str, MapActivity.MY_LOCATION_OVERLAY_COMPASS_ENABLED_BY_DEFAULT));
+ } else if (childPosition == 2) {
+ cb.setChecked(activityPrefs.getBoolean(str, MapActivity.MY_LOCATION_OVERLAY_ENABLED_BY_DEFAULT));
+ }
+ }
+ return v;
+ }
- public long getGroupId(int groupPosition) {
- return groupPosition * 5;
- }
+ public int getChildrenCount(int groupPosition) {
+ if (groupPosition == 0 || groupPosition == 1) {
+ return busRoutes.length;
+ } else if (groupPosition == 2) {
+ return buildingTypes.length;
+ } else if (groupPosition == 3) {
+ return siteNames.length;
+ } else if (groupPosition == 4) {
+ return other.length;
+ }
+ return 0;
+ }
- public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
- View v = null;
- if (convertView != null)
- v = convertView;
- else
- v = inflater.inflate(R.layout.view_group_row, parent, false);
- String gt = (String) getGroup(groupPosition);
- TextView colorGroup = (TextView) v.findViewById(R.id.childname);
- if (gt != null)
- colorGroup.setText(gt);
- return v;
- }
+ public Object getGroup(int groupPosition) {
+ return groupHeadings[groupPosition];
+ }
- public boolean hasStableIds() {
- return true;
- }
+ public int getGroupCount() {
+ return groupHeadings.length;
+ }
+
+ public long getGroupId(int groupPosition) {
+ return groupPosition * 5;
+ }
+
+ public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
+ View v = null;
+ if (convertView != null)
+ v = convertView;
+ else
+ v = inflater.inflate(R.layout.view_group_row, parent, false);
+ String gt = (String) getGroup(groupPosition);
+ TextView colorGroup = (TextView) v.findViewById(R.id.childname);
+ if (gt != null)
+ colorGroup.setText(gt);
+ return v;
+ }
+
+ public boolean hasStableIds() {
+ return true;
+ }
+
+ public boolean isChildSelectable(int groupPosition, int childPosition) {
+ return true;
+ }
- public boolean isChildSelectable(int groupPosition, int childPosition) {
- return true;
}
- }
+ public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
+ Log.i(TAG, "Got view dialog click at " + groupPosition + ":" + childPosition);
- public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
- Log.i(TAG, "Got view dialog click at " + groupPosition + ":" + childPosition);
+ SharedPreferences activityPrefs = context.getPreferences(0);
- SharedPreferences activityPrefs = context.getPreferences(0);
+ Editor editor = activityPrefs.edit();
- Editor editor = activityPrefs.edit();
+ CheckBox cb = (CheckBox) v.findViewById(R.id.check1);
- CheckBox cb = (CheckBox) v.findViewById(R.id.check1);
+ String str = MapActivity.PREFERENCES_GROUPS[groupPosition]
+ + MapActivity.PREFERENCES_CHILDREN[groupPosition][childPosition];
- String str = MapActivity.PREFERENCES_GROUPS[groupPosition]
- + MapActivity.PREFERENCES_CHILDREN[groupPosition][childPosition];
+ Log.i(TAG, "Putting " + str + " to " + (!cb.isChecked()));
+ editor.putBoolean(str, !cb.isChecked());
- editor.putBoolean(str, !cb.isChecked());
+ editor.commit();
- editor.commit();
+ mAdapter.notifyDataSetInvalidated();
- mAdapter.notifyDataSetInvalidated();
+ if (listener != null) {
+ listener.onChildClick(parent, v, groupPosition, childPosition, id);
+ }
- if (listener != null) {
- listener.onChildClick(parent, v, groupPosition, childPosition, id);
+ return true;
}
- return true;
- }
-
} \ No newline at end of file