Exemplo n.º 1
0
  public boolean performItemAction(MenuItem item, int flags) {
    MenuItemImpl itemImpl = (MenuItemImpl) item;

    if (itemImpl == null || !itemImpl.isEnabled()) {
      return false;
    }

    boolean invoked = itemImpl.invoke();

    final ActionProvider provider = item.getActionProvider();
    final boolean providerHasSubMenu = provider != null && provider.hasSubMenu();
    if (itemImpl.hasCollapsibleActionView()) {
      invoked |= itemImpl.expandActionView();
      if (invoked) close(true);
    } else if (itemImpl.hasSubMenu() || providerHasSubMenu) {
      close(false);

      if (!itemImpl.hasSubMenu()) {
        itemImpl.setSubMenu(new SubMenuBuilder(getContext(), this, itemImpl));
      }

      final SubMenuBuilder subMenu = (SubMenuBuilder) itemImpl.getSubMenu();
      if (providerHasSubMenu) {
        provider.onPrepareSubMenu(subMenu);
      }
      invoked |= dispatchSubMenuSelected(subMenu);
      if (!invoked) close(true);
    } else {
      if ((flags & FLAG_PERFORM_NO_CLOSE) == 0) {
        close(true);
      }
    }

    return invoked;
  }