package com.zoontek.rndevmenu; import com.facebook.react.ReactApplication; import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.devsupport.interfaces.DevOptionHandler; import com.facebook.react.devsupport.interfaces.DevSupportManager; import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter; import java.util.ArrayList; import java.util.List; import javax.annotation.Nullable; public class RNDevMenuModule extends ReactContextBaseJavaModule { @Nullable private List<String> mNames; public RNDevMenuModule(ReactApplicationContext reactContext) { super(reactContext); } @Override public String getName() { return "RNDevMenu"; } @ReactMethod public void addItem(final String name, Promise promise) { if (mNames == null) { mNames = new ArrayList<>(); } if (mNames.contains(name)) { promise.resolve(null); } try { ReactApplication application = (ReactApplication)getReactApplicationContext() .getCurrentActivity() .getApplication(); DevSupportManager manager = application .getReactNativeHost() .getReactInstanceManager() .getDevSupportManager(); manager.addCustomDevOption(name, new DevOptionHandler() { @Override public void onOptionSelected() { getReactApplicationContext().getJSModule(RCTDeviceEventEmitter.class) .emit("customDevOptionTap", name); } }); mNames.add(name); promise.resolve(null); } catch (Exception e) { promise.reject(e); } } }