package cgeo.geocaching.apps.navi;
import cgeo.geocaching.apps.navi.NavigationAppFactory.NavigationAppsEnum;
import cgeo.geocaching.models.Geocache;
import cgeo.geocaching.ui.AbstractMenuActionProvider;
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;
/**
* Action provider listing all available navigation actions as sub menu.
*/
public class NavigationSelectionActionProvider extends AbstractMenuActionProvider {
private Geocache geocache;
private final Context context;
public NavigationSelectionActionProvider(final Context context) {
super(context);
this.context = context;
}
public void setTarget(final Geocache cache) {
geocache = cache;
}
@Override
public void onPrepareSubMenu(final SubMenu subMenu) {
subMenu.clear();
if (geocache == null || geocache.getCoords() == null) {
return;
}
for (final NavigationAppsEnum app : NavigationAppFactory.getActiveNavigationApps()) {
if (!(app.app instanceof CacheNavigationApp)) {
continue;
}
final CacheNavigationApp cacheApp = (CacheNavigationApp) app.app;
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) {
cacheApp.navigate(context, geocache);
return true;
}
});
}
}
}
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);
}
}
}