diff options
author | Marco Jacob <mjacob@union06.de> | 2012-05-04 22:49:50 +0200 |
---|---|---|
committer | Marco Jacob <mjacob@union06.de> | 2012-05-04 22:49:50 +0200 |
commit | 7424d471c8b57dbce2acf79c09660bf1a7222b3e (patch) | |
tree | 6fbe0c4c45461e4f966a534173e4683fb3367cfa | |
parent | 84c6bd6cc358b2cde2926a62990e4c151c47d6d1 (diff) | |
download | cgeo-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.xml | 3 | ||||
-rw-r--r-- | main/res/values/strings.xml | 1 | ||||
-rw-r--r-- | main/src/cgeo/geocaching/CacheDetailActivity.java | 9 | ||||
-rw-r--r-- | main/src/cgeo/geocaching/StaticMapsActivity.java | 30 | ||||
-rw-r--r-- | main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java | 49 | ||||
-rw-r--r-- | main/src/cgeo/geocaching/cgeowaypoint.java | 14 |
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); } } |