package org.aisen.wen.component.cardmenu;
import android.app.Activity;
import android.support.v7.view.menu.MenuBuilder;
import android.support.v7.view.menu.MenuItemImpl;
import android.view.ContextThemeWrapper;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
/**
* Created by wangdan on 16/9/13.
*/
public class CardMenuBuilder {
private final Activity mContext;
private final CardMenuPresenter mPresenter;
private final MenuBuilder mMenuBuilder;
private final CardMenuOptions options;
private OnCardMenuCallback onCardMenuCallback;
public CardMenuBuilder(Activity context, View anchorView, CardMenuOptions options) {
mContext = context;
this.options = options;
mMenuBuilder = new MenuBuilder(context);
mPresenter = new CardMenuPresenter(context, anchorView, this, options);
mMenuBuilder.addMenuPresenter(mPresenter, new ContextThemeWrapper(context, options.themeRes));
}
public MenuItem add(int group, int id, int categoryOrder, CharSequence title) {
MenuItem item = mMenuBuilder.add(group, id, categoryOrder, title);
item.setOnMenuItemClickListener(onMenuItemClickListener);
return item;
}
public SubMenu addSubMenu(int group, int id, int categoryOrder, CharSequence title) {
SubMenu subMenu = mMenuBuilder.addSubMenu(group, id, categoryOrder, title);
if (subMenu.getItem() instanceof MenuItemImpl) {
subMenu.getItem().setOnMenuItemClickListener(onMenuItemClickListener);
}
return subMenu;
}
public MenuItem addSubMenuItem(SubMenu subMenu, int groupId, int itemId, int order, CharSequence title) {
MenuItem item = subMenu.add(groupId, itemId, order, title);
item.setOnMenuItemClickListener(onMenuItemClickListener);
return item;
}
public CardMenuBuilder inflate(int menuRes) {
mContext.getMenuInflater().inflate(menuRes, mMenuBuilder);
return this;
}
public CardMenuBuilder add(int id, int titleRes) {
add(1, id, 1, mContext.getString(titleRes));
return this;
}
public CardMenuBuilder add(int id, String title) {
add(1, id, 1, title);
return this;
}
public CardMenuBuilder setOnCardMenuCallback(OnCardMenuCallback onCardMenuCallback) {
this.onCardMenuCallback = onCardMenuCallback;
return this;
}
public void show() {
mPresenter.showCardMenu();
}
public CardMenuOptions getOptions() {
return options;
}
private MenuItem.OnMenuItemClickListener onMenuItemClickListener = new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
if (onCardMenuCallback != null) {
return onCardMenuCallback.onCardMenuItemSelected(item);
}
return false;
}
};
public interface OnCardMenuCallback {
boolean onCardMenuItemSelected(MenuItem menuItem);
}
}