aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Jacob <mjacob@union06.de>2012-05-04 22:49:50 +0200
committerMarco Jacob <mjacob@union06.de>2012-05-04 22:49:50 +0200
commit7424d471c8b57dbce2acf79c09660bf1a7222b3e (patch)
tree6fbe0c4c45461e4f966a534173e4683fb3367cfa
parent84c6bd6cc358b2cde2926a62990e4c151c47d6d1 (diff)
downloadcgeo-7424d471c8b57dbce2acf79c09660bf1a7222b3e.zip
cgeo-7424d471c8b57dbce2acf79c09660bf1a7222b3e.tar.gz
cgeo-7424d471c8b57dbce2acf79c09660bf1a7222b3e.tar.bz2
solves issue #1494 to download static maps on demand without settings
-rw-r--r--main/res/values-de/strings.xml3
-rw-r--r--main/res/values/strings.xml1
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java9
-rw-r--r--main/src/cgeo/geocaching/StaticMapsActivity.java30
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java49
-rw-r--r--main/src/cgeo/geocaching/cgeowaypoint.java14
6 files changed, 47 insertions, 59 deletions
diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml
index 8496a83..a20577c 100644
--- a/main/res/values-de/strings.xml
+++ b/main/res/values-de/strings.xml
@@ -519,7 +519,8 @@
<string name="cache_menu_tbt">Google Maps Navigation</string>
<string name="cache_menu_radar">Radar</string>
<string name="cache_menu_map">Karte</string>
- <string name="cache_menu_map_static">Statische Karte</string>
+ <string name="cache_menu_map_static">Statische Karten</string>
+ <string name="cache_menu_download_map_static">Statische Karten speichern</string>
<string name="cache_menu_rmaps">Rmaps</string>
<string name="cache_menu_map_ext">Auf ext. Karte zeigen</string>
<string name="cache_menu_browser">Im Browser öffnen</string>
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml
index 87924b4..9a56a1f 100644
--- a/main/res/values/strings.xml
+++ b/main/res/values/strings.xml
@@ -533,6 +533,7 @@
<string name="cache_menu_radar">Radar</string>
<string name="cache_menu_map">Map</string>
<string name="cache_menu_map_static">Static Maps</string>
+ <string name="cache_menu_download_map_static">Download Static Maps</string>
<string name="cache_menu_rmaps">Rmaps</string>
<string name="cache_menu_map_ext">Show on ext. map</string>
<string name="cache_menu_streetview">Street View</string>
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java
index 885a6b5..a160c8c 100644
--- a/main/src/cgeo/geocaching/CacheDetailActivity.java
+++ b/main/src/cgeo/geocaching/CacheDetailActivity.java
@@ -5,6 +5,7 @@ import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.activity.Progress;
import cgeo.geocaching.apps.cache.GeneralAppsFactory;
import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
+import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum;
import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.connector.IConnector;
import cgeo.geocaching.connector.gc.GCParser;
@@ -521,7 +522,13 @@ public class CacheDetailActivity extends AbstractActivity {
menu.add(0, MENU_DEFAULT_NAVIGATION, 0, NavigationAppFactory.getDefaultNavigationApplication(this).getName()).setIcon(R.drawable.ic_menu_compass); // default navigation tool
final SubMenu subMenu = menu.addSubMenu(1, 0, 0, res.getString(R.string.cache_menu_navigate)).setIcon(R.drawable.ic_menu_mapmode);
- NavigationAppFactory.addMenuItems(subMenu, this);
+ List<NavigationAppsEnum> filter = new ArrayList<NavigationAppsEnum>(1);
+ if (StaticMapsProvider.doesExistStaticMapForCache(cache.getGeocode())) {
+ filter.add(NavigationAppsEnum.DOWNLOAD_STATIC_MAPS);
+ } else {
+ filter.add(NavigationAppsEnum.STATIC_MAP);
+ }
+ NavigationAppFactory.addMenuItems(subMenu, this, filter);
GeneralAppsFactory.addMenuItems(subMenu, this, cache);
menu.add(1, MENU_CALENDAR, 0, res.getString(R.string.cache_menu_event)).setIcon(R.drawable.ic_menu_agenda); // add event to calendar
diff --git a/main/src/cgeo/geocaching/StaticMapsActivity.java b/main/src/cgeo/geocaching/StaticMapsActivity.java
index a8495ee..ddda8a4 100644
--- a/main/src/cgeo/geocaching/StaticMapsActivity.java
+++ b/main/src/cgeo/geocaching/StaticMapsActivity.java
@@ -6,9 +6,7 @@ import cgeo.geocaching.utils.Log;
import org.apache.commons.collections.CollectionUtils;
-import android.app.AlertDialog;
import android.app.ProgressDialog;
-import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
@@ -27,6 +25,7 @@ public class StaticMapsActivity extends AbstractActivity {
private static final int MENU_REFRESH = 1;
private final List<Bitmap> maps = new ArrayList<Bitmap>();
+ private boolean download = false;
private Integer waypoint_id = null;
private String geocode = null;
private LayoutInflater inflater = null;
@@ -42,10 +41,10 @@ public class StaticMapsActivity extends AbstractActivity {
}
try {
if (CollectionUtils.isEmpty(maps)) {
- if ((waypoint_id != null && Settings.isStoreOfflineWpMaps()) || (waypoint_id == null && Settings.isStoreOfflineMaps())) {
- final AlertDialog.Builder builder = new AlertDialog.Builder(StaticMapsActivity.this);
- builder.setTitle(R.string.map_static_title).setMessage(R.string.err_detail_ask_store_map_static).setPositiveButton(android.R.string.yes, dialogClickListener)
- .setNegativeButton(android.R.string.no, dialogClickListener).show();
+ if (download) {
+ downloadStaticMaps();
+ startActivity(StaticMapsActivity.this.getIntent());
+ finish();
} else {
showToast(res.getString(R.string.err_detail_not_load_map_static));
finish();
@@ -59,24 +58,6 @@ public class StaticMapsActivity extends AbstractActivity {
}
};
- DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- switch (which) {
- case DialogInterface.BUTTON_POSITIVE:
- downloadStaticMaps();
- startActivity(StaticMapsActivity.this.getIntent());
- break;
-
- case DialogInterface.BUTTON_NEGATIVE:
- showToast(res.getString(R.string.err_detail_not_load_map_static));
- break;
- }
- finish();
- }
- };
-
/**
* Shows the static maps.
*/
@@ -112,6 +93,7 @@ public class StaticMapsActivity extends AbstractActivity {
// try to get data from extras
if (extras != null) {
+ download = extras.getBoolean("download", false);
geocode = extras.getString("geocode");
if (extras.containsKey("waypoint")) {
waypoint_id = extras.getInt("waypoint");
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java
index e0c773c..9caa856 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java
@@ -4,10 +4,10 @@ import cgeo.geocaching.IGeoData;
import cgeo.geocaching.R;
import cgeo.geocaching.Settings;
import cgeo.geocaching.StaticMapsProvider;
-import cgeo.geocaching.apps.AbstractAppFactory;
import cgeo.geocaching.cgCache;
import cgeo.geocaching.cgWaypoint;
import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.apps.AbstractAppFactory;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.utils.Log;
@@ -34,20 +34,22 @@ public final class NavigationAppFactory extends AbstractAppFactory {
INTERNAL_MAP(new InternalMap(), 2),
/** The internal static map activity */
STATIC_MAP(new StaticMapApp(), 3),
+ /** Download static maps on demand */
+ DOWNLOAD_STATIC_MAPS(new DownloadStaticMapsApp(), 4),
/** The external Locus app */
- LOCUS(new LocusApp(), 4),
+ LOCUS(new LocusApp(), 5),
/** The external RMaps app */
- RMAPS(new RMapsApp(), 5),
+ RMAPS(new RMapsApp(), 6),
/** Google Maps */
- GOOGLE_MAPS(new GoogleMapsApp(), 6),
+ GOOGLE_MAPS(new GoogleMapsApp(), 7),
/** Google Navigation */
- GOOGLE_NAVIGATION(new GoogleNavigationApp(), 7),
+ GOOGLE_NAVIGATION(new GoogleNavigationApp(), 8),
/** Google Streetview */
- GOOGLE_STREETVIEW(new StreetviewApp(), 8),
+ GOOGLE_STREETVIEW(new StreetviewApp(), 9),
/** The external OruxMaps app */
- ORUX_MAPS(new OruxMapsApp(), 9),
+ ORUX_MAPS(new OruxMapsApp(), 10),
/** The external navigon app */
- NAVIGON(new NavigonApp(), 10);
+ NAVIGON(new NavigonApp(), 11);
NavigationAppsEnum(NavigationApp app, int id) {
this.app = app;
@@ -126,6 +128,10 @@ public final class NavigationAppFactory extends AbstractAppFactory {
if (hasStaticMaps) {
items.add(navApp);
}
+ } else if (NavigationAppsEnum.DOWNLOAD_STATIC_MAPS.id == navApp.id) {
+ if (!hasStaticMaps) {
+ items.add(navApp);
+ }
} else if ((showInternalMap || !(navApp.app instanceof InternalMap)) &&
(showDefaultNavigation || defaultNavigationTool != navApp.id)) {
items.add(navApp);
@@ -185,20 +191,6 @@ public final class NavigationAppFactory extends AbstractAppFactory {
*/
private static final int MENU_ITEM_OFFSET = 12345;
- /**
- * Adds the installed navigation tools to the given menu.
- * Use {@link #onMenuItemSelected(MenuItem, IGeoData, Activity, cgCache, cgWaypoint, Geopoint)} on
- * selection event to start the selected navigation tool.
- *
- * <b>Only use this way if {@link #showNavigationMenu(IGeoData, Activity, cgCache, cgWaypoint, Geopoint)}
- * is not suitable for the given usecase.</b>
- *
- * @param menu
- * @param activity
- */
- public static void addMenuItems(final Menu menu, final Activity activity) {
- addMenuItems(menu, activity, true, false);
- }
/**
* Adds the installed navigation tools to the given menu.
@@ -211,17 +203,14 @@ public final class NavigationAppFactory extends AbstractAppFactory {
*
* @param menu
* @param activity
- * @param showInternalMap
- * @param showDefaultNavigation
+ * @param filter
*/
- public static void addMenuItems(final Menu menu, final Activity activity,
- final boolean showInternalMap, final boolean showDefaultNavigation) {
- final int defaultNavigationTool = Settings.getDefaultNavigationTool();
+ public static void addMenuItems(final Menu menu, final Activity activity, final List<NavigationAppsEnum> filter) {
for (NavigationAppsEnum navApp : getInstalledNavigationApps(activity)) {
- if ((showInternalMap || !(navApp.app instanceof InternalMap)) &&
- (showDefaultNavigation || defaultNavigationTool != navApp.id)) {
- menu.add(0, MENU_ITEM_OFFSET + navApp.id, 0, navApp.app.getName());
+ if (filter.contains(navApp)) {
+ continue;
}
+ menu.add(0, MENU_ITEM_OFFSET + navApp.id, 0, navApp.app.getName());
}
}
diff --git a/main/src/cgeo/geocaching/cgeowaypoint.java b/main/src/cgeo/geocaching/cgeowaypoint.java
index ca3182d..256652f 100644
--- a/main/src/cgeo/geocaching/cgeowaypoint.java
+++ b/main/src/cgeo/geocaching/cgeowaypoint.java
@@ -2,6 +2,7 @@ package cgeo.geocaching;
import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
+import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum;
import cgeo.geocaching.enumerations.LoadFlags;
import cgeo.geocaching.enumerations.LoadFlags.SaveFlag;
import cgeo.geocaching.utils.IObserver;
@@ -26,7 +27,9 @@ import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
+import java.util.ArrayList;
import java.util.EnumSet;
+import java.util.List;
public class cgeowaypoint extends AbstractActivity implements IObserver<IGeoData> {
@@ -332,11 +335,16 @@ public class cgeowaypoint extends AbstractActivity implements IObserver<IGeoData
}
@Override
- public void onCreateContextMenu(ContextMenu menu, View v,
- ContextMenuInfo menuInfo) {
+ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
if (navigationPossible()) {
menu.setHeaderTitle(res.getString(R.string.cache_menu_navigate));
- NavigationAppFactory.addMenuItems(menu, this);
+ List<NavigationAppsEnum> filter = new ArrayList<NavigationAppsEnum>(1);
+ if (StaticMapsProvider.doesExistStaticMapForWaypoint(waypoint.getGeocode(), waypoint.getId())) {
+ filter.add(NavigationAppsEnum.DOWNLOAD_STATIC_MAPS);
+ } else {
+ filter.add(NavigationAppsEnum.STATIC_MAP);
+ }
+ NavigationAppFactory.addMenuItems(menu, this, filter);
}
}