diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2012-05-03 08:07:17 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2012-05-03 08:07:17 +0200 |
| commit | 9e648413525468d3786a65f35d32b743fb7220ba (patch) | |
| tree | 129b68dd1a5ea7a8922bb5f7138845c67d01cf20 | |
| parent | eaf6510ac477253f4a593635534cfe6ed74a919b (diff) | |
| download | cgeo-9e648413525468d3786a65f35d32b743fb7220ba.zip cgeo-9e648413525468d3786a65f35d32b743fb7220ba.tar.gz cgeo-9e648413525468d3786a65f35d32b743fb7220ba.tar.bz2 | |
refactoring: remove publicly shared constants in map implementation
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); |
