1 // Copyright © 2021-present 650 Industries, Inc. (aka Expo)
2
3 #include "JavaCallback.h"
4 #include "JSIInteropModuleRegistry.h"
5
6 namespace expo {
7
JavaCallback(Callback callback)8 JavaCallback::JavaCallback(Callback callback)
9 : callback(std::move(callback)) {}
10
11
registerNatives()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
newInstance(JSIInteropModuleRegistry * jsiInteropModuleRegistry,Callback callback)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
invoke()34 void JavaCallback::invoke() {
35 callback(nullptr);
36 }
37
invokeBool(bool result)38 void JavaCallback::invokeBool(bool result) {
39 callback(result);
40 }
41
invokeInt(int result)42 void JavaCallback::invokeInt(int result) {
43 callback(result);
44 }
45
invokeDouble(double result)46 void JavaCallback::invokeDouble(double result) {
47 callback(result);
48 }
49
invokeFloat(float result)50 void JavaCallback::invokeFloat(float result) {
51 callback(result);
52 }
53
invokeString(jni::alias_ref<jstring> result)54 void JavaCallback::invokeString(jni::alias_ref<jstring> result) {
55 callback(result->toStdString());
56 }
57
invokeArray(jni::alias_ref<react::WritableNativeArray::javaobject> result)58 void JavaCallback::invokeArray(jni::alias_ref<react::WritableNativeArray::javaobject> result) {
59 callback(result->cthis()->consume());
60 }
61
invokeMap(jni::alias_ref<react::WritableNativeMap::javaobject> result)62 void JavaCallback::invokeMap(jni::alias_ref<react::WritableNativeMap::javaobject> result) {
63 callback(result->cthis()->consume());
64 }
65 } // namespace expo
66