diff options
author | Christopher Baines <cbaines8@gmail.com> | 2012-01-05 19:20:56 +0000 |
---|---|---|
committer | Christopher Baines <cbaines8@gmail.com> | 2012-01-05 19:20:56 +0000 |
commit | f06b62c092ae6b9532982eb4729a911c378ccfbd (patch) | |
tree | c2bf7f4f074859e7fd93e1435da8441fd9a00a03 /src/net/cbaines/suma | |
parent | f07b5c37cb5a938949c01a8a2d42cd5f4bbabea8 (diff) | |
download | southamptonuniversitymap-f06b62c092ae6b9532982eb4729a911c378ccfbd.tar southamptonuniversitymap-f06b62c092ae6b9532982eb4729a911c378ccfbd.tar.gz |
Changed the overlay management, and speeded up the database check process.
Diffstat (limited to 'src/net/cbaines/suma')
-rw-r--r-- | src/net/cbaines/suma/DatabaseHelper.java | 40 | ||||
-rw-r--r-- | src/net/cbaines/suma/SouthamptonUniversityMapActivity.java | 578 |
2 files changed, 255 insertions, 363 deletions
diff --git a/src/net/cbaines/suma/DatabaseHelper.java b/src/net/cbaines/suma/DatabaseHelper.java index 28ad6a5..7ccc08d 100644 --- a/src/net/cbaines/suma/DatabaseHelper.java +++ b/src/net/cbaines/suma/DatabaseHelper.java @@ -177,25 +177,27 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { public boolean checkDataBase() { Log.i(TAG, "Check database"); - SQLiteDatabase checkDB = null; - - try { - String myPath = DATABASE_PATH + DATABASE_NAME; - checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); - } catch (SQLiteException e) { - - // database does't exist yet. - - } - - if (checkDB != null) { - - checkDB.close(); - - } - - Log.i(TAG, "Finished checking database"); - return checkDB != null ? true : false; + /* + * SQLiteDatabase checkDB = null; + * + * try { String myPath = DATABASE_PATH + DATABASE_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); } catch + * (SQLiteException e) { + * + * // database does't exist yet. + * + * } + * + * if (checkDB != null) { + * + * checkDB.close(); + * + * } + * + * Log.i(TAG, "Finished checking database"); return checkDB != null ? true : false; + */ + + File dbFile = new File(DATABASE_PATH + DATABASE_NAME); + return dbFile.exists(); } /** diff --git a/src/net/cbaines/suma/SouthamptonUniversityMapActivity.java b/src/net/cbaines/suma/SouthamptonUniversityMapActivity.java index 430bd4f..4bfba52 100644 --- a/src/net/cbaines/suma/SouthamptonUniversityMapActivity.java +++ b/src/net/cbaines/suma/SouthamptonUniversityMapActivity.java @@ -216,9 +216,10 @@ public class SouthamptonUniversityMapActivity extends OrmLiteBaseActivity<Databa Log.i(TAG, "Begining loading databases " + (System.currentTimeMillis() - startTime)); DatabaseHelper helper = getHelper(); - Log.i(TAG, "Got the helper"); + Log.i(TAG, "Got the helper at " + (System.currentTimeMillis() - startTime)); boolean dbExist = helper.checkDataBase(); + Log.i(TAG, "Finished checking the database at " + (System.currentTimeMillis() - startTime)); if (dbExist) { // do nothing - database already exist @@ -330,11 +331,6 @@ public class SouthamptonUniversityMapActivity extends OrmLiteBaseActivity<Databa e.printStackTrace(); } - SharedPreferences mainPrefs = getPreferences(0); - if (mainPrefs.getBoolean("first_run", true)) { - Log.i(TAG, "Changing button in intro"); - } - Log.i(TAG, "Finished loading databases " + (System.currentTimeMillis() - startTime)); } catch (SQLException e1) { @@ -345,75 +341,16 @@ public class SouthamptonUniversityMapActivity extends OrmLiteBaseActivity<Databa } try { - setupActivityPrefs(); + showOverlays(); } catch (SQLException e) { e.printStackTrace(); } - createOverlays(); Log.i(TAG, "Finished seting in motion the creation of the overlays " + (System.currentTimeMillis() - startTime)); - } - private void setupActivityPrefs() throws SQLException { - Log.i(TAG, "Begining setting up preferences"); - - SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); - - int size = (int) getHelper().getSiteDao().countOf(); - ArrayList<Site> sites = new ArrayList<Site>(size); - - try { - sites.addAll(getHelper().getSiteDao().queryForAll()); - } catch (SQLException e) { - e.printStackTrace(); - } - siteNames = new String[size]; - for (int i = 0; i < size; i++) { - siteNames[i] = sites.get(i).name; - } - - SharedPreferences activityPrefs = getPreferences(0); - Editor editor = activityPrefs.edit(); - - for (int heading = 0; heading < groupHeadings.length; heading++) { - if (heading == 0 || heading == 1) { - for (int child = 0; child < busRoutes.length; child++) { - if (!activityPrefs.contains(groupHeadings[heading] + ":" + busRoutes[child])) { - editor.putBoolean(groupHeadings[heading] + ":" + busRoutes[child], true); - } - } - } else if (heading == 2) { - for (int child = 0; child < buildingTypes.length; child++) { - if (!activityPrefs.contains(groupHeadings[heading] + ":" + buildingTypes[child])) { - editor.putBoolean(groupHeadings[heading] + ":" + buildingTypes[child], true); - } - } - } else if (heading == 3) { - for (int child = 0; child < sites.size(); child++) { - if (!activityPrefs.contains(groupHeadings[heading] + ":" + sites.get(child))) { - editor.putBoolean(groupHeadings[heading] + ":" + sites.get(child), true); - } - } - } else if (heading == 4) { - for (int child = 0; child < other.length; child++) { - if (!activityPrefs.contains(groupHeadings[heading] + ":" + other[child])) { - editor.putBoolean(groupHeadings[heading] + ":" + other[child], true); - } - } - } - } - - editor.commit(); - - activityPrefs.registerOnSharedPreferenceChangeListener(this); - sharedPrefs.registerOnSharedPreferenceChangeListener(this); - - Log.i(TAG, "Finished setting up preferences"); - } - - private void createOverlays() { - Log.i(TAG, "Began creating overlays at " + (System.currentTimeMillis() - startTime)); + 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"); @@ -421,83 +358,97 @@ public class SouthamptonUniversityMapActivity extends OrmLiteBaseActivity<Databa Log.i(TAG, "Unable to recover overlays"); } - final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0)); final SharedPreferences activityPrefs = getPreferences(0); - Thread utilityOverlayCreation = new Thread(new Runnable() { - public void run() { - Log.i(TAG, "Begining the creation of the utility overlays"); + showUtilityOverlays(); - if (pastOverlays != null) { - scaleBarOverlay = (ScaleBarOverlay) pastOverlays.get("Other:Scale Bar"); + showBusStopOverlay(); - if (scaleBarOverlay != null && myLocationOverlay != null) { - overlays.put("Other:Scale Bar", scaleBarOverlay); - Log.i(TAG, "Finished restoring utility overlays " + (System.currentTimeMillis() - startTime)); - return; - } - } + if (activityPrefs.getBoolean("Buildings:Residential", false) || activityPrefs.getBoolean("Buildings:Non-Residential", false)) { + // The argument currently dosent matter for this method. + showBuildingOverlay(true); - scaleBarOverlay = new ScaleBarOverlay(instance); - scaleBarOverlay.setEnabled(activityPrefs.getBoolean("Other:Scale Bar", true)); + } - overlays.put("Other:Scale Bar", scaleBarOverlay); + Log.i(TAG, "Begining to show the route overlays at " + (System.currentTimeMillis() - startTime)); + routeOverlays = new HashMap<BusRoute, PathOverlay>(5); + Dao<BusRoute, Integer> busRouteDao = getHelper().getBusRouteDao(); + for (Iterator<BusRoute> routeIter = busRouteDao.iterator(); routeIter.hasNext();) { + BusRoute route = routeIter.next(); + if (activityPrefs.getBoolean("Bus Routes:" + route.code, false)) { + showRouteOverlay(route); + } + } + Log.i(TAG, "Finished loading routes " + (System.currentTimeMillis() - startTime)); - Log.i(TAG, "Finished creating utility overlays " + (System.currentTimeMillis() - startTime)); + Log.i(TAG, "Begining to show the site overlays at " + (System.currentTimeMillis() - startTime)); + try { + Dao<Site, String> siteDao = getHelper().getSiteDao(); + siteOverlays = new HashMap<Site, PathOverlay>((int) siteDao.countOf()); + for (Site site : siteDao) { + if (activityPrefs.getBoolean("Sites:" + site.name, false)) { + showSiteOverlay(site); + } } - }); + } catch (SQLException e) { + e.printStackTrace(); + } + Log.i(TAG, "Finished showing the site overlays " + (System.currentTimeMillis() - startTime)); - utilityOverlayCreation.start(); + } - Runnable utilityOverlayApplication = new Runnable() { + private void showUtilityOverlays() { + new Thread(new Runnable() { public void run() { - Log.i(TAG, "Begining the application of the utility overlays"); + Log.i(TAG, "Begining showing the utility overlays " + (System.currentTimeMillis() - startTime)); - mapView.getOverlays().add(scaleBarOverlay); + final SharedPreferences activityPrefs = getPreferences(0); + final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0)); - mapView.getOverlays().add(myLocationOverlay); + if (scaleBarOverlay != null) { + Log.v(TAG, "ScaleBarOverlay is already created"); + } else { + if (pastOverlays != null && (scaleBarOverlay = (ScaleBarOverlay) pastOverlays.get("Other:Scale Bar")) != null) { + Log.i(TAG, "Finished restoring utility overlays " + (System.currentTimeMillis() - startTime)); + } else { + scaleBarOverlay = new ScaleBarOverlay(instance); + } - Log.v(TAG, "Applyed the utility overlays, now sorting them"); + overlays.put("Other:Scale Bar", scaleBarOverlay); - Collections.sort(mapView.getOverlays(), comparator); + synchronized (mapView.getOverlays()) { + mapView.getOverlays().add(scaleBarOverlay); + mapView.getOverlays().add(myLocationOverlay); + Collections.sort(mapView.getOverlays(), comparator); + } - Log.v(TAG, "Finished sorting the utility overlays them, now applying them"); + } - mapView.invalidate(); + scaleBarOverlay.setEnabled(activityPrefs.getBoolean("Other:Scale Bar", true)); - Log.i(TAG, "Finished loading utility overlays " + (System.currentTimeMillis() - startTime)); + mapView.postInvalidate(); + Log.i(TAG, "Finished showing utility overlays " + (System.currentTimeMillis() - startTime)); } - }; + }).start(); + } - Thread routeOverlayCreation = new Thread(new Runnable() { + 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)); - try { - Log.i(TAG, "Begining to create the route overlays"); - - SharedPreferences mainPrefs = getPreferences(0); - - routeOverlays = new HashMap<BusRoute, PathOverlay>(5); - - Dao<BusRoute, Integer> busRouteDao = getHelper().getBusRouteDao(); - - for (Iterator<BusRoute> routeIter = busRouteDao.iterator(); routeIter.hasNext();) { - BusRoute route = routeIter.next(); - - Log.v(TAG, "Looking at route " + route.code); - - if (pastOverlays != null) { - PathOverlay routeOverlay = (PathOverlay) pastOverlays.get("Bus Routes:" + route.code); - if (routeOverlay != null) { - Log.i(TAG, "Restored " + route.code + " route overlay"); - routeOverlays.put(route, routeOverlay); - overlays.put("Bus Routes:" + route.code, routeOverlay); - continue; - } - } + final SharedPreferences activityPrefs = getPreferences(0); + final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0)); + PathOverlay routeOverlay; + if ((routeOverlay = routeOverlays.get(route)) != null) { + Log.v(TAG, route.code + " route overlay already existed"); + } else { + if (pastOverlays != null && (routeOverlay = (PathOverlay) pastOverlays.get("Bus Routes:" + route.code)) != null) { + Log.v(TAG, "Restored " + route.code + " route overlay"); + } else { InputStream resource = null; int colour = 0; if (route.code.equals("U1")) { @@ -510,7 +461,7 @@ public class SouthamptonUniversityMapActivity extends OrmLiteBaseActivity<Databa routeOverlayU1E.getPaint().setAlpha(145); routeOverlayU1E.getPaint().setStrokeWidth(12); routeOverlayU1E.getPaint().setPathEffect(new DashPathEffect(new float[] { 20, 16 }, 0)); - routeOverlayU1E.setEnabled(mainPrefs.getBoolean("Bus Routes:" + route.code, true)); + routeOverlayU1E.setEnabled(activityPrefs.getBoolean("Bus Routes:" + route.code, true)); routeOverlays.put(new BusRoute(1000, "U1E", "U1e Route Label"), routeOverlayU1E); overlays.put("Bus Routes:" + route.code + "E", routeOverlayU1E); @@ -527,290 +478,218 @@ public class SouthamptonUniversityMapActivity extends OrmLiteBaseActivity<Databa resource = getResources().openRawResource(R.raw.u9); colour = U9; } else { - continue; + Log.w(TAG, "Wierd route " + route); } - PathOverlay routeOverlay = DataManager.getRoutePath(resource, colour, mResourceProxy); + routeOverlay = DataManager.getRoutePath(resource, colour, mResourceProxy); - Log.i(TAG, "Path overlay has " + routeOverlay.getNumberOfPoints() + " points"); + Log.v(TAG, "Path overlay has " + routeOverlay.getNumberOfPoints() + " points"); routeOverlay.getPaint().setAntiAlias(true); routeOverlay.getPaint().setAlpha(145); routeOverlay.getPaint().setStrokeWidth(12); - routeOverlay.setEnabled(mainPrefs.getBoolean("Bus Routes:" + route.code, true)); + } - routeOverlays.put(route, routeOverlay); - overlays.put("Bus Routes:" + route.code, routeOverlay); + routeOverlays.put(route, routeOverlay); + overlays.put("Bus Routes:" + route.code, routeOverlay); + synchronized (mapView.getOverlays()) { + mapView.getOverlays().add(routeOverlay); + Collections.sort(mapView.getOverlays(), comparator); } - Log.i(TAG, "Finished loading routes " + (System.currentTimeMillis() - startTime)); - - } catch (SQLException e) { - e.printStackTrace(); } - } - }); - - routeOverlayCreation.start(); - Runnable routeOverlayApplication = new Runnable() { - public void run() { - Log.i(TAG, "Begining applying the route overlays, number of route overlays = " + routeOverlays.size()); - - for (PathOverlay routeOverlay : routeOverlays.values()) { - Log.v(TAG, "Added route overlay"); - mapView.getOverlays().add(routeOverlay); + routeOverlay.setEnabled(activityPrefs.getBoolean("Bus Routes:" + route.code, true)); + if (route.code.equals("U1")) { + overlays.get("Bus Routes:U1E").setEnabled(activityPrefs.getBoolean("Bus Routes:U1", true)); } - Log.v(TAG, "Added the route overlays, now sorting them"); - - Collections.sort(mapView.getOverlays(), comparator); - - Log.v(TAG, "Finished sorting the route overlays them, now applying them"); - - mapView.invalidate(); + mapView.postInvalidate(); - Log.i(TAG, "Finished loading route overlays " + (System.currentTimeMillis() - startTime)); + Log.i(TAG, "Finished showing route " + route.code + " overlay at " + (System.currentTimeMillis() - startTime)); } - }; - - Thread siteOverlayCreation = new Thread(new Runnable() { - public void run() { - Log.i(TAG, "Begining the creation of the site overlays"); + }).start(); + } - SharedPreferences mainPrefs = getPreferences(0); + private void showSiteOverlay(final Site site) { - try { + new Thread(new Runnable() { + public void run() { + Log.i(TAG, "Begining showing site " + site.name + " overlay at " + (System.currentTimeMillis() - startTime)); - Dao<Site, String> siteDao = getHelper().getSiteDao(); - siteOverlays = new HashMap<Site, PathOverlay>((int) siteDao.countOf()); + final SharedPreferences activityPrefs = getPreferences(0); + final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0)); - for (Site site : siteDao) { + PathOverlay siteOverlay; + if ((siteOverlay = siteOverlays.get(site)) != null) { - if (pastOverlays != null) { - PathOverlay overlay = (PathOverlay) pastOverlays.get("Site Outlines:" + site.name); - if (overlay != null) { - Log.i(TAG, "Restored " + site.name + " site overlay"); - siteOverlays.put(site, overlay); - overlays.put("Site Outlines:" + site.name, overlay); - continue; - } - } + } else { + if (pastOverlays != null && (siteOverlay = (PathOverlay) pastOverlays.get("Site Outlines:" + site.name)) != null) { + Log.i(TAG, "Restored " + site.name + " site overlay"); + } else { - PathOverlay overlay = new PathOverlay(Color.BLUE, instance); - Paint paint = overlay.getPaint(); + 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++) { - overlay.addPoint(site.outline.points[i]); + siteOverlay.addPoint(site.outline.points[i]); } - overlay.addPoint(site.outline.points[0]); - - overlay.setEnabled(mainPrefs.getBoolean("Site Outlines:" + site.name, true)); + siteOverlay.addPoint(site.outline.points[0]); - siteOverlays.put(site, overlay); - overlays.put("Site Outlines:" + site.name, overlay); } - } catch (SQLException e) { - e.printStackTrace(); - } - - Log.i(TAG, "Finished creating site overlays " + (System.currentTimeMillis() - startTime)); - - } - }); - siteOverlayCreation.start(); + siteOverlays.put(site, siteOverlay); + overlays.put("Site Outlines:" + site.name, siteOverlay); - Runnable siteOverlayApplication = new Runnable() { - public void run() { - Log.i(TAG, "Begining applying the site overlays, number of site overlays = " + siteOverlays.size()); + Log.v(TAG, "Applyed the site overlay, now sorting them"); - for (PathOverlay siteOverlay : siteOverlays.values()) { - Log.d(TAG, "Added site overlay"); - mapView.getOverlays().add(siteOverlay); + synchronized (mapView.getOverlays()) { + mapView.getOverlays().add(siteOverlay); + Collections.sort(mapView.getOverlays(), comparator); + } } - Log.v(TAG, "Added the site overlays, now sorting them"); + siteOverlay.setEnabled(activityPrefs.getBoolean("Site Outlines:" + site.name, true)); - Collections.sort(mapView.getOverlays(), comparator); - - Log.v(TAG, "Finished sorting the site overlays them, now applying them"); - - mapView.invalidate(); + mapView.postInvalidate(); - Log.i(TAG, "Finished loading site overlays " + (System.currentTimeMillis() - startTime)); + Log.i(TAG, "Finished showing site " + site.name + " overlay at " + (System.currentTimeMillis() - startTime)); } - }; + }).start(); + } - Thread buildingOverlayCreation = new Thread(new Runnable() { + private void showBuildingOverlay(boolean residential) { + new Thread(new Runnable() { public void run() { - Log.i(TAG, "Begining the creation of the building overlays"); - try { - if (pastOverlays != null) { - residentialBuildingOverlay = (BuildingNumOverlay) pastOverlays.get("Buildings:Residential"); - nonResidentialBuildingOverlay = (BuildingNumOverlay) pastOverlays.get("Buildings:Non-Residential"); - if (residentialBuildingOverlay != null && nonResidentialBuildingOverlay != null) { - overlays.put("Buildings:" + buildingTypes[0], residentialBuildingOverlay); - overlays.put("Buildings:" + buildingTypes[1], nonResidentialBuildingOverlay); - - Log.i(TAG, "Restored building overlays"); - return; - } - } + Log.i(TAG, "Begining showing building overlays at " + (System.currentTimeMillis() - startTime)); - SharedPreferences mainPrefs = getPreferences(0); + final SharedPreferences activityPrefs = getPreferences(0); + final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0)); - ArrayList<Building> residentialBuildings = new ArrayList<Building>(); - ArrayList<Building> nonResidentialBuildings = new ArrayList<Building>(); + if (residentialBuildingOverlay != null) { - Dao<Building, String> buildingDao = getHelper().getBuildingDao(); + } else { + try { + Log.v(TAG, "Begining the creation of the building overlays"); - for (Building building : buildingDao) { - // Log.v(TAG, "Looking at building " + building.id); - if (building.residential == true) { - // Log.v(TAG, "Its residential"); - if (building.favourite) { - // Log.v(TAG, "Its residential and a favourite"); - residentialBuildings.add(building); - } else { - // Log.v(TAG, "Its residential and not a favourite"); - residentialBuildings.add(0, building); - } - } else { - if (building.favourite) { - // Log.v(TAG, "Its not residential and a favourite"); - nonResidentialBuildings.add(building); - } else { - // Log.v(TAG, "Its not residential and not a favourite"); - nonResidentialBuildings.add(0, building); + if (pastOverlays != null) { + residentialBuildingOverlay = (BuildingNumOverlay) pastOverlays.get("Buildings:Residential"); + nonResidentialBuildingOverlay = (BuildingNumOverlay) pastOverlays.get("Buildings:Non-Residential"); + if (residentialBuildingOverlay != null && nonResidentialBuildingOverlay != null) { + overlays.put("Buildings:" + buildingTypes[0], residentialBuildingOverlay); + overlays.put("Buildings:" + buildingTypes[1], nonResidentialBuildingOverlay); + + Log.i(TAG, "Restored building overlays"); + return; } } - } - - residentialBuildingOverlay = new BuildingNumOverlay(instance, residentialBuildings); - nonResidentialBuildingOverlay = new BuildingNumOverlay(instance, nonResidentialBuildings); - - residentialBuildingOverlay.setEnabled(mainPrefs.getBoolean("Buildings:Residential", false)); - nonResidentialBuildingOverlay.setEnabled(mainPrefs.getBoolean("Buildings:Non-Residential", false)); - - overlays.put("Buildings:" + buildingTypes[0], residentialBuildingOverlay); - overlays.put("Buildings:" + buildingTypes[1], nonResidentialBuildingOverlay); - - Log.i(TAG, "Finished creating building overlays " + (System.currentTimeMillis() - startTime)); - } catch (SQLException e) { - e.printStackTrace(); - } - - } - }); - buildingOverlayCreation.start(); + ArrayList<Building> residentialBuildings = new ArrayList<Building>(); + ArrayList<Building> nonResidentialBuildings = new ArrayList<Building>(); - Runnable buildingOverlayApplication = new Runnable() { - public void run() { - Log.i(TAG, "Begining applying the building overlays"); - - mapView.getOverlays().add(residentialBuildingOverlay); - mapView.getOverlays().add(nonResidentialBuildingOverlay); - - Log.v(TAG, "Added the building overlays, now sorting them"); + Dao<Building, String> buildingDao; - Collections.sort(mapView.getOverlays(), comparator); + buildingDao = getHelper().getBuildingDao(); - Log.v(TAG, "Finished sorting the building overlays, now applying them"); - - mapView.invalidate(); + for (Building building : buildingDao) { + // Log.v(TAG, "Looking at building " + building.id); + if (building.residential == true) { + // Log.v(TAG, "Its residential"); + if (building.favourite) { + // Log.v(TAG, "Its residential and a favourite"); + residentialBuildings.add(building); + } else { + // Log.v(TAG, "Its residential and not a favourite"); + residentialBuildings.add(0, building); + } + } else { + if (building.favourite) { + // Log.v(TAG, "Its not residential and a favourite"); + nonResidentialBuildings.add(building); + } else { + // Log.v(TAG, "Its not residential and not a favourite"); + nonResidentialBuildings.add(0, building); + } + } + } - Log.i(TAG, "Finished loading building overlays " + (System.currentTimeMillis() - startTime)); - } - }; + residentialBuildingOverlay = new BuildingNumOverlay(instance, residentialBuildings); + nonResidentialBuildingOverlay = new BuildingNumOverlay(instance, nonResidentialBuildings); - Thread busStopOverlayCreation = new Thread(new Runnable() { + overlays.put("Buildings:" + buildingTypes[0], residentialBuildingOverlay); + overlays.put("Buildings:" + buildingTypes[1], nonResidentialBuildingOverlay); - public void run() { - Log.i(TAG, "Begining the creation of the bus stop overlay"); + Log.v(TAG, "Applyed the site overlay, now sorting them"); - if (pastOverlays != null) { - busStopOverlay = (BusStopOverlay) pastOverlays.get("BusStops"); - if (busStopOverlay != null) { - overlays.put("BusStops", busStopOverlay); + synchronized (mapView.getOverlays()) { + mapView.getOverlays().add(residentialBuildingOverlay); + mapView.getOverlays().add(nonResidentialBuildingOverlay); + Collections.sort(mapView.getOverlays(), comparator); + } - Log.i(TAG, "Restored bus stop overlays"); - return; + } catch (SQLException e) { + e.printStackTrace(); } } - try { - SharedPreferences mainPrefs = getPreferences(0); - - busStopOverlay = new BusStopOverlay(instance); - busStopOverlay.setRoutes(0, mainPrefs.getBoolean("Bus Stops:U1", false)); - busStopOverlay.setRoutes(1, mainPrefs.getBoolean("Bus Stops:U1N", false)); - busStopOverlay.setRoutes(2, mainPrefs.getBoolean("Bus Stops:U2", false)); - busStopOverlay.setRoutes(3, mainPrefs.getBoolean("Bus Stops:U6", false)); - busStopOverlay.setRoutes(4, mainPrefs.getBoolean("Bus Stops:U9", false)); + residentialBuildingOverlay.setEnabled(activityPrefs.getBoolean("Buildings:Residential", false)); + nonResidentialBuildingOverlay.setEnabled(activityPrefs.getBoolean("Buildings:Non-Residential", false)); - overlays.put("BusStops", busStopOverlay); - } catch (SQLException e) { - e.printStackTrace(); - } + mapView.postInvalidate(); - Log.i(TAG, "Finished creating the bus stops overlay " + (System.currentTimeMillis() - startTime)); + Log.i(TAG, "Finished showing building overlays at " + (System.currentTimeMillis() - startTime)); } - }); - - busStopOverlayCreation.start(); + }).start(); + } - Runnable busStopOverlayApplication = new Runnable() { + private void showBusStopOverlay() { + new Thread(new Runnable() { public void run() { - Log.i(TAG, "Begining applying the bus stop overlay"); + Log.i(TAG, "Begining showing bus stop overlays at " + (System.currentTimeMillis() - startTime)); - mapView.getOverlays().add(busStopOverlay); + final SharedPreferences activityPrefs = getPreferences(0); + final OverlayRankComparator comparator = new OverlayRankComparator(getPreferences(0)); - Log.v(TAG, "Added the bus stop overlay, now sorting them"); + if (busStopOverlay != null) { - Collections.sort(mapView.getOverlays(), comparator); + } else { + if (pastOverlays != null && (busStopOverlay = (BusStopOverlay) pastOverlays.get("BusStops")) != null) { + Log.i(TAG, "Restored bus stop overlays"); + } else { + try { + busStopOverlay = new BusStopOverlay(instance); + } catch (SQLException e) { + e.printStackTrace(); + } + } - Log.v(TAG, "Finished sorting the bus stop overlay, now applying them"); + overlays.put("BusStops", busStopOverlay); - mapView.invalidate(); + Log.v(TAG, "Applyed the site overlay, now sorting them"); - Log.i(TAG, "Finished loading bus stop overlay " + (System.currentTimeMillis() - startTime)); - } - }; + synchronized (mapView.getOverlays()) { + mapView.getOverlays().add(busStopOverlay); + Collections.sort(mapView.getOverlays(), comparator); + } + } - while (utilityOverlayCreation != null || routeOverlayCreation != null || siteOverlayCreation != null || buildingOverlayCreation != null - || busStopOverlayCreation != null) { - if (utilityOverlayCreation != null && !utilityOverlayCreation.isAlive()) { - mapView.post(utilityOverlayApplication); - utilityOverlayCreation = null; - } + Log.i(TAG, "Begining the creation of the bus stop overlay"); - if (routeOverlayCreation != null && !routeOverlayCreation.isAlive()) { - mapView.post(routeOverlayApplication); - routeOverlayCreation = null; - } + busStopOverlay.setRoutes(0, activityPrefs.getBoolean("Bus Stops:U1", false)); + busStopOverlay.setRoutes(1, activityPrefs.getBoolean("Bus Stops:U1N", false)); + busStopOverlay.setRoutes(2, activityPrefs.getBoolean("Bus Stops:U2", false)); + busStopOverlay.setRoutes(3, activityPrefs.getBoolean("Bus Stops:U6", false)); + busStopOverlay.setRoutes(4, activityPrefs.getBoolean("Bus Stops:U9", false)); - if (siteOverlayCreation != null && !siteOverlayCreation.isAlive()) { - mapView.post(siteOverlayApplication); - siteOverlayCreation = null; - } + Log.i(TAG, "Finished creating the bus stops overlay " + (System.currentTimeMillis() - startTime)); - if (buildingOverlayCreation != null && !buildingOverlayCreation.isAlive()) { - mapView.post(buildingOverlayApplication); - buildingOverlayCreation = null; - } + mapView.postInvalidate(); - if (busStopOverlayCreation != null && !busStopOverlayCreation.isAlive()) { - mapView.post(busStopOverlayApplication); - busStopOverlayCreation = null; + Log.i(TAG, "Finished showing bus stop overlays at " + (System.currentTimeMillis() - startTime)); } - - Thread.yield(); - } - + }).start(); } @Override @@ -1132,38 +1011,31 @@ public class SouthamptonUniversityMapActivity extends OrmLiteBaseActivity<Databa } else if (key.equals("liveBusTimesEnabled")) { // Noting to do here atm } else if (key.contains("Bus Stops")) { - busStopOverlay.setRoutes(0, prefs.getBoolean("Bus Stops:U1", false)); - busStopOverlay.setRoutes(1, prefs.getBoolean("Bus Stops:U1N", false)); - busStopOverlay.setRoutes(2, prefs.getBoolean("Bus Stops:U2", false)); - busStopOverlay.setRoutes(3, prefs.getBoolean("Bus Stops:U6", false)); - busStopOverlay.setRoutes(4, prefs.getBoolean("Bus Stops:U9", false)); + showBusStopOverlay(); } else if (key.contains("Bus Routes")) { for (BusRoute route : routeOverlays.keySet()) { Log.v(TAG, route.code + " " + key.split(":")[1]); if (route.code.equals(key.split(":")[1])) { - routeOverlays.get(route).setEnabled(prefs.getBoolean(key, false)); - if (route.code.equals("U1")) { - overlays.get("Bus Routes:" + route.code + "E").setEnabled(prefs.getBoolean(key, false)); - } + showRouteOverlay(route); } } } else if (key.contains("Buildings")) { if (key.equals("Buildings:Non-Residential")) { - nonResidentialBuildingOverlay.setEnabled(prefs.getBoolean(key, false)); + showBuildingOverlay(false); } else if (key.equals("Buildings:Residential")) { - residentialBuildingOverlay.setEnabled(prefs.getBoolean(key, false)); + showBuildingOverlay(true); } else { Log.e(TAG, "Wierd building preferences key " + key); } } else if (key.contains("Site Outlines")) { for (Site site : siteOverlays.keySet()) { if (site.name.equals(key.split(":")[1])) { - siteOverlays.get(site).setEnabled(prefs.getBoolean(key, false)); + showSiteOverlay(site); } } } else if (key.contains("Other")) { if (key.contains("Scale Bar")) { - scaleBarOverlay.setEnabled(prefs.getBoolean("Other:Scale Bar", false)); + showUtilityOverlays(); } else if (key.contains("Compass")) { if (prefs.getBoolean("Other:Compass", false)) { myLocationOverlay.enableCompass(); @@ -1214,6 +1086,24 @@ public class SouthamptonUniversityMapActivity extends OrmLiteBaseActivity<Databa epView.setAdapter(mAdapter); epView.setOnChildClickListener(this); + int size; + try { + size = (int) getHelper().getSiteDao().countOf(); + + ArrayList<Site> sites = new ArrayList<Site>(size); + + try { + sites.addAll(getHelper().getSiteDao().queryForAll()); + } catch (SQLException e) { + e.printStackTrace(); + } + siteNames = new String[size]; + for (int i = 0; i < size; i++) { + siteNames[i] = sites.get(i).name; + } + } catch (SQLException e1) { + e1.printStackTrace(); + } } public void setOnItemClickListener(OnChildClickListener onChildClickListener) { |