diff options
Diffstat (limited to 'main/src/cgeo/geocaching/apps/cache/navi/NavigationSelectionActionProvider.java')
| -rw-r--r-- | main/src/cgeo/geocaching/apps/cache/navi/NavigationSelectionActionProvider.java | 85 |
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); + } + } + +} |
