aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2012-05-03 08:07:17 +0200
committerBananeweizen <bananeweizen@gmx.de>2012-05-03 08:07:17 +0200
commit9e648413525468d3786a65f35d32b743fb7220ba (patch)
tree129b68dd1a5ea7a8922bb5f7138845c67d01cf20
parenteaf6510ac477253f4a593635534cfe6ed74a919b (diff)
downloadcgeo-9e648413525468d3786a65f35d32b743fb7220ba.zip
cgeo-9e648413525468d3786a65f35d32b743fb7220ba.tar.gz
cgeo-9e648413525468d3786a65f35d32b743fb7220ba.tar.bz2
refactoring: remove publicly shared constants in map implementation
-rw-r--r--main/src/cgeo/geocaching/maps/AbstractMapProvider.java13
-rw-r--r--main/src/cgeo/geocaching/maps/AbstractMapSource.java7
-rw-r--r--main/src/cgeo/geocaching/maps/CGeoMap.java2
-rw-r--r--main/src/cgeo/geocaching/maps/MapProviderFactory.java4
-rw-r--r--main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java41
-rw-r--r--main/src/cgeo/geocaching/maps/interfaces/MapSource.java2
-rw-r--r--main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java26
-rw-r--r--main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapSource.java21
-rw-r--r--main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java14
9 files changed, 87 insertions, 43 deletions
diff --git a/main/src/cgeo/geocaching/maps/AbstractMapProvider.java b/main/src/cgeo/geocaching/maps/AbstractMapProvider.java
new file mode 100644
index 0000000..273c9a8
--- /dev/null
+++ b/main/src/cgeo/geocaching/maps/AbstractMapProvider.java
@@ -0,0 +1,13 @@
+package cgeo.geocaching.maps;
+
+import cgeo.geocaching.maps.interfaces.MapProvider;
+import cgeo.geocaching.maps.interfaces.MapSource;
+
+public abstract class AbstractMapProvider implements MapProvider {
+
+ @Override
+ public boolean isMySource(int sourceId) {
+ final MapSource source = MapProviderFactory.getMapSource(sourceId);
+ return source != null && source.hasMapProvider(this);
+ }
+}
diff --git a/main/src/cgeo/geocaching/maps/AbstractMapSource.java b/main/src/cgeo/geocaching/maps/AbstractMapSource.java
index 3966b60..b18e0ce 100644
--- a/main/src/cgeo/geocaching/maps/AbstractMapSource.java
+++ b/main/src/cgeo/geocaching/maps/AbstractMapSource.java
@@ -3,7 +3,7 @@ package cgeo.geocaching.maps;
import cgeo.geocaching.maps.interfaces.MapProvider;
import cgeo.geocaching.maps.interfaces.MapSource;
-public class AbstractMapSource implements MapSource {
+public abstract class AbstractMapSource implements MapSource {
private final String name;
private MapProvider mapProvider;
@@ -29,4 +29,9 @@ public class AbstractMapSource implements MapSource {
return getName();
}
+ @Override
+ public boolean hasMapProvider(MapProvider mapProvider) {
+ return this.mapProvider.equals(mapProvider);
+ }
+
}
diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java
index 99af3e1..9531dd6 100644
--- a/main/src/cgeo/geocaching/maps/CGeoMap.java
+++ b/main/src/cgeo/geocaching/maps/CGeoMap.java
@@ -562,7 +562,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
for (Integer mapSourceId : MapProviderFactory.getMapSources().keySet()) {
final MenuItem menuItem = menu.findItem(mapSourceId);
if (menuItem != null) {
- final MapSource mapSource = MapProviderFactory.getMapSources().get(mapSourceId);
+ final MapSource mapSource = MapProviderFactory.getMapSource(mapSourceId);
if (mapSource != null) {
menuItem.setEnabled(mapSource.isAvailable());
}
diff --git a/main/src/cgeo/geocaching/maps/MapProviderFactory.java b/main/src/cgeo/geocaching/maps/MapProviderFactory.java
index 3f10fb3..3fb6ed0 100644
--- a/main/src/cgeo/geocaching/maps/MapProviderFactory.java
+++ b/main/src/cgeo/geocaching/maps/MapProviderFactory.java
@@ -117,4 +117,8 @@ public class MapProviderFactory {
public static int getMapSourceFromMenuId(int menuId) {
return menuId;
}
+
+ public static MapSource getMapSource(int sourceId) {
+ return getInstance().mapSources.get(sourceId);
+ }
}
diff --git a/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java b/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java
index 2253730..e13897f 100644
--- a/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java
+++ b/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java
@@ -2,6 +2,7 @@ package cgeo.geocaching.maps.google;
import cgeo.geocaching.R;
import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.maps.AbstractMapProvider;
import cgeo.geocaching.maps.AbstractMapSource;
import cgeo.geocaching.maps.MapProviderFactory;
import cgeo.geocaching.maps.interfaces.MapItemFactory;
@@ -15,7 +16,7 @@ import android.content.res.Resources;
import java.util.HashMap;
import java.util.Map;
-public class GoogleMapProvider implements MapProvider {
+public final class GoogleMapProvider extends AbstractMapProvider {
private final static int MAP = 1;
private final static int SATELLITE = 2;
@@ -30,8 +31,8 @@ public class GoogleMapProvider implements MapProvider {
final Resources resources = cgeoapplication.getInstance().getResources();
mapSources = new HashMap<Integer, MapSource>();
- mapSources.put(baseId + MAP, new AbstractMapSource(this, resources.getString(R.string.map_source_google_map)));
- mapSources.put(baseId + SATELLITE, new AbstractMapSource(this, resources.getString(R.string.map_source_google_satellite)));
+ mapSources.put(baseId + MAP, new GoogleMapSource(this, resources.getString(R.string.map_source_google_map)));
+ mapSources.put(baseId + SATELLITE, new GoogleMapSatelliteSource(this, resources.getString(R.string.map_source_google_satellite)));
mapItemFactory = new GoogleMapItemFactory();
}
@@ -41,20 +42,9 @@ public class GoogleMapProvider implements MapProvider {
return mapSources;
}
- @Override
- public boolean isMySource(int sourceId) {
- return sourceId >= baseId + MAP && sourceId <= baseId + SATELLITE;
- }
-
- public static boolean isSatelliteSource(int sourceId) {
- MapProvider mp = MapProviderFactory.getMapProvider(sourceId);
- if (mp instanceof GoogleMapProvider) {
- GoogleMapProvider gp = (GoogleMapProvider) mp;
- if (gp.baseId + SATELLITE == sourceId) {
- return true;
- }
- }
- return false;
+ public static boolean isSatelliteSource(final int sourceId) {
+ final MapSource mapSource = MapProviderFactory.getMapSource(sourceId);
+ return mapSource != null && mapSource instanceof GoogleMapSatelliteSource;
}
@Override
@@ -81,4 +71,21 @@ public class GoogleMapProvider implements MapProvider {
public boolean isSameActivity(int sourceId1, int sourceId2) {
return true;
}
+
+ private static class GoogleMapSource extends AbstractMapSource {
+
+ public GoogleMapSource(final MapProvider mapProvider, final String name) {
+ super(mapProvider, name);
+ }
+
+ }
+
+ private static final class GoogleMapSatelliteSource extends GoogleMapSource {
+
+ public GoogleMapSatelliteSource(MapProvider mapProvider, String name) {
+ super(mapProvider, name);
+ }
+
+ }
+
}
diff --git a/main/src/cgeo/geocaching/maps/interfaces/MapSource.java b/main/src/cgeo/geocaching/maps/interfaces/MapSource.java
index 4e8c96e..bdbe5fe 100644
--- a/main/src/cgeo/geocaching/maps/interfaces/MapSource.java
+++ b/main/src/cgeo/geocaching/maps/interfaces/MapSource.java
@@ -4,4 +4,6 @@ public interface MapSource {
public String getName();
public boolean isAvailable();
+
+ public boolean hasMapProvider(MapProvider mapProvider);
}
diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java
index fcb526a..7eeff76 100644
--- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java
+++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java
@@ -3,7 +3,7 @@ package cgeo.geocaching.maps.mapsforge;
import cgeo.geocaching.R;
import cgeo.geocaching.Settings;
import cgeo.geocaching.cgeoapplication;
-import cgeo.geocaching.maps.AbstractMapSource;
+import cgeo.geocaching.maps.AbstractMapProvider;
import cgeo.geocaching.maps.MapProviderFactory;
import cgeo.geocaching.maps.interfaces.MapItemFactory;
import cgeo.geocaching.maps.interfaces.MapProvider;
@@ -12,6 +12,7 @@ import cgeo.geocaching.maps.mapsforge.v024.MapsforgeMapActivity024;
import cgeo.geocaching.maps.mapsforge.v024.MapsforgeMapItemFactory024;
import org.apache.commons.lang3.StringUtils;
+import org.mapsforge.android.maps.mapgenerator.MapGeneratorInternal;
import org.mapsforge.map.reader.MapDatabase;
import org.mapsforge.map.reader.header.FileOpenResult;
@@ -22,11 +23,11 @@ import java.io.File;
import java.util.HashMap;
import java.util.Map;
-public class MapsforgeMapProvider implements MapProvider {
+public final class MapsforgeMapProvider extends AbstractMapProvider {
private final static int MAPNIK = 1;
- final static int CYCLEMAP = 3;
- final static int OFFLINE = 4;
+ private final static int CYCLEMAP = 3;
+ private final static int OFFLINE = 4;
private final Map<Integer, MapSource> mapSources;
@@ -39,9 +40,9 @@ public class MapsforgeMapProvider implements MapProvider {
final Resources resources = cgeoapplication.getInstance().getResources();
mapSources = new HashMap<Integer, MapSource>();
- mapSources.put(baseId + MAPNIK, new AbstractMapSource(this, resources.getString(R.string.map_source_osm_mapnik)));
- mapSources.put(baseId + CYCLEMAP, new AbstractMapSource(this, resources.getString(R.string.map_source_osm_cyclemap)));
- mapSources.put(baseId + OFFLINE, new OfflineMapSource(this, resources.getString(R.string.map_source_osm_offline)));
+ mapSources.put(baseId + MAPNIK, new MapsforgeMapSource(this, resources.getString(R.string.map_source_osm_mapnik), MapGeneratorInternal.MAPNIK));
+ mapSources.put(baseId + CYCLEMAP, new MapsforgeMapSource(this, resources.getString(R.string.map_source_osm_cyclemap), MapGeneratorInternal.OPENCYCLEMAP));
+ mapSources.put(baseId + OFFLINE, new OfflineMapSource(this, resources.getString(R.string.map_source_osm_offline), MapGeneratorInternal.DATABASE_RENDERER));
}
@Override
@@ -49,11 +50,6 @@ public class MapsforgeMapProvider implements MapProvider {
return mapSources;
}
- @Override
- public boolean isMySource(int sourceId) {
- return sourceId >= baseId + MAPNIK && sourceId <= baseId + OFFLINE;
- }
-
public static int getMapsforgeSource(int sourceId) {
MapProvider mp = MapProviderFactory.getMapProvider(sourceId);
if (mp instanceof MapsforgeMapProvider) {
@@ -130,10 +126,10 @@ public class MapsforgeMapProvider implements MapProvider {
return mapItemFactory;
}
- private final class OfflineMapSource extends AbstractMapSource {
+ private static final class OfflineMapSource extends MapsforgeMapSource {
- public OfflineMapSource(MapProvider mapProvider, final String name) {
- super(mapProvider, name);
+ public OfflineMapSource(MapProvider mapProvider, final String name, MapGeneratorInternal generator) {
+ super(mapProvider, name, generator);
}
@Override
diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapSource.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapSource.java
new file mode 100644
index 0000000..e59750f
--- /dev/null
+++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapSource.java
@@ -0,0 +1,21 @@
+package cgeo.geocaching.maps.mapsforge;
+
+import cgeo.geocaching.maps.AbstractMapSource;
+import cgeo.geocaching.maps.interfaces.MapProvider;
+
+import org.mapsforge.android.maps.mapgenerator.MapGeneratorInternal;
+
+class MapsforgeMapSource extends AbstractMapSource {
+
+ private final MapGeneratorInternal generator;
+
+ public MapsforgeMapSource(MapProvider mapProvider, String name, MapGeneratorInternal generator) {
+ super(mapProvider, name);
+ this.generator = generator;
+ }
+
+ public MapGeneratorInternal getGenerator() {
+ return generator;
+ }
+
+} \ No newline at end of file
diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java
index 1e37087..6278c90 100644
--- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java
+++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java
@@ -4,6 +4,7 @@ import cgeo.geocaching.R;
import cgeo.geocaching.Settings;
import cgeo.geocaching.geopoint.Viewport;
import cgeo.geocaching.maps.CachesOverlay;
+import cgeo.geocaching.maps.MapProviderFactory;
import cgeo.geocaching.maps.OtherCachersOverlay;
import cgeo.geocaching.maps.PositionOverlay;
import cgeo.geocaching.maps.ScaleOverlay;
@@ -11,6 +12,7 @@ import cgeo.geocaching.maps.interfaces.GeneralOverlay;
import cgeo.geocaching.maps.interfaces.GeoPointImpl;
import cgeo.geocaching.maps.interfaces.MapControllerImpl;
import cgeo.geocaching.maps.interfaces.MapProjectionImpl;
+import cgeo.geocaching.maps.interfaces.MapSource;
import cgeo.geocaching.maps.interfaces.MapViewImpl;
import cgeo.geocaching.maps.interfaces.OnMapDragListener;
import cgeo.geocaching.maps.interfaces.OverlayImpl;
@@ -176,15 +178,9 @@ public class MapsforgeMapView extends MapView implements MapViewImpl {
public void setMapSource() {
MapGeneratorInternal newMapType = MapGeneratorInternal.MAPNIK;
- switch (MapsforgeMapProvider.getMapsforgeSource(Settings.getMapSource())) {
- case MapsforgeMapProvider.CYCLEMAP:
- newMapType = MapGeneratorInternal.OPENCYCLEMAP;
- break;
- case MapsforgeMapProvider.OFFLINE:
- newMapType = MapGeneratorInternal.DATABASE_RENDERER;
- break;
- default:
- newMapType = MapGeneratorInternal.MAPNIK;
+ final MapSource mapSource = MapProviderFactory.getMapSource(Settings.getMapSource());
+ if (mapSource instanceof MapsforgeMapSource) {
+ newMapType = ((MapsforgeMapSource) mapSource).getGenerator();
}
MapGenerator mapGenerator = MapGeneratorFactory.createMapGenerator(newMapType);