aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/apps
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/apps')
-rw-r--r--main/src/cgeo/geocaching/apps/AbstractApp.java19
-rw-r--r--main/src/cgeo/geocaching/apps/AbstractLocusApp.java22
-rw-r--r--main/src/cgeo/geocaching/apps/App.java10
-rw-r--r--main/src/cgeo/geocaching/apps/cache/AbstractGeneralApp.java4
-rw-r--r--main/src/cgeo/geocaching/apps/cache/CacheBeaconApp.java2
-rw-r--r--main/src/cgeo/geocaching/apps/cache/GccApp.java2
-rw-r--r--main/src/cgeo/geocaching/apps/cache/WhereYouGoApp.java4
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/AbstractPointNavigationApp.java24
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java10
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/CompassApp.java8
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/DownloadStaticMapsApp.java2
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsApp.java2
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java6
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java10
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/InternalMap.java2
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/LocusApp.java9
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java69
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/NavigonApp.java2
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/OruxMapsApp.java2
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/RMapsApp.java2
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/RadarApp.java2
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/StaticMapApp.java4
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/StreetviewApp.java6
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/SygicNavigationApp.java2
-rw-r--r--main/src/cgeo/geocaching/apps/cachelist/AbstractLocusCacheListApp.java (renamed from main/src/cgeo/geocaching/apps/cachelist/LocusCacheListApp.java)10
-rw-r--r--main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java50
-rw-r--r--main/src/cgeo/geocaching/apps/cachelist/InternalCacheListMap.java4
-rw-r--r--main/src/cgeo/geocaching/apps/cachelist/LocusExportCacheListApp.java11
-rw-r--r--main/src/cgeo/geocaching/apps/cachelist/LocusShowCacheListApp.java11
29 files changed, 164 insertions, 147 deletions
diff --git a/main/src/cgeo/geocaching/apps/AbstractApp.java b/main/src/cgeo/geocaching/apps/AbstractApp.java
index 7b6b3d9..494e245 100644
--- a/main/src/cgeo/geocaching/apps/AbstractApp.java
+++ b/main/src/cgeo/geocaching/apps/AbstractApp.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.apps;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.utils.ProcessUtils;
import org.apache.commons.lang3.StringUtils;
@@ -13,16 +13,21 @@ public abstract class AbstractApp implements App {
private final String packageName;
private final String intent;
private final String name;
+ /**
+ * a unique id, defined in res/values/ids.xml
+ */
+ private final int id;
- protected AbstractApp(final String name, final String intent,
+ protected AbstractApp(final String name, final int id, final String intent,
final String packageName) {
this.name = name;
+ this.id = id;
this.intent = intent;
this.packageName = packageName;
}
- protected AbstractApp(final String name, final String intent) {
- this(name, intent, null);
+ protected AbstractApp(final String name, final int id, final String intent) {
+ this(name, id, intent, null);
}
@Override
@@ -38,7 +43,7 @@ public abstract class AbstractApp implements App {
}
@Override
- public boolean isDefaultNavigationApp() {
+ public boolean isUsableAsDefaultNavigationApp() {
return true;
}
@@ -49,11 +54,11 @@ public abstract class AbstractApp implements App {
@Override
public int getId() {
- return getName().hashCode();
+ return id;
}
protected static String getString(int ressourceId) {
- return cgeoapplication.getInstance().getString(ressourceId);
+ return CgeoApplication.getInstance().getString(ressourceId);
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/AbstractLocusApp.java b/main/src/cgeo/geocaching/apps/AbstractLocusApp.java
index 53620e4..4b524bf 100644
--- a/main/src/cgeo/geocaching/apps/AbstractLocusApp.java
+++ b/main/src/cgeo/geocaching/apps/AbstractLocusApp.java
@@ -1,9 +1,8 @@
package cgeo.geocaching.apps;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
-import cgeo.geocaching.R;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.enumerations.CacheSize;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.WaypointType;
@@ -15,11 +14,11 @@ import menion.android.locus.addon.publiclib.geoData.PointGeocachingData;
import menion.android.locus.addon.publiclib.geoData.PointGeocachingDataWaypoint;
import menion.android.locus.addon.publiclib.geoData.PointsData;
+import org.apache.commons.lang3.time.FastDateFormat;
+
import android.app.Activity;
-import android.content.Intent;
import android.location.Location;
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -30,25 +29,20 @@ import java.util.Locale;
* @see <a href="http://forum.asamm.cz/viewtopic.php?f=29&t=767">Locus forum</a>
*/
public abstract class AbstractLocusApp extends AbstractApp {
- private static final String INTENT = Intent.ACTION_VIEW;
- private static final SimpleDateFormat ISO8601DATE = new SimpleDateFormat("yyyy-MM-dd'T'", Locale.US);
-
- protected AbstractLocusApp() {
- super(getString(R.string.caches_map_locus), INTENT);
- }
+ private static final FastDateFormat ISO8601DATE = FastDateFormat.getInstance("yyyy-MM-dd'T'", Locale.US);
- protected AbstractLocusApp(final String text, final String intent) {
- super(text, intent);
+ protected AbstractLocusApp(final String text, int id, final String intent) {
+ super(text, id, intent);
}
@Override
public boolean isInstalled() {
- return LocusUtils.isLocusAvailable(cgeoapplication.getInstance());
+ return LocusUtils.isLocusAvailable(CgeoApplication.getInstance());
}
/**
* Display a list of caches / waypoints in Locus
- *
+ *
* @param objectsToShow
* which caches/waypoints to show
* @param withCacheWaypoints
diff --git a/main/src/cgeo/geocaching/apps/App.java b/main/src/cgeo/geocaching/apps/App.java
index bc99526..7e70581 100644
--- a/main/src/cgeo/geocaching/apps/App.java
+++ b/main/src/cgeo/geocaching/apps/App.java
@@ -5,14 +5,20 @@ import cgeo.geocaching.Geocache;
public interface App {
public boolean isInstalled();
- public boolean isDefaultNavigationApp();
+ /**
+ * Whether or not an application can be used as the default navigation.
+ */
+ public boolean isUsableAsDefaultNavigationApp();
public String getName();
+ /**
+ * @return the unique ID of the application, defined in res/values/ids.xml
+ */
int getId();
/**
- * whether or not the app can be used with the given cache (may depend on properties of the cache)
+ * Whether or not the app can be used with the given cache (may depend on properties of the cache).
*
* @param cache
* @return
diff --git a/main/src/cgeo/geocaching/apps/cache/AbstractGeneralApp.java b/main/src/cgeo/geocaching/apps/cache/AbstractGeneralApp.java
index fd7d4b5..c4f2723 100644
--- a/main/src/cgeo/geocaching/apps/cache/AbstractGeneralApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/AbstractGeneralApp.java
@@ -9,8 +9,8 @@ import android.content.Intent;
abstract class AbstractGeneralApp extends AbstractApp implements CacheNavigationApp {
- protected AbstractGeneralApp(String name, String packageName) {
- super(name, null, packageName);
+ protected AbstractGeneralApp(final String name, final int id, final String packageName) {
+ super(name, id, null, packageName);
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/cache/CacheBeaconApp.java b/main/src/cgeo/geocaching/apps/cache/CacheBeaconApp.java
index 9cfafb4..34c9074 100644
--- a/main/src/cgeo/geocaching/apps/cache/CacheBeaconApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/CacheBeaconApp.java
@@ -7,7 +7,7 @@ import cgeo.geocaching.enumerations.CacheAttribute;
public class CacheBeaconApp extends AbstractGeneralApp {
public CacheBeaconApp() {
- super(getString(R.string.cache_menu_cachebeacon), "de.fun2code.android.cachebeacon");
+ super(getString(R.string.cache_menu_cachebeacon), R.id.cache_app_cache_beacon, "de.fun2code.android.cachebeacon");
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/cache/GccApp.java b/main/src/cgeo/geocaching/apps/cache/GccApp.java
index 0bbc2dd..4423977 100644
--- a/main/src/cgeo/geocaching/apps/cache/GccApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/GccApp.java
@@ -10,7 +10,7 @@ public class GccApp extends AbstractGeneralApp {
private static final String PACKAGE_PRO = "eisbehr.gcc.pro";
public GccApp() {
- super(getString(R.string.cache_menu_gcc), null);
+ super(getString(R.string.cache_menu_gcc), R.id.cache_app_gcc, null);
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/cache/WhereYouGoApp.java b/main/src/cgeo/geocaching/apps/cache/WhereYouGoApp.java
index 39e1963..79a5975 100644
--- a/main/src/cgeo/geocaching/apps/cache/WhereYouGoApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/WhereYouGoApp.java
@@ -1,12 +1,12 @@
package cgeo.geocaching.apps.cache;
-import cgeo.geocaching.R;
import cgeo.geocaching.Geocache;
+import cgeo.geocaching.R;
import cgeo.geocaching.enumerations.CacheType;
public class WhereYouGoApp extends AbstractGeneralApp {
public WhereYouGoApp() {
- super(getString(R.string.cache_menu_whereyougo), "menion.android.whereyougo");
+ super(getString(R.string.cache_menu_whereyougo), R.id.cache_app_whereyougo, "menion.android.whereyougo");
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/AbstractPointNavigationApp.java b/main/src/cgeo/geocaching/apps/cache/navi/AbstractPointNavigationApp.java
index a3ea57e..75ea056 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/AbstractPointNavigationApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/AbstractPointNavigationApp.java
@@ -1,8 +1,11 @@
package cgeo.geocaching.apps.cache.navi;
import cgeo.geocaching.Geocache;
+import cgeo.geocaching.R;
import cgeo.geocaching.Waypoint;
+import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.apps.AbstractApp;
+import cgeo.geocaching.geopoint.Geopoint;
import android.app.Activity;
@@ -11,21 +14,32 @@ import android.app.Activity;
*/
abstract class AbstractPointNavigationApp extends AbstractApp implements CacheNavigationApp, WaypointNavigationApp, GeopointNavigationApp {
- protected AbstractPointNavigationApp(String name, String intent) {
- super(name, intent);
+ protected AbstractPointNavigationApp(final String name, final int id, final String intent) {
+ super(name, id, intent);
}
- protected AbstractPointNavigationApp(String name, String intent, String packageName) {
- super(name, intent, packageName);
+ protected AbstractPointNavigationApp(final String name, final int id, final String intent, final String packageName) {
+ super(name, id, intent, packageName);
}
@Override
public void navigate(Activity activity, Geocache cache) {
- navigate(activity, cache.getCoords());
+ final Geopoint coords = cache.getCoords();
+ if (coords != null) {
+ navigate(activity, coords);
+ } else {
+ ActivityMixin.showToast(activity, activity.getResources().getString(R.string.err_nav_no_coordinates));
+ }
}
@Override
public void navigate(Activity activity, Waypoint waypoint) {
+ final Geopoint coords = waypoint.getCoords();
+ if (coords != null) {
+ navigate(activity, coords);
+ } else {
+ ActivityMixin.showToast(activity, activity.getResources().getString(R.string.err_nav_no_coordinates));
+ }
navigate(activity, waypoint.getCoords());
}
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java b/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java
index d898d7e..c42c2a2 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java
@@ -1,12 +1,12 @@
package cgeo.geocaching.apps.cache.navi;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.ILogable;
import cgeo.geocaching.R;
import cgeo.geocaching.StaticMapsActivity;
import cgeo.geocaching.StaticMapsProvider;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgData;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.apps.AbstractApp;
@@ -15,8 +15,8 @@ import org.apache.commons.lang3.StringUtils;
import android.app.Activity;
abstract class AbstractStaticMapsApp extends AbstractApp implements CacheNavigationApp, WaypointNavigationApp {
- protected AbstractStaticMapsApp(String name) {
- super(name, null);
+ protected AbstractStaticMapsApp(final String name, final int id) {
+ super(name, id, null);
}
@Override
@@ -25,7 +25,7 @@ abstract class AbstractStaticMapsApp extends AbstractApp implements CacheNavigat
}
@Override
- public boolean isDefaultNavigationApp() {
+ public boolean isUsableAsDefaultNavigationApp() {
return false;
}
@@ -34,7 +34,7 @@ abstract class AbstractStaticMapsApp extends AbstractApp implements CacheNavigat
return false;
}
String geocode = waypoint.getGeocode();
- if (StringUtils.isNotEmpty(geocode) && cgData.isOffline(geocode, null)) {
+ if (StringUtils.isNotEmpty(geocode) && DataStore.isOffline(geocode, null)) {
return StaticMapsProvider.hasStaticMapForWaypoint(geocode, waypoint);
}
return false;
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/CompassApp.java b/main/src/cgeo/geocaching/apps/cache/navi/CompassApp.java
index 47010df..03d2220 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/CompassApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/CompassApp.java
@@ -1,18 +1,17 @@
package cgeo.geocaching.apps.cache.navi;
+import cgeo.geocaching.CompassActivity;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.CompassActivity;
import cgeo.geocaching.geopoint.Geopoint;
-import cgeo.geocaching.ui.Formatter;
import android.app.Activity;
class CompassApp extends AbstractPointNavigationApp {
CompassApp() {
- super(getString(R.string.compass_title), null);
+ super(getString(R.string.compass_title), R.id.cache_app_compass, null);
}
@Override
@@ -33,8 +32,7 @@ class CompassApp extends AbstractPointNavigationApp {
@Override
public void navigate(Activity activity, Geocache cache) {
- CompassActivity.startActivity(activity, cache.getGeocode(), cache.getName(), cache.getCoords(), null,
- Formatter.formatCacheInfoShort(cache));
+ CompassActivity.startActivity(activity, cache);
}
} \ No newline at end of file
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/DownloadStaticMapsApp.java b/main/src/cgeo/geocaching/apps/cache/navi/DownloadStaticMapsApp.java
index bc422d4..19b5e02 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/DownloadStaticMapsApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/DownloadStaticMapsApp.java
@@ -9,7 +9,7 @@ import android.app.Activity;
class DownloadStaticMapsApp extends AbstractStaticMapsApp {
DownloadStaticMapsApp() {
- super(getString(R.string.cache_menu_download_map_static));
+ super(getString(R.string.cache_menu_download_map_static), R.id.cache_app_download_static_maps);
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsApp.java b/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsApp.java
index 4cbfa00..60d6e31 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsApp.java
@@ -12,7 +12,7 @@ import android.net.Uri;
class GoogleMapsApp extends AbstractPointNavigationApp {
GoogleMapsApp() {
- super(getString(R.string.cache_menu_map_ext), null);
+ super(getString(R.string.cache_menu_map_ext), R.id.cache_app_google_maps, null);
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java b/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java
index a84b7e8..c4351bb 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.apps.cache.navi;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.IGeoData;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.maps.MapProviderFactory;
import cgeo.geocaching.utils.Log;
@@ -14,7 +14,7 @@ import android.net.Uri;
public class GoogleMapsDirectionApp extends AbstractPointNavigationApp {
protected GoogleMapsDirectionApp() {
- super(getString(R.string.cache_menu_maps_directions), null);
+ super(getString(R.string.cache_menu_maps_directions), R.id.cache_app_google_maps_direction, null);
}
@Override
@@ -25,7 +25,7 @@ public class GoogleMapsDirectionApp extends AbstractPointNavigationApp {
@Override
public void navigate(Activity activity, Geopoint coords) {
try {
- IGeoData geo = cgeoapplication.getInstance().currentGeo();
+ IGeoData geo = CgeoApplication.getInstance().currentGeo();
final Geopoint coordsNow = geo == null ? null : geo.getCoords();
if (coordsNow != null) {
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java b/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java
index a3532a5..902eebf 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java
@@ -12,8 +12,8 @@ abstract class GoogleNavigationApp extends AbstractPointNavigationApp {
private final String mode;
- protected GoogleNavigationApp(final int nameResourceId, final String mode) {
- super(getString(nameResourceId), null);
+ protected GoogleNavigationApp(final int nameResourceId, final int id, final String mode) {
+ super(getString(nameResourceId), id, null);
this.mode = mode;
}
@@ -36,19 +36,19 @@ abstract class GoogleNavigationApp extends AbstractPointNavigationApp {
static class GoogleNavigationWalkingApp extends GoogleNavigationApp {
GoogleNavigationWalkingApp() {
- super(R.string.cache_menu_navigation_walk, "w");
+ super(R.string.cache_menu_navigation_walk, R.id.cache_app_google_navigation_walk, "w");
}
}
static class GoogleNavigationDrivingApp extends GoogleNavigationApp {
GoogleNavigationDrivingApp() {
- super(R.string.cache_menu_navigation_drive, "d");
+ super(R.string.cache_menu_navigation_drive, R.id.cache_app_google_navigation_drive, "d");
}
}
static class GoogleNavigationBikeApp extends GoogleNavigationApp {
GoogleNavigationBikeApp() {
- super(R.string.cache_menu_navigation_bike, "b");
+ super(R.string.cache_menu_navigation_bike, R.id.cache_app_google_navigation_bike, "b");
}
}
} \ No newline at end of file
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/InternalMap.java b/main/src/cgeo/geocaching/apps/cache/navi/InternalMap.java
index cdf14f0..540b025 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/InternalMap.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/InternalMap.java
@@ -12,7 +12,7 @@ import android.app.Activity;
class InternalMap extends AbstractPointNavigationApp {
InternalMap() {
- super(getString(R.string.cache_menu_map), null);
+ super(getString(R.string.cache_menu_map), R.id.cache_app_internal_map, null);
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/LocusApp.java b/main/src/cgeo/geocaching/apps/cache/navi/LocusApp.java
index 8b64ac8..b60d78a 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/LocusApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/LocusApp.java
@@ -1,15 +1,24 @@
package cgeo.geocaching.apps.cache.navi;
+
import cgeo.geocaching.Geocache;
+import cgeo.geocaching.R;
import cgeo.geocaching.Waypoint;
import cgeo.geocaching.apps.AbstractLocusApp;
import android.app.Activity;
+import android.content.Intent;
import java.util.Collections;
class LocusApp extends AbstractLocusApp implements CacheNavigationApp, WaypointNavigationApp {
+ private static final String INTENT = Intent.ACTION_VIEW;
+
+ protected LocusApp() {
+ super(getString(R.string.caches_map_locus), R.id.cache_app_locus, INTENT);
+ }
+
@Override
public boolean isEnabled(Waypoint waypoint) {
return waypoint.getCoords() != null;
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java
index ec6b3e1..dd02bc1 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java
@@ -1,9 +1,9 @@
package cgeo.geocaching.apps.cache.navi;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.apps.AbstractAppFactory;
import cgeo.geocaching.apps.App;
@@ -16,10 +16,11 @@ import cgeo.geocaching.apps.cache.navi.GoogleNavigationApp.GoogleNavigationWalki
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.settings.Settings;
+import org.eclipse.jdt.annotation.Nullable;
+
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
-import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
@@ -214,7 +215,7 @@ public final class NavigationAppFactory extends AbstractAppFactory {
public static List<NavigationAppsEnum> getInstalledDefaultNavigationApps() {
final List<NavigationAppsEnum> installedNavigationApps = new ArrayList<NavigationAppsEnum>();
for (final NavigationAppsEnum appEnum : NavigationAppsEnum.values()) {
- if (appEnum.app.isInstalled() && appEnum.app.isDefaultNavigationApp()) {
+ if (appEnum.app.isInstalled() && appEnum.app.isUsableAsDefaultNavigationApp()) {
installedNavigationApps.add(appEnum);
}
}
@@ -222,46 +223,9 @@ public final class NavigationAppFactory extends AbstractAppFactory {
}
/**
- * This offset is used to build unique menu ids to avoid collisions of ids in menus
- */
- private static final int MENU_ITEM_OFFSET = 12345;
-
-
- /**
- * Adds the installed navigation tools to the given menu.
- * Use {@link #onMenuItemSelected(MenuItem, Activity, cgeo.geocaching.Geocache)} on
- * selection event to start the selected navigation tool.
- *
- * <b>Only use this way if {@link #showNavigationMenu(Activity, cgeo.geocaching.Geocache, cgeo.geocaching.Waypoint, Geopoint, boolean, boolean)} is
- * not suitable for the given usecase.</b>
- *
- * @param menu
- */
- public static void addMenuItems(final Menu menu, final Geocache cache) {
- for (final NavigationAppsEnum navApp : getInstalledNavigationApps()) {
- if (navApp.app instanceof CacheNavigationApp) {
- final CacheNavigationApp cacheApp = (CacheNavigationApp) navApp.app;
- if (cacheApp.isEnabled(cache) && Settings.isUseNavigationApp(navApp)) {
- menu.add(0, MENU_ITEM_OFFSET + navApp.id, 0, navApp.app.getName());
- }
- }
- }
- }
-
- public static void addMenuItems(final Menu menu, final Waypoint waypoint) {
- for (final NavigationAppsEnum navApp : getInstalledNavigationApps()) {
- if (navApp.app instanceof WaypointNavigationApp) {
- final WaypointNavigationApp waypointApp = (WaypointNavigationApp) navApp.app;
- if (waypointApp.isEnabled(waypoint) && Settings.isUseNavigationApp(navApp)) {
- menu.add(0, MENU_ITEM_OFFSET + navApp.id, 0, navApp.app.getName());
- }
- }
- }
- }
-
- /**
- * Handles menu selections for menu entries created with {@link #addMenuItems(Menu, cgeo.geocaching.Geocache)}.
- *
+ * Handles menu selections for menu entries created with
+ * {@link #showNavigationMenu(Activity, Geocache, Waypoint, Geopoint)}.
+ *
* @param item
* @param activity
* @param cache
@@ -273,20 +237,14 @@ public final class NavigationAppFactory extends AbstractAppFactory {
return menuItem != null;
}
- private static void navigateCache(Activity activity, Geocache cache, App app) {
+ private static void navigateCache(Activity activity, Geocache cache, @Nullable App app) {
if (app instanceof CacheNavigationApp) {
final CacheNavigationApp cacheApp = (CacheNavigationApp) app;
cacheApp.navigate(activity, cache);
}
}
- public static boolean onMenuItemSelected(final MenuItem item, Activity activity, Waypoint waypoint) {
- final App menuItem = getAppFromMenuItem(item);
- navigateWaypoint(activity, waypoint, menuItem);
- return menuItem != null;
- }
-
- private static void navigateWaypoint(Activity activity, Waypoint waypoint, App app) {
+ private static void navigateWaypoint(Activity activity, Waypoint waypoint, @Nullable App app) {
if (app instanceof WaypointNavigationApp) {
final WaypointNavigationApp waypointApp = (WaypointNavigationApp) app;
waypointApp.navigate(activity, waypoint);
@@ -300,10 +258,11 @@ public final class NavigationAppFactory extends AbstractAppFactory {
}
}
+ @Nullable
private static App getAppFromMenuItem(MenuItem item) {
final int id = item.getItemId();
for (final NavigationAppsEnum navApp : NavigationAppsEnum.values()) {
- if (MENU_ITEM_OFFSET + navApp.id == id) {
+ if (navApp.id == id) {
return navApp.app;
}
}
@@ -320,7 +279,7 @@ public final class NavigationAppFactory extends AbstractAppFactory {
*/
public static void startDefaultNavigationApplication(int defaultNavigation, Activity activity, Geocache cache) {
if (cache == null || cache.getCoords() == null) {
- ActivityMixin.showToast(activity, cgeoapplication.getInstance().getString(R.string.err_location_unknown));
+ ActivityMixin.showToast(activity, CgeoApplication.getInstance().getString(R.string.err_location_unknown));
return;
}
@@ -342,7 +301,7 @@ public final class NavigationAppFactory extends AbstractAppFactory {
*/
public static void startDefaultNavigationApplication(int defaultNavigation, Activity activity, Waypoint waypoint) {
if (waypoint == null || waypoint.getCoords() == null) {
- ActivityMixin.showToast(activity, cgeoapplication.getInstance().getString(R.string.err_location_unknown));
+ ActivityMixin.showToast(activity, CgeoApplication.getInstance().getString(R.string.err_location_unknown));
return;
}
navigateWaypoint(activity, waypoint, getDefaultNavigationApplication(defaultNavigation));
@@ -356,7 +315,7 @@ public final class NavigationAppFactory extends AbstractAppFactory {
*/
public static void startDefaultNavigationApplication(int defaultNavigation, Activity activity, final Geopoint destination) {
if (destination == null) {
- ActivityMixin.showToast(activity, cgeoapplication.getInstance().getString(R.string.err_location_unknown));
+ ActivityMixin.showToast(activity, CgeoApplication.getInstance().getString(R.string.err_location_unknown));
return;
}
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/NavigonApp.java b/main/src/cgeo/geocaching/apps/cache/navi/NavigonApp.java
index 7966733..da988aa 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/NavigonApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/NavigonApp.java
@@ -13,7 +13,7 @@ class NavigonApp extends AbstractPointNavigationApp {
private static final String INTENT_EXTRA_KEY_LONGITUDE = "longitude";
NavigonApp() {
- super(getString(R.string.cache_menu_navigon), INTENT);
+ super(getString(R.string.cache_menu_navigon), R.id.cache_app_navigon, INTENT);
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/OruxMapsApp.java b/main/src/cgeo/geocaching/apps/cache/navi/OruxMapsApp.java
index 24ef81b..5d645f7 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/OruxMapsApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/OruxMapsApp.java
@@ -11,7 +11,7 @@ class OruxMapsApp extends AbstractPointNavigationApp {
private static final String INTENT = "com.oruxmaps.VIEW_MAP_ONLINE";
OruxMapsApp() {
- super(getString(R.string.cache_menu_oruxmaps), INTENT);
+ super(getString(R.string.cache_menu_oruxmaps), R.id.cache_app_orux_maps, INTENT);
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/RMapsApp.java b/main/src/cgeo/geocaching/apps/cache/navi/RMapsApp.java
index b203aeb..82d144e 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/RMapsApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/RMapsApp.java
@@ -16,7 +16,7 @@ class RMapsApp extends AbstractPointNavigationApp {
private static final String INTENT = "com.robert.maps.action.SHOW_POINTS";
RMapsApp() {
- super(getString(R.string.cache_menu_rmaps), INTENT);
+ super(getString(R.string.cache_menu_rmaps), R.id.cache_app_rmaps, INTENT);
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/RadarApp.java b/main/src/cgeo/geocaching/apps/cache/navi/RadarApp.java
index b01539c..ffa6650 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/RadarApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/RadarApp.java
@@ -12,7 +12,7 @@ class RadarApp extends AbstractPointNavigationApp {
private static final String PACKAGE_NAME = "com.eclipsim.gpsstatus2";
RadarApp() {
- super(getString(R.string.cache_menu_radar), INTENT, PACKAGE_NAME);
+ super(getString(R.string.cache_menu_radar), R.id.cache_app_radar, INTENT, PACKAGE_NAME);
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/StaticMapApp.java b/main/src/cgeo/geocaching/apps/cache/navi/StaticMapApp.java
index 1dd57a3..9e1b3f0 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/StaticMapApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/StaticMapApp.java
@@ -1,15 +1,15 @@
package cgeo.geocaching.apps.cache.navi;
+import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.Geocache;
import android.app.Activity;
class StaticMapApp extends AbstractStaticMapsApp {
StaticMapApp() {
- super(getString(R.string.cache_menu_map_static));
+ super(getString(R.string.cache_menu_map_static), R.id.cache_app_show_static_maps);
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/StreetviewApp.java b/main/src/cgeo/geocaching/apps/cache/navi/StreetviewApp.java
index e2c0828..7294a40 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/StreetviewApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/StreetviewApp.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.apps.cache.navi;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.utils.ProcessUtils;
@@ -17,7 +17,7 @@ class StreetviewApp extends AbstractPointNavigationApp {
private static final boolean INSTALLED = ProcessUtils.isInstalled(PACKAGE_NAME_STREET_VIEW);
StreetviewApp() {
- super(getString(R.string.cache_menu_streetview), null);
+ super(getString(R.string.cache_menu_streetview), R.id.cache_app_street_view, null);
}
@Override
@@ -31,7 +31,7 @@ class StreetviewApp extends AbstractPointNavigationApp {
activity.startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("google.streetview:cbll=" + point.getLatitude() + "," + point.getLongitude())));
} catch (final ActivityNotFoundException e) {
- ActivityMixin.showToast(activity, cgeoapplication.getInstance().getString(R.string.err_application_no));
+ ActivityMixin.showToast(activity, CgeoApplication.getInstance().getString(R.string.err_application_no));
}
}
} \ No newline at end of file
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/SygicNavigationApp.java b/main/src/cgeo/geocaching/apps/cache/navi/SygicNavigationApp.java
index e30bfc1..76b7f0e 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/SygicNavigationApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/SygicNavigationApp.java
@@ -17,7 +17,7 @@ public class SygicNavigationApp extends AbstractPointNavigationApp {
private static final String PACKAGE = "com.sygic.aura";
SygicNavigationApp() {
- super(getString(R.string.cache_menu_sygic), null, PACKAGE);
+ super(getString(R.string.cache_menu_sygic), R.id.cache_app_sygic, null, PACKAGE);
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/cachelist/LocusCacheListApp.java b/main/src/cgeo/geocaching/apps/cachelist/AbstractLocusCacheListApp.java
index cd0289a..6411758 100644
--- a/main/src/cgeo/geocaching/apps/cachelist/LocusCacheListApp.java
+++ b/main/src/cgeo/geocaching/apps/cachelist/AbstractLocusCacheListApp.java
@@ -1,23 +1,23 @@
package cgeo.geocaching.apps.cachelist;
+import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Geocache;
import cgeo.geocaching.apps.AbstractLocusApp;
-import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections4.CollectionUtils;
import android.app.Activity;
import android.content.Intent;
import java.util.List;
-class LocusCacheListApp extends AbstractLocusApp implements CacheListApp {
+abstract class AbstractLocusCacheListApp extends AbstractLocusApp implements CacheListApp {
private boolean export;
- public LocusCacheListApp(boolean export) {
- super(getString(export ? R.string.caches_map_locus_export : R.string.caches_map_locus), Intent.ACTION_VIEW);
+ public AbstractLocusCacheListApp(final int id, boolean export) {
+ super(getString(export ? R.string.caches_map_locus_export : R.string.caches_map_locus), id, Intent.ACTION_VIEW);
this.export = export;
}
diff --git a/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java b/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java
index ca06c52..4df9d26 100644
--- a/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java
+++ b/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java
@@ -20,8 +20,8 @@ public final class CacheListAppFactory extends AbstractAppFactory {
private static class LazyHolder {
public static final CacheListApp[] apps = {
new InternalCacheListMap(),
- new LocusCacheListApp(false),
- new LocusCacheListApp(true)
+ new LocusShowCacheListApp(),
+ new LocusExportCacheListApp()
};
}
@@ -29,35 +29,45 @@ public final class CacheListAppFactory extends AbstractAppFactory {
* @param menu
* @param activity
* @param res
- * @return the added menu item (also for a sub menu, then the menu item in the parent menu is returned)
*/
- public static MenuItem addMenuItems(final Menu menu, final Activity activity, final Resources res) {
+ public static void addMenuItems(final Menu menu, final Activity activity, final Resources res) {
+ final List<CacheListApp> activeApps = getActiveApps();
+ if (activeApps.isEmpty()) {
+ return;
+ }
+ if (activeApps.size() == 1) {
+ final MenuItem subItem = menu.findItem(R.id.menu_cache_list_app);
+ subItem.setVisible(true);
+ subItem.setTitle(activeApps.get(0).getName());
+ } else {
+ final MenuItem subItem = menu.findItem(R.id.submenu_cache_list_app);
+ subItem.setVisible(true);
+ final SubMenu subMenu = subItem.getSubMenu();
+ for (final CacheListApp app : activeApps) {
+ subMenu.add(0, app.getId(), 0, app.getName());
+ }
+ }
+ }
+
+ private static List<CacheListApp> getActiveApps() {
final List<CacheListApp> activeApps = new ArrayList<CacheListApp>(LazyHolder.apps.length);
for (final CacheListApp app : LazyHolder.apps) {
if (app.isInstalled()) {
activeApps.add(app);
}
}
- // use a new sub menu, if more than one app is available
- switch (activeApps.size()) {
- case 0:
- return null;
- case 1:
- return menu.add(0, activeApps.get(0).getId(), 0,
- activeApps.get(0).getName()).setIcon(R.drawable.ic_menu_mapmode);
- default:
- final SubMenu subMenu = menu.addSubMenu(0, 101, 0,
- res.getString(R.string.caches_on_map)).setIcon(R.drawable.ic_menu_mapmode);
- for (final CacheListApp app : activeApps) {
- subMenu.add(0, app.getId(), 0, app.getName());
- }
- return subMenu.getItem();
- }
+ return activeApps;
}
public static boolean onMenuItemSelected(final MenuItem item, final List<Geocache> caches, final Activity activity,
final SearchResult search) {
- final CacheListApp app = (CacheListApp) getAppFromMenuItem(item, LazyHolder.apps);
+ CacheListApp app;
+ if (item.getItemId() == R.id.menu_cache_list_app) {
+ app = getActiveApps().get(0);
+ }
+ else {
+ app = (CacheListApp) getAppFromMenuItem(item, LazyHolder.apps);
+ }
if (app != null) {
try {
boolean result = app.invoke(caches, activity, search);
diff --git a/main/src/cgeo/geocaching/apps/cachelist/InternalCacheListMap.java b/main/src/cgeo/geocaching/apps/cachelist/InternalCacheListMap.java
index 38fb499..9216bc0 100644
--- a/main/src/cgeo/geocaching/apps/cachelist/InternalCacheListMap.java
+++ b/main/src/cgeo/geocaching/apps/cachelist/InternalCacheListMap.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.apps.cachelist;
+import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Geocache;
import cgeo.geocaching.apps.AbstractApp;
import cgeo.geocaching.maps.CGeoMap;
@@ -13,7 +13,7 @@ import java.util.List;
class InternalCacheListMap extends AbstractApp implements CacheListApp {
InternalCacheListMap() {
- super(getString(R.string.cache_menu_map), null);
+ super(getString(R.string.cache_menu_map), R.id.cache_list_app_map, null);
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/cachelist/LocusExportCacheListApp.java b/main/src/cgeo/geocaching/apps/cachelist/LocusExportCacheListApp.java
new file mode 100644
index 0000000..adaa849
--- /dev/null
+++ b/main/src/cgeo/geocaching/apps/cachelist/LocusExportCacheListApp.java
@@ -0,0 +1,11 @@
+package cgeo.geocaching.apps.cachelist;
+
+import cgeo.geocaching.R;
+
+final class LocusExportCacheListApp extends AbstractLocusCacheListApp {
+
+ public LocusExportCacheListApp() {
+ super(R.id.cache_list_app_locus_export, true);
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/apps/cachelist/LocusShowCacheListApp.java b/main/src/cgeo/geocaching/apps/cachelist/LocusShowCacheListApp.java
new file mode 100644
index 0000000..32c5cb6
--- /dev/null
+++ b/main/src/cgeo/geocaching/apps/cachelist/LocusShowCacheListApp.java
@@ -0,0 +1,11 @@
+package cgeo.geocaching.apps.cachelist;
+
+import cgeo.geocaching.R;
+
+final class LocusShowCacheListApp extends AbstractLocusCacheListApp {
+
+ public LocusShowCacheListApp() {
+ super(R.id.cache_list_app_locus_show, false);
+ }
+
+}