diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2014-08-17 07:17:05 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2014-08-17 07:17:05 +0200 |
| commit | e3be57dd69935b33b63b172bbf206bf402aa8b3f (patch) | |
| tree | bdf9e271e1186266e8a16baed979cadcb2812af8 /main/src/cgeo/geocaching/apps/cache/navi/NavigationSelectionActionProvider.java | |
| parent | 8c468294662cb57a1d7b8ec8b9a9195e277bc339 (diff) | |
| download | cgeo-e3be57dd69935b33b63b172bbf206bf402aa8b3f.zip cgeo-e3be57dd69935b33b63b172bbf206bf402aa8b3f.tar.gz cgeo-e3be57dd69935b33b63b172bbf206bf402aa8b3f.tar.bz2 | |
convert navigation popup menu to action menu
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); + } + } + +} |
