1 // Copyright © 2021-present 650 Industries, Inc. (aka Expo) 2 3 #include "JavaCallback.h" 4 #include "JSIInteropModuleRegistry.h" 5 6 namespace expo { 7 8 JavaCallback::JavaCallback(Callback callback) 9 : callback(std::move(callback)) {} 10 11 12 void JavaCallback::registerNatives() { 13 registerHybrid({ 14 makeNativeMethod("invoke", JavaCallback::invoke), 15 makeNativeMethod("invoke", JavaCallback::invokeBool), 16 makeNativeMethod("invoke", JavaCallback::invokeInt), 17 makeNativeMethod("invoke", JavaCallback::invokeDouble), 18 makeNativeMethod("invoke", JavaCallback::invokeFloat), 19 makeNativeMethod("invoke", JavaCallback::invokeString), 20 makeNativeMethod("invoke", JavaCallback::invokeArray), 21 makeNativeMethod("invoke", JavaCallback::invokeMap), 22 }); 23 } 24 25 jni::local_ref<JavaCallback::javaobject> JavaCallback::newInstance( 26 JSIInteropModuleRegistry *jsiInteropModuleRegistry, 27 Callback callback 28 ) { 29 auto object = JavaCallback::newObjectCxxArgs(std::move(callback)); 30 jsiInteropModuleRegistry->jniDeallocator->addReference(object); 31 return object; 32 } 33 34 void JavaCallback::invoke() { 35 callback(nullptr); 36 } 37 38 void JavaCallback::invokeBool(bool result) { 39 callback(result); 40 } 41 42 void JavaCallback::invokeInt(int result) { 43 callback(result); 44 } 45 46 void JavaCallback::invokeDouble(double result) { 47 callback(result); 48 } 49 50 void JavaCallback::invokeFloat(float result) { 51 callback(result); 52 } 53 54 void JavaCallback::invokeString(jni::alias_ref<jstring> result) { 55 callback(result->toStdString()); 56 } 57 58 void JavaCallback::invokeArray(jni::alias_ref<react::WritableNativeArray::javaobject> result) { 59 callback(result->cthis()->consume()); 60 } 61 62 void JavaCallback::invokeMap(jni::alias_ref<react::WritableNativeMap::javaobject> result) { 63 callback(result->cthis()->consume()); 64 } 65 } // namespace expo 66