diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-06-22 16:05:43 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-06-22 16:05:43 +0200 |
| commit | 3bab16fcb063a69b3c894343cefcc0eb54958843 (patch) | |
| tree | 84a9ec25fd0c4fe91def478e54ec235b75f94c84 | |
| parent | 01bfdcaeeae619fd638f48b8fe94463e8131edd2 (diff) | |
| download | cgeo-3bab16fcb063a69b3c894343cefcc0eb54958843.zip cgeo-3bab16fcb063a69b3c894343cefcc0eb54958843.tar.gz cgeo-3bab16fcb063a69b3c894343cefcc0eb54958843.tar.bz2 | |
fix #2914: bike navigation
5 files changed, 50 insertions, 18 deletions
diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml index 2f80be0..988fd33 100644 --- a/main/res/values-de/strings.xml +++ b/main/res/values-de/strings.xml @@ -587,6 +587,7 @@ <string name="cache_menu_navigate">Navigieren</string> <string name="cache_menu_navigation_drive">Navigation (Fahren)</string> <string name="cache_menu_navigation_walk">Navigation (Gehen)</string> + <string name="cache_menu_navigation_bike">Navigation (Fahrrad)</string> <string name="cache_menu_maps_directions">Google Maps Route</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Karte</string> diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index 6e75194..05cdb3d 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -587,6 +587,7 @@ <string name="cache_menu_navigate">Navigate</string> <string name="cache_menu_navigation_drive">Navigation (Driving)</string> <string name="cache_menu_navigation_walk">Navigation (Walking)</string> + <string name="cache_menu_navigation_bike">Navigation (Bike)</string> <string name="cache_menu_maps_directions">Google Maps Directions</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Map</string> diff --git a/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java b/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java index 1019b0f..a3532a5 100644 --- a/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java +++ b/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java @@ -27,22 +27,28 @@ abstract class GoogleNavigationApp extends AbstractPointNavigationApp { try { activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri .parse("google.navigation:ll=" + coords.getLatitude() + "," - + coords.getLongitude() + mode))); + + coords.getLongitude() + "&mode=" + mode))); - } catch (Exception e) { + } catch (final Exception e) { Log.i("GoogleNavigationApp.navigate: No navigation application available.", e); } } static class GoogleNavigationWalkingApp extends GoogleNavigationApp { GoogleNavigationWalkingApp() { - super(R.string.cache_menu_navigation_walk, "&mode=w"); + super(R.string.cache_menu_navigation_walk, "w"); } } static class GoogleNavigationDrivingApp extends GoogleNavigationApp { GoogleNavigationDrivingApp() { - super(R.string.cache_menu_navigation_drive, "&mode=d"); + super(R.string.cache_menu_navigation_drive, "d"); + } + } + + static class GoogleNavigationBikeApp extends GoogleNavigationApp { + GoogleNavigationBikeApp() { + super(R.string.cache_menu_navigation_bike, "b"); } } }
\ No newline at end of file diff --git a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java index 5545936..7316d4c 100644 --- a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java +++ b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java @@ -11,6 +11,7 @@ import cgeo.geocaching.apps.App; import cgeo.geocaching.apps.cache.CacheBeaconApp; import cgeo.geocaching.apps.cache.GccApp; import cgeo.geocaching.apps.cache.WhereYouGoApp; +import cgeo.geocaching.apps.cache.navi.GoogleNavigationApp.GoogleNavigationBikeApp; import cgeo.geocaching.apps.cache.navi.GoogleNavigationApp.GoogleNavigationDrivingApp; import cgeo.geocaching.apps.cache.navi.GoogleNavigationApp.GoogleNavigationWalkingApp; import cgeo.geocaching.geopoint.Geopoint; @@ -59,6 +60,10 @@ public final class NavigationAppFactory extends AbstractAppFactory { */ GOOGLE_NAVIGATION_WALK(new GoogleNavigationWalkingApp(), 12), /** + * Google Navigation in walking mode + */ + GOOGLE_NAVIGATION_BIKE(new GoogleNavigationBikeApp(), 21), + /** * Google Maps Directions */ GOOGLE_MAPS_DIRECTIONS(new GoogleMapsDirectionApp(), 13), @@ -134,7 +139,7 @@ public final class NavigationAppFactory extends AbstractAppFactory { builder.setTitle(R.string.cache_menu_navigate); final List<NavigationAppsEnum> items = new ArrayList<NavigationAppFactory.NavigationAppsEnum>(); final int defaultNavigationTool = Settings.getDefaultNavigationTool(); - for (NavigationAppsEnum navApp : getInstalledNavigationApps()) { + for (final NavigationAppsEnum navApp : getInstalledNavigationApps()) { if ((showInternalMap || !(navApp.app instanceof InternalMap)) && (showDefaultNavigation || defaultNavigationTool != navApp.id)) { boolean add = false; @@ -161,8 +166,8 @@ public final class NavigationAppFactory extends AbstractAppFactory { builder.setAdapter(adapter, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { - NavigationAppsEnum selectedItem = adapter.getItem(item); - App app = selectedItem.app; + final NavigationAppsEnum selectedItem = adapter.getItem(item); + final App app = selectedItem.app; if (cache != null) { navigateCache(activity, cache, app); } @@ -185,7 +190,7 @@ public final class NavigationAppFactory extends AbstractAppFactory { */ public static List<NavigationAppsEnum> getInstalledNavigationApps() { final List<NavigationAppsEnum> installedNavigationApps = new ArrayList<NavigationAppsEnum>(); - for (NavigationAppsEnum appEnum : NavigationAppsEnum.values()) { + for (final NavigationAppsEnum appEnum : NavigationAppsEnum.values()) { if (appEnum.app.isInstalled()) { installedNavigationApps.add(appEnum); } @@ -200,7 +205,7 @@ public final class NavigationAppFactory extends AbstractAppFactory { */ public static List<NavigationAppsEnum> getInstalledDefaultNavigationApps() { final List<NavigationAppsEnum> installedNavigationApps = new ArrayList<NavigationAppsEnum>(); - for (NavigationAppsEnum appEnum : NavigationAppsEnum.values()) { + for (final NavigationAppsEnum appEnum : NavigationAppsEnum.values()) { if (appEnum.app.isInstalled() && appEnum.app.isDefaultNavigationApp()) { installedNavigationApps.add(appEnum); } @@ -225,9 +230,9 @@ public final class NavigationAppFactory extends AbstractAppFactory { * @param menu */ public static void addMenuItems(final Menu menu, final Geocache cache) { - for (NavigationAppsEnum navApp : getInstalledNavigationApps()) { + for (final NavigationAppsEnum navApp : getInstalledNavigationApps()) { if (navApp.app instanceof CacheNavigationApp) { - CacheNavigationApp cacheApp = (CacheNavigationApp) navApp.app; + final CacheNavigationApp cacheApp = (CacheNavigationApp) navApp.app; if (cacheApp.isEnabled(cache)) { menu.add(0, MENU_ITEM_OFFSET + navApp.id, 0, navApp.app.getName()); } @@ -236,9 +241,9 @@ public final class NavigationAppFactory extends AbstractAppFactory { } public static void addMenuItems(final Menu menu, final Waypoint waypoint) { - for (NavigationAppsEnum navApp : getInstalledNavigationApps()) { + for (final NavigationAppsEnum navApp : getInstalledNavigationApps()) { if (navApp.app instanceof WaypointNavigationApp) { - WaypointNavigationApp waypointApp = (WaypointNavigationApp) navApp.app; + final WaypointNavigationApp waypointApp = (WaypointNavigationApp) navApp.app; if (waypointApp.isEnabled(waypoint)) { menu.add(0, MENU_ITEM_OFFSET + navApp.id, 0, navApp.app.getName()); } @@ -262,7 +267,7 @@ public final class NavigationAppFactory extends AbstractAppFactory { private static void navigateCache(Activity activity, Geocache cache, App app) { if (app instanceof CacheNavigationApp) { - CacheNavigationApp cacheApp = (CacheNavigationApp) app; + final CacheNavigationApp cacheApp = (CacheNavigationApp) app; cacheApp.navigate(activity, cache); } } @@ -275,21 +280,21 @@ public final class NavigationAppFactory extends AbstractAppFactory { private static void navigateWaypoint(Activity activity, Waypoint waypoint, App app) { if (app instanceof WaypointNavigationApp) { - WaypointNavigationApp waypointApp = (WaypointNavigationApp) app; + final WaypointNavigationApp waypointApp = (WaypointNavigationApp) app; waypointApp.navigate(activity, waypoint); } } private static void navigateGeopoint(Activity activity, Geopoint destination, App app) { if (app instanceof GeopointNavigationApp) { - GeopointNavigationApp geopointApp = (GeopointNavigationApp) app; + final GeopointNavigationApp geopointApp = (GeopointNavigationApp) app; geopointApp.navigate(activity, destination); } } private static App getAppFromMenuItem(MenuItem item) { final int id = item.getItemId(); - for (NavigationAppsEnum navApp : NavigationAppsEnum.values()) { + for (final NavigationAppsEnum navApp : NavigationAppsEnum.values()) { if (MENU_ITEM_OFFSET + navApp.id == id) { return navApp.app; } @@ -362,7 +367,7 @@ public final class NavigationAppFactory extends AbstractAppFactory { private static App getNavigationAppForId(final int navigationAppId) { final List<NavigationAppsEnum> installedNavigationApps = getInstalledNavigationApps(); - for (NavigationAppsEnum navigationApp : installedNavigationApps) { + for (final NavigationAppsEnum navigationApp : installedNavigationApps) { if (navigationApp.id == navigationAppId) { return navigationApp.app; } diff --git a/tests/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactoryTest.java b/tests/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactoryTest.java new file mode 100644 index 0000000..2d510ab --- /dev/null +++ b/tests/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactoryTest.java @@ -0,0 +1,19 @@ +package cgeo.geocaching.apps.cache.navi; + +import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum; + +import java.util.HashSet; + +import junit.framework.TestCase; + +public class NavigationAppFactoryTest extends TestCase { + + public static void testUniqueNavigationAppIds() throws Exception { + final HashSet<Integer> idSet = new HashSet<Integer>(); + for (NavigationAppsEnum navigationApp : NavigationAppsEnum.values()) { + idSet.add(navigationApp.id); + } + assertEquals("Duplicate id in " + NavigationAppsEnum.class.getSimpleName(), NavigationAppsEnum.values().length, idSet.size()); + } + +} |
