Skip to content

Instantly share code, notes, and snippets.

@sjchmiela
Created July 31, 2018 15:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sjchmiela/cbe0738171be44feb04f6342a5c352b8 to your computer and use it in GitHub Desktop.
Save sjchmiela/cbe0738171be44feb04f6342a5c352b8 to your computer and use it in GitHub Desktop.
package host.exp.exponent;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import org.json.JSONObject;
import java.util.List;
import java.util.Map;
import expo.adapters.react.ReactAdapterPackage;
import expo.core.ModuleRegistry;
import expo.core.ModuleRegistryProvider;
import expo.core.interfaces.InternalModule;
import host.exp.exponent.experience.DetachedModuleRegistryAdapter;
import host.exp.exponent.kernel.ExperienceId;
import host.exp.exponent.utils.ScopedContext;
import versioned.host.exp.exponent.modules.universal.ConstantsBinding;
public class MyModuleRegistryAdapter extends DetachedModuleRegistryAdapter {
private ReactAdapterPackage mReactAdapterPackage = new ReactAdapterPackage();
public MyModuleRegistryAdapter(ModuleRegistryProvider moduleRegistryProvider) {
super(moduleRegistryProvider);
}
@Override
public List<NativeModule> createNativeModules(ScopedContext scopedContext, ExperienceId experienceId, Map<String, Object> experienceProperties, JSONObject manifest, List<NativeModule> otherModules) {
ReactApplicationContext reactApplicationContext = (ReactApplicationContext) scopedContext.getContext();
// We only use React application context, because we're detached -- no scopes
ModuleRegistry moduleRegistry = mModuleRegistryProvider.get(reactApplicationContext);
moduleRegistry.registerInternalModule(new ConstantsBinding(scopedContext, experienceProperties, manifest));
// ReactAdapterPackage requires ReactContext
ReactApplicationContext reactContext = (ReactApplicationContext) scopedContext.getContext();
for (InternalModule internalModule : mReactAdapterPackage.createInternalModules(reactContext)) {
moduleRegistry.registerInternalModule(internalModule);
}
moduleRegistry.registerInternalModule(new MyUIManagerModuleWrapper(reactContext, experienceId, manifest.optString(ExponentManifest.MANIFEST_NAME_KEY)));
return getNativeModulesFromModuleRegistry(reactApplicationContext, moduleRegistry);
}
}
package host.exp.exponent;
import com.facebook.react.bridge.ReactContext;
import expo.adapters.react.services.UIManagerModuleWrapper;
import expo.interfaces.permissions.PermissionsListener;
import host.exp.exponent.kernel.ExperienceId;
import host.exp.expoview.Exponent;
public class MyUIManagerModuleWrapper extends UIManagerModuleWrapper {
private final String mExperienceName;
private final ExperienceId mExperienceId;
MyUIManagerModuleWrapper(ReactContext reactContext, ExperienceId experienceId, String experienceName) {
super(reactContext);
this.mExperienceId = experienceId;
this.mExperienceName = experienceName;
}
public boolean requestPermissions(final String[] permissions, int requestCode, final PermissionsListener listener) {
return Exponent.getInstance().requestPermissions(new host.exp.expoview.Exponent.PermissionsListener() {
public void permissionsGranted() {
listener.onPermissionResult(permissions, MyUIManagerModuleWrapper.arrayFilled(0, permissions.length));
}
public void permissionsDenied() {
listener.onPermissionResult(permissions, MyUIManagerModuleWrapper.arrayFilled(-1, permissions.length));
}
}, permissions, this.mExperienceId, this.mExperienceName);
}
private static int[] arrayFilled(int with, int length) {
int[] array = new int[length];
for(int i = 0; i < length; ++i) {
array[i] = with;
}
return array;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment