Created
July 31, 2018 15:53
-
-
Save sjchmiela/cbe0738171be44feb04f6342a5c352b8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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