package cgeo.geocaching.apps.cachelist;
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;
import java.util.List;
/**
* action provider showing a sub menu with all navigation possibilities for a complete list of caches
*/
public class ListNavigationSelectionActionProvider extends AbstractMenuActionProvider {
private Callback callback;
public interface Callback {
void onListNavigationSelected(final CacheListApp app);
}
/**
* Creates a new instance. ActionProvider classes should always implement a
* constructor that takes a single Context parameter for inflating from menu XML.
*
* @param context
* Context for accessing resources.
*/
public ListNavigationSelectionActionProvider(final Context context) {
super(context);
}
public void setCallback(final Callback callback) {
this.callback = callback;
}
@Override
public void onPrepareSubMenu(final SubMenu subMenu) {
subMenu.clear();
if (callback == null) {
return;
}
final List<CacheListApp> activeApps = CacheListApps.getActiveApps();
for (int i = 0; i < activeApps.size(); i++) {
final CacheListApp app = activeApps.get(i);
subMenu.add(Menu.NONE, i, Menu.NONE, app.getName()).setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(final MenuItem item) {
callback.onListNavigationSelected(app);
return true;
}
});
}
}
public static void initialize(final MenuItem menuItem, final Callback callback) {
final ActionProvider actionProvider = MenuItemCompat.getActionProvider(menuItem);
if (actionProvider instanceof ListNavigationSelectionActionProvider) {
final ListNavigationSelectionActionProvider navigateAction = (ListNavigationSelectionActionProvider) actionProvider;
navigateAction.setCallback(callback);
}
}
}