aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBananeweizen <Bananeweizen@gmx.de>2012-05-05 06:34:33 -0700
committerBananeweizen <Bananeweizen@gmx.de>2012-05-05 06:34:33 -0700
commitfaa4b7517b79d8bf0cbb12666d754d5074343c39 (patch)
tree911ae1f0f2face89466642373d7d5d64a3504071
parenta96ff028537bf4f8ee11d798015f3adaeffa9905 (diff)
parent382f769741372593ce62fa0f35f95ce9579d5f72 (diff)
downloadcgeo-faa4b7517b79d8bf0cbb12666d754d5074343c39.zip
cgeo-faa4b7517b79d8bf0cbb12666d754d5074343c39.tar.gz
cgeo-faa4b7517b79d8bf0cbb12666d754d5074343c39.tar.bz2
Merge pull request #1501 from marco-jacob/issue#1494-navDownloadStaticMapItem
Solves Issue #1494
-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/DownloadStaticMapsApp.java46
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java49
-rw-r--r--main/src/cgeo/geocaching/cgeowaypoint.java14
7 files changed, 93 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 df16dff..aab057f 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.GCConnector;
@@ -526,7 +527,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/DownloadStaticMapsApp.java b/main/src/cgeo/geocaching/apps/cache/navi/DownloadStaticMapsApp.java
new file mode 100644
index 0000000..d43cfc9
--- /dev/null
+++ b/main/src/cgeo/geocaching/apps/cache/navi/DownloadStaticMapsApp.java
@@ -0,0 +1,46 @@
+package cgeo.geocaching.apps.cache.navi;
+
+import cgeo.geocaching.IGeoData;
+import cgeo.geocaching.ILogable;
+import cgeo.geocaching.R;
+import cgeo.geocaching.StaticMapsActivity;
+import cgeo.geocaching.cgCache;
+import cgeo.geocaching.cgWaypoint;
+import cgeo.geocaching.activity.ActivityMixin;
+import cgeo.geocaching.geopoint.Geopoint;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+
+class DownloadStaticMapsApp extends AbstractNavigationApp {
+
+ DownloadStaticMapsApp() {
+ super(getString(R.string.cache_menu_download_map_static), null);
+ }
+
+ @Override
+ public boolean isInstalled(Context context) {
+ return true;
+ }
+
+ @Override
+ public boolean invoke(IGeoData geo, Activity activity, cgCache cache, cgWaypoint waypoint, final Geopoint coords) {
+ final ILogable logable = cache != null && cache.getListId() != 0 ? cache : waypoint;
+ final String geocode = logable.getGeocode().toUpperCase();
+ if (geocode == null) {
+ ActivityMixin.showToast(activity, getString(R.string.err_detail_no_map_static));
+ return true;
+ }
+
+ final Intent intent = new Intent(activity, StaticMapsActivity.class);
+ intent.putExtra("download", true);
+ intent.putExtra("geocode", geocode);
+ if (waypoint != null) {
+ intent.putExtra("waypoint", waypoint.getId());
+ }
+ activity.startActivity(intent);
+
+ return true;
+ }
+}
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 4b22ad5..4874f1b 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> {
@@ -331,11 +334,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);
}
}