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