aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
Diffstat (limited to 'main')
-rw-r--r--main/src/cgeo/geocaching/Settings.java7
-rw-r--r--main/src/cgeo/geocaching/cgeoinit.java9
-rw-r--r--main/src/cgeo/geocaching/maps/AbstractMapSource.java32
-rw-r--r--main/src/cgeo/geocaching/maps/CGeoMap.java14
-rw-r--r--main/src/cgeo/geocaching/maps/MapProviderFactory.java29
-rw-r--r--main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java17
-rw-r--r--main/src/cgeo/geocaching/maps/interfaces/MapProvider.java2
-rw-r--r--main/src/cgeo/geocaching/maps/interfaces/MapSource.java7
-rw-r--r--main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java34
9 files changed, 110 insertions, 41 deletions
diff --git a/main/src/cgeo/geocaching/Settings.java b/main/src/cgeo/geocaching/Settings.java
index e46516f..a9a3f94 100644
--- a/main/src/cgeo/geocaching/Settings.java
+++ b/main/src/cgeo/geocaching/Settings.java
@@ -431,12 +431,7 @@ public final class Settings {
}
public static boolean isValidMapFile() {
- return checkMapfile(getMapFile());
- }
-
- private static boolean checkMapfile(final String mapFileIn) {
-
- return MapsforgeMapProvider.isValidMapFile(mapFileIn);
+ return isValidMapFile(getMapFile());
}
public static boolean isValidMapFile(final String mapFileIn) {
diff --git a/main/src/cgeo/geocaching/cgeoinit.java b/main/src/cgeo/geocaching/cgeoinit.java
index a5f1641..aec2f8e 100644
--- a/main/src/cgeo/geocaching/cgeoinit.java
+++ b/main/src/cgeo/geocaching/cgeoinit.java
@@ -8,6 +8,7 @@ import cgeo.geocaching.connector.gc.Login;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.maps.MapProviderFactory;
+import cgeo.geocaching.maps.interfaces.MapSource;
import cgeo.geocaching.network.Cookies;
import cgeo.geocaching.network.Network;
import cgeo.geocaching.network.Parameters;
@@ -46,6 +47,7 @@ import android.widget.Spinner;
import android.widget.TextView;
import java.io.File;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -551,9 +553,12 @@ public class cgeoinit extends AbstractActivity {
webAuth.setOnClickListener(new webAuth());
// Map source settings
- Collection<String> mapSourceValues = MapProviderFactory.getMapSources().values();
+ Collection<String> mapSourceNames = new ArrayList<String>();
+ for (MapSource mapSource : MapProviderFactory.getMapSources().values()) {
+ mapSourceNames.add(mapSource.getName());
+ }
Spinner mapSourceSelector = (Spinner) findViewById(R.id.mapsource);
- ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, mapSourceValues.toArray(new String[mapSourceValues.size()]));
+ ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, mapSourceNames.toArray(new String[mapSourceNames.size()]));
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mapSourceSelector.setAdapter(adapter);
int mapsource = Settings.getMapSource();
diff --git a/main/src/cgeo/geocaching/maps/AbstractMapSource.java b/main/src/cgeo/geocaching/maps/AbstractMapSource.java
new file mode 100644
index 0000000..3966b60
--- /dev/null
+++ b/main/src/cgeo/geocaching/maps/AbstractMapSource.java
@@ -0,0 +1,32 @@
+package cgeo.geocaching.maps;
+
+import cgeo.geocaching.maps.interfaces.MapProvider;
+import cgeo.geocaching.maps.interfaces.MapSource;
+
+public class AbstractMapSource implements MapSource {
+
+ private final String name;
+ private MapProvider mapProvider;
+
+ public AbstractMapSource(MapProvider mapProvider, final String name) {
+ this.mapProvider = mapProvider;
+ this.name = name;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public boolean isAvailable() {
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ // needed for adapter in selection lists
+ return getName();
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java
index 4414277..99af3e1 100644
--- a/main/src/cgeo/geocaching/maps/CGeoMap.java
+++ b/main/src/cgeo/geocaching/maps/CGeoMap.java
@@ -32,6 +32,7 @@ import cgeo.geocaching.maps.interfaces.MapActivityImpl;
import cgeo.geocaching.maps.interfaces.MapControllerImpl;
import cgeo.geocaching.maps.interfaces.MapItemFactory;
import cgeo.geocaching.maps.interfaces.MapProvider;
+import cgeo.geocaching.maps.interfaces.MapSource;
import cgeo.geocaching.maps.interfaces.MapViewImpl;
import cgeo.geocaching.maps.interfaces.OnMapDragListener;
import cgeo.geocaching.maps.interfaces.OtherCachersOverlayItemImpl;
@@ -558,6 +559,15 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
+ for (Integer mapSourceId : MapProviderFactory.getMapSources().keySet()) {
+ final MenuItem menuItem = menu.findItem(mapSourceId);
+ if (menuItem != null) {
+ final MapSource mapSource = MapProviderFactory.getMapSources().get(mapSourceId);
+ if (mapSource != null) {
+ menuItem.setEnabled(mapSource.isAvailable());
+ }
+ }
+ }
MenuItem item;
try {
@@ -720,9 +730,9 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
return true;
}
default:
- if (MapProviderFactory.isValidSourceId(MapProviderFactory.getMapSourceFromMenuId(id))) {
+ int mapSource = MapProviderFactory.getMapSourceFromMenuId(id);
+ if (MapProviderFactory.isValidSourceId(mapSource)) {
item.setChecked(true);
- int mapSource = MapProviderFactory.getMapSourceFromMenuId(id);
changeMapSource(mapSource);
diff --git a/main/src/cgeo/geocaching/maps/MapProviderFactory.java b/main/src/cgeo/geocaching/maps/MapProviderFactory.java
index 10ca12a..3f10fb3 100644
--- a/main/src/cgeo/geocaching/maps/MapProviderFactory.java
+++ b/main/src/cgeo/geocaching/maps/MapProviderFactory.java
@@ -2,6 +2,7 @@ package cgeo.geocaching.maps;
import cgeo.geocaching.maps.google.GoogleMapProvider;
import cgeo.geocaching.maps.interfaces.MapProvider;
+import cgeo.geocaching.maps.interfaces.MapSource;
import cgeo.geocaching.maps.mapsforge.MapsforgeMapProvider;
import android.view.Menu;
@@ -17,29 +18,33 @@ public class MapProviderFactory {
private static MapProviderFactory instance = null;
private final MapProvider[] mapProviders;
- private SortedMap<Integer, String> mapSources;
+ private SortedMap<Integer, MapSource> mapSources;
private MapProviderFactory() {
// add GoogleMapProvider only if google api is available in order to support x86 android emulator
- boolean googleMaps = true;
- try {
- Class.forName("com.google.android.maps.MapActivity");
- } catch (ClassNotFoundException e) {
- googleMaps = false;
- }
- if (googleMaps) {
+ if (isGoogleMapsInstalled()) {
mapProviders = new MapProvider[] { new GoogleMapProvider(GOOGLEMAP_BASEID), new MapsforgeMapProvider(MFMAP_BASEID) };
}
else {
mapProviders = new MapProvider[] { new MapsforgeMapProvider(MFMAP_BASEID) };
}
- mapSources = new TreeMap<Integer, String>();
+ mapSources = new TreeMap<Integer, MapSource>();
for (MapProvider mp : mapProviders) {
mapSources.putAll(mp.getMapSources());
}
}
+ private static boolean isGoogleMapsInstalled() {
+ boolean googleMaps = true;
+ try {
+ Class.forName("com.google.android.maps.MapActivity");
+ } catch (ClassNotFoundException e) {
+ googleMaps = false;
+ }
+ return googleMaps;
+ }
+
private static synchronized void initInstance() {
if (null == instance) {
instance = new MapProviderFactory();
@@ -53,7 +58,7 @@ public class MapProviderFactory {
return instance;
}
- public static SortedMap<Integer, String> getMapSources() {
+ public static SortedMap<Integer, MapSource> getMapSources() {
return getInstance().mapSources;
}
@@ -102,10 +107,10 @@ public class MapProviderFactory {
}
public static void addMapviewMenuItems(Menu parentMenu, int groupId, int currentSource) {
- SortedMap<Integer, String> mapSources = getInstance().mapSources;
+ SortedMap<Integer, MapSource> mapSources = getInstance().mapSources;
for (int key : mapSources.keySet()) {
- parentMenu.add(groupId, key, 0, mapSources.get(key)).setCheckable(true).setChecked(key == currentSource);
+ parentMenu.add(groupId, key, 0, mapSources.get(key).getName()).setCheckable(true).setChecked(key == currentSource);
}
}
diff --git a/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java b/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java
index 1cccbe3..2253730 100644
--- a/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java
+++ b/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java
@@ -2,9 +2,11 @@ package cgeo.geocaching.maps.google;
import cgeo.geocaching.R;
import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.maps.AbstractMapSource;
import cgeo.geocaching.maps.MapProviderFactory;
import cgeo.geocaching.maps.interfaces.MapItemFactory;
import cgeo.geocaching.maps.interfaces.MapProvider;
+import cgeo.geocaching.maps.interfaces.MapSource;
import com.google.android.maps.MapActivity;
@@ -15,10 +17,10 @@ import java.util.Map;
public class GoogleMapProvider implements MapProvider {
- public final static int MAP = 1;
- public final static int SATELLITE = 2;
+ private final static int MAP = 1;
+ private final static int SATELLITE = 2;
- private final Map<Integer, String> mapSources;
+ private final Map<Integer, MapSource> mapSources;
private int baseId;
private final MapItemFactory mapItemFactory;
@@ -27,16 +29,15 @@ public class GoogleMapProvider implements MapProvider {
baseId = _baseId;
final Resources resources = cgeoapplication.getInstance().getResources();
- mapSources = new HashMap<Integer, String>();
- mapSources.put(baseId + MAP, resources.getString(R.string.map_source_google_map));
- mapSources.put(baseId + SATELLITE, resources.getString(R.string.map_source_google_satellite));
+ 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)));
mapItemFactory = new GoogleMapItemFactory();
}
@Override
- public Map<Integer, String> getMapSources() {
-
+ public Map<Integer, MapSource> getMapSources() {
return mapSources;
}
diff --git a/main/src/cgeo/geocaching/maps/interfaces/MapProvider.java b/main/src/cgeo/geocaching/maps/interfaces/MapProvider.java
index 626a410..ba80512 100644
--- a/main/src/cgeo/geocaching/maps/interfaces/MapProvider.java
+++ b/main/src/cgeo/geocaching/maps/interfaces/MapProvider.java
@@ -13,7 +13,7 @@ import java.util.Map;
*/
public interface MapProvider {
- public Map<Integer, String> getMapSources();
+ public Map<Integer, MapSource> getMapSources();
public boolean isMySource(int sourceId);
diff --git a/main/src/cgeo/geocaching/maps/interfaces/MapSource.java b/main/src/cgeo/geocaching/maps/interfaces/MapSource.java
new file mode 100644
index 0000000..4e8c96e
--- /dev/null
+++ b/main/src/cgeo/geocaching/maps/interfaces/MapSource.java
@@ -0,0 +1,7 @@
+package cgeo.geocaching.maps.interfaces;
+
+public interface MapSource {
+ public String getName();
+
+ public boolean isAvailable();
+}
diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java
index 026dd50..fcb526a 100644
--- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java
+++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java
@@ -3,9 +3,11 @@ 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.MapProviderFactory;
import cgeo.geocaching.maps.interfaces.MapItemFactory;
import cgeo.geocaching.maps.interfaces.MapProvider;
+import cgeo.geocaching.maps.interfaces.MapSource;
import cgeo.geocaching.maps.mapsforge.v024.MapsforgeMapActivity024;
import cgeo.geocaching.maps.mapsforge.v024.MapsforgeMapItemFactory024;
@@ -22,11 +24,11 @@ import java.util.Map;
public class MapsforgeMapProvider implements MapProvider {
- public final static int MAPNIK = 1;
- public final static int CYCLEMAP = 3;
- public final static int OFFLINE = 4;
+ private final static int MAPNIK = 1;
+ final static int CYCLEMAP = 3;
+ final static int OFFLINE = 4;
- private final Map<Integer, String> mapSources;
+ private final Map<Integer, MapSource> mapSources;
private final int baseId;
private boolean oldMap = false;
@@ -36,15 +38,14 @@ public class MapsforgeMapProvider implements MapProvider {
baseId = _baseId;
final Resources resources = cgeoapplication.getInstance().getResources();
- mapSources = new HashMap<Integer, String>();
- mapSources.put(baseId + MAPNIK, resources.getString(R.string.map_source_osm_mapnik));
- mapSources.put(baseId + CYCLEMAP, resources.getString(R.string.map_source_osm_cyclemap));
- mapSources.put(baseId + OFFLINE, resources.getString(R.string.map_source_osm_offline));
+ 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)));
}
@Override
- public Map<Integer, String> getMapSources() {
-
+ public Map<Integer, MapSource> getMapSources() {
return mapSources;
}
@@ -123,8 +124,21 @@ public class MapsforgeMapProvider implements MapProvider {
}
return R.layout.map_mapsforge;
}
+
@Override
public MapItemFactory getMapItemFactory() {
return mapItemFactory;
}
+
+ private final class OfflineMapSource extends AbstractMapSource {
+
+ public OfflineMapSource(MapProvider mapProvider, final String name) {
+ super(mapProvider, name);
+ }
+
+ @Override
+ public boolean isAvailable() {
+ return Settings.isValidMapFile();
+ }
+ }
}