aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/proguard-project.txt5
-rw-r--r--main/res/menu/cache_options.xml3
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java5
-rw-r--r--main/src/cgeo/geocaching/CacheMenuHandler.java9
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/NavigationSelectionActionProvider.java85
5 files changed, 100 insertions, 7 deletions
diff --git a/main/proguard-project.txt b/main/proguard-project.txt
index 9b0978c..2a27d99 100644
--- a/main/proguard-project.txt
+++ b/main/proguard-project.txt
@@ -59,8 +59,7 @@
# Null analysis annotations of Eclipse JDT are just used by the Eclipse compiler, so ignore them here
-dontwarn org.eclipse.jdt.annotation.**
-# the sort action provider is only referenced from XML
+# action providers are only referenced from XML
-keep public class cgeo.geocaching.sorting.SortActionProvider { *; }
-
-# the navigation action provider is only referenced from XML
-keep public class cgeo.geocaching.ui.NavigationActionProvider { *; }
+-keep public class cgeo.geocaching.apps.cache.navi.NavigationSelectionActionProvider { *; } \ No newline at end of file
diff --git a/main/res/menu/cache_options.xml b/main/res/menu/cache_options.xml
index 2e0e2bd..f6ca4aa 100644
--- a/main/res/menu/cache_options.xml
+++ b/main/res/menu/cache_options.xml
@@ -7,12 +7,13 @@
android:icon="@drawable/ic_menu_compass"
android:title="@string/cache_menu_navigate"
app:actionProviderClass="cgeo.geocaching.ui.NavigationActionProvider"
- app:showAsAction="always"> <!-- will be replaced -->
+ app:showAsAction="always">
</item>
<item
android:id="@+id/menu_navigate"
android:icon="@drawable/ic_menu_mapmode"
android:title="@string/cache_menu_navigate"
+ app:actionProviderClass="cgeo.geocaching.apps.cache.navi.NavigationSelectionActionProvider"
app:showAsAction="ifRoom">
</item>
<item
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java
index 61403b9..3a7fa0f 100644
--- a/main/src/cgeo/geocaching/CacheDetailActivity.java
+++ b/main/src/cgeo/geocaching/CacheDetailActivity.java
@@ -9,6 +9,7 @@ import cgeo.geocaching.activity.AbstractViewPagerActivity;
import cgeo.geocaching.activity.INavigationSource;
import cgeo.geocaching.activity.Progress;
import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
+import cgeo.geocaching.apps.cache.navi.NavigationSelectionActionProvider;
import cgeo.geocaching.apps.cachelist.MapsWithMeCacheListApp;
import cgeo.geocaching.compatibility.Compatibility;
import cgeo.geocaching.connector.ConnectorFactory;
@@ -430,11 +431,13 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
CacheMenuHandler.addMenuItems(this, menu, cache);
- final MenuItem menuItem = menu.findItem(R.id.menu_default_navigation);
+ MenuItem menuItem = menu.findItem(R.id.menu_default_navigation);
final NavigationActionProvider navAction = (NavigationActionProvider) MenuItemCompat.getActionProvider(menuItem);
if (navAction != null) {
navAction.setNavigationSource(this);
}
+ menuItem = menu.findItem(R.id.menu_navigate);
+ NavigationSelectionActionProvider.initialize(menuItem, cache);
return true;
}
diff --git a/main/src/cgeo/geocaching/CacheMenuHandler.java b/main/src/cgeo/geocaching/CacheMenuHandler.java
index 9c8af50..0dc6444 100644
--- a/main/src/cgeo/geocaching/CacheMenuHandler.java
+++ b/main/src/cgeo/geocaching/CacheMenuHandler.java
@@ -2,6 +2,7 @@ package cgeo.geocaching;
import cgeo.calendar.CalendarAddon;
import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
+import cgeo.geocaching.apps.cache.navi.NavigationSelectionActionProvider;
import cgeo.geocaching.ui.AbstractUIFactory;
import android.app.Activity;
@@ -46,8 +47,12 @@ public class CacheMenuHandler extends AbstractUIFactory {
activityInterface.navigateTo();
return true;
case R.id.menu_navigate:
- activityInterface.showNavigationMenu();
- return true;
+ final NavigationSelectionActionProvider navigationProvider = (NavigationSelectionActionProvider) MenuItemCompat.getActionProvider(item);
+ if (navigationProvider == null) {
+ activityInterface.showNavigationMenu();
+ return true;
+ }
+ return false;
case R.id.menu_caches_around:
activityInterface.cachesAround();
return true;
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/NavigationSelectionActionProvider.java b/main/src/cgeo/geocaching/apps/cache/navi/NavigationSelectionActionProvider.java
new file mode 100644
index 0000000..9abc581
--- /dev/null
+++ b/main/src/cgeo/geocaching/apps/cache/navi/NavigationSelectionActionProvider.java
@@ -0,0 +1,85 @@
+package cgeo.geocaching.apps.cache.navi;
+
+import cgeo.geocaching.Geocache;
+import cgeo.geocaching.apps.App;
+import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum;
+
+import android.app.Activity;
+import android.content.Context;
+import android.support.v4.view.ActionProvider;
+import android.support.v4.view.MenuItemCompat;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MenuItem.OnMenuItemClickListener;
+import android.view.SubMenu;
+import android.view.View;
+
+import java.util.List;
+
+public class NavigationSelectionActionProvider extends ActionProvider {
+
+ private Geocache geocache;
+ private final Activity activity;
+
+ public NavigationSelectionActionProvider(final Context context) {
+ super(context);
+ activity = (Activity) context;
+ }
+
+ @Override
+ public boolean hasSubMenu() {
+ return true;
+ }
+
+ @Override
+ public View onCreateActionView() {
+ // must return null, otherwise the menu will not work
+ return null;
+ }
+
+ public void setTarget(final Geocache cache) {
+ geocache = cache;
+ }
+
+ @Override
+ public void onPrepareSubMenu(final SubMenu subMenu) {
+ subMenu.clear();
+ if (geocache == null) {
+ return;
+ }
+ for (final NavigationAppsEnum app : NavigationAppFactory.getInstalledNavigationApps()) {
+ if (app.app.isEnabled(geocache)) {
+ subMenu.add(Menu.NONE, app.id, Menu.NONE, app.app.getName()).setOnMenuItemClickListener(new OnMenuItemClickListener() {
+
+ @Override
+ public boolean onMenuItemClick(final MenuItem item) {
+ final CacheNavigationApp app = (CacheNavigationApp) getNavigationAppForId(item.getItemId());
+ app.navigate(activity, geocache);
+ return true;
+ }
+ });
+ }
+ }
+ }
+
+ private static App getNavigationAppForId(final int navigationAppId) {
+ final List<NavigationAppsEnum> installedNavigationApps = NavigationAppFactory.getInstalledNavigationApps();
+
+ for (final NavigationAppsEnum navigationApp : installedNavigationApps) {
+ if (navigationApp.id == navigationAppId) {
+ return navigationApp.app;
+ }
+ }
+ // default navigation tool wasn't set already or couldn't be found (not installed any more for example)
+ return NavigationAppsEnum.COMPASS.app;
+ }
+
+ public static void initialize(final MenuItem menuItem, final Geocache cache) {
+ final ActionProvider actionProvider = MenuItemCompat.getActionProvider(menuItem);
+ if (actionProvider instanceof NavigationSelectionActionProvider) {
+ final NavigationSelectionActionProvider navigateAction = (NavigationSelectionActionProvider) actionProvider;
+ navigateAction.setTarget(cache);
+ }
+ }
+
+}