aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/apps/cache/navi/NavigationSelectionActionProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/apps/cache/navi/NavigationSelectionActionProvider.java')
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/NavigationSelectionActionProvider.java85
1 files changed, 85 insertions, 0 deletions
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);
+ }
+ }
+
+}