package com.reactnativenavigation.views; import android.content.Context; import android.view.Menu; import android.view.ViewManager; import com.facebook.react.bridge.Callback; import com.reactnativenavigation.NavigationApplication; import com.reactnativenavigation.events.ContextualMenuHiddenEvent; import com.reactnativenavigation.events.EventBus; import com.reactnativenavigation.params.ContextualMenuButtonParams; import com.reactnativenavigation.params.ContextualMenuParams; import com.reactnativenavigation.params.StyleParams; import com.reactnativenavigation.params.TitleBarLeftButtonParams; import java.util.List; public class ContextualMenu extends TitleBar implements LeftButtonOnClickListener, ContextualMenuButton.ContextualButtonClickListener { private ContextualMenuParams params; private Callback onButtonClicked; private final String navigatorEventId; public ContextualMenu(Context context, ContextualMenuParams params, StyleParams styleParams, Callback onButtonClicked) { super(context); this.params = params; this.onButtonClicked = onButtonClicked; navigatorEventId = params.navigationParams.navigatorEventId; setStyle(styleParams); setButtons(); } public void setStyle(StyleParams styleParams) { params.setButtonsColor(styleParams.contextualMenuButtonsColor); if (styleParams.contextualMenuBackgroundColor.hasColor()) { setBackgroundColor(styleParams.contextualMenuBackgroundColor.getColor()); } } public void setButtons() { addButtonsToContextualMenu(params.buttons, getMenu()); setBackButton(params.leftButton); } private void setBackButton(TitleBarLeftButtonParams leftButton) { setLeftButton(leftButton, this, null, false); } private void addButtonsToContextualMenu(List<ContextualMenuButtonParams> buttons, Menu menu) { for (int i = 0; i < buttons.size(); i++) { final TitleBarButton button = new ContextualMenuButton(menu, this, buttons.get(i), this); addButtonInReverseOrder(buttons, i, button); } } @Override public boolean onTitleBarBackButtonClick() { dismiss(); EventBus.instance.post(new ContextualMenuHiddenEvent()); return true; } @Override public void onSideMenuButtonClick() { // nothing } @Override public void onClick(int index) { dismiss(); EventBus.instance.post(new ContextualMenuHiddenEvent()); onButtonClicked.invoke(index); } public void dismiss() { hide(new Runnable() { @Override public void run() { ((ViewManager) getParent()).removeView(ContextualMenu.this); } }); NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("contextualMenuDismissed", navigatorEventId); } }