aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2014-08-17 07:17:05 +0200
committerBananeweizen <bananeweizen@gmx.de>2014-08-17 07:17:05 +0200
commite3be57dd69935b33b63b172bbf206bf402aa8b3f (patch)
treebdf9e271e1186266e8a16baed979cadcb2812af8 /main/src
parent8c468294662cb57a1d7b8ec8b9a9195e277bc339 (diff)
downloadcgeo-e3be57dd69935b33b63b172bbf206bf402aa8b3f.zip
cgeo-e3be57dd69935b33b63b172bbf206bf402aa8b3f.tar.gz
cgeo-e3be57dd69935b33b63b172bbf206bf402aa8b3f.tar.bz2
convert navigation popup menu to action menu
Diffstat (limited to 'main/src')
-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
3 files changed, 96 insertions, 3 deletions
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);
+ }
+ }
+
+}