15e538c67SŁukasz Kosmaty // Copyright © 2021-present 650 Industries, Inc. (aka Expo)
25e538c67SŁukasz Kosmaty
35e538c67SŁukasz Kosmaty #include "JavaCallback.h"
4*29e8b6f8SŁukasz Kosmaty #include "JSIInteropModuleRegistry.h"
55e538c67SŁukasz Kosmaty
65e538c67SŁukasz Kosmaty namespace expo {
75e538c67SŁukasz Kosmaty
JavaCallback(Callback callback)85e538c67SŁukasz Kosmaty JavaCallback::JavaCallback(Callback callback)
95e538c67SŁukasz Kosmaty : callback(std::move(callback)) {}
105e538c67SŁukasz Kosmaty
115e538c67SŁukasz Kosmaty
registerNatives()125e538c67SŁukasz Kosmaty void JavaCallback::registerNatives() {
135e538c67SŁukasz Kosmaty registerHybrid({
145e538c67SŁukasz Kosmaty makeNativeMethod("invoke", JavaCallback::invoke),
155e538c67SŁukasz Kosmaty makeNativeMethod("invoke", JavaCallback::invokeBool),
165e538c67SŁukasz Kosmaty makeNativeMethod("invoke", JavaCallback::invokeInt),
175e538c67SŁukasz Kosmaty makeNativeMethod("invoke", JavaCallback::invokeDouble),
185e538c67SŁukasz Kosmaty makeNativeMethod("invoke", JavaCallback::invokeFloat),
195e538c67SŁukasz Kosmaty makeNativeMethod("invoke", JavaCallback::invokeString),
205e538c67SŁukasz Kosmaty makeNativeMethod("invoke", JavaCallback::invokeArray),
215e538c67SŁukasz Kosmaty makeNativeMethod("invoke", JavaCallback::invokeMap),
225e538c67SŁukasz Kosmaty });
235e538c67SŁukasz Kosmaty }
245e538c67SŁukasz Kosmaty
newInstance(JSIInteropModuleRegistry * jsiInteropModuleRegistry,Callback callback)25*29e8b6f8SŁukasz Kosmaty jni::local_ref<JavaCallback::javaobject> JavaCallback::newInstance(
26*29e8b6f8SŁukasz Kosmaty JSIInteropModuleRegistry *jsiInteropModuleRegistry,
27*29e8b6f8SŁukasz Kosmaty Callback callback
28*29e8b6f8SŁukasz Kosmaty ) {
29*29e8b6f8SŁukasz Kosmaty auto object = JavaCallback::newObjectCxxArgs(std::move(callback));
30*29e8b6f8SŁukasz Kosmaty jsiInteropModuleRegistry->jniDeallocator->addReference(object);
31*29e8b6f8SŁukasz Kosmaty return object;
32*29e8b6f8SŁukasz Kosmaty }
335e538c67SŁukasz Kosmaty
invoke()345e538c67SŁukasz Kosmaty void JavaCallback::invoke() {
355e538c67SŁukasz Kosmaty callback(nullptr);
365e538c67SŁukasz Kosmaty }
375e538c67SŁukasz Kosmaty
invokeBool(bool result)385e538c67SŁukasz Kosmaty void JavaCallback::invokeBool(bool result) {
395e538c67SŁukasz Kosmaty callback(result);
405e538c67SŁukasz Kosmaty }
415e538c67SŁukasz Kosmaty
invokeInt(int result)425e538c67SŁukasz Kosmaty void JavaCallback::invokeInt(int result) {
435e538c67SŁukasz Kosmaty callback(result);
445e538c67SŁukasz Kosmaty }
455e538c67SŁukasz Kosmaty
invokeDouble(double result)465e538c67SŁukasz Kosmaty void JavaCallback::invokeDouble(double result) {
475e538c67SŁukasz Kosmaty callback(result);
485e538c67SŁukasz Kosmaty }
495e538c67SŁukasz Kosmaty
invokeFloat(float result)505e538c67SŁukasz Kosmaty void JavaCallback::invokeFloat(float result) {
515e538c67SŁukasz Kosmaty callback(result);
525e538c67SŁukasz Kosmaty }
535e538c67SŁukasz Kosmaty
invokeString(jni::alias_ref<jstring> result)545e538c67SŁukasz Kosmaty void JavaCallback::invokeString(jni::alias_ref<jstring> result) {
555e538c67SŁukasz Kosmaty callback(result->toStdString());
565e538c67SŁukasz Kosmaty }
575e538c67SŁukasz Kosmaty
invokeArray(jni::alias_ref<react::WritableNativeArray::javaobject> result)585e538c67SŁukasz Kosmaty void JavaCallback::invokeArray(jni::alias_ref<react::WritableNativeArray::javaobject> result) {
595e538c67SŁukasz Kosmaty callback(result->cthis()->consume());
605e538c67SŁukasz Kosmaty }
615e538c67SŁukasz Kosmaty
invokeMap(jni::alias_ref<react::WritableNativeMap::javaobject> result)625e538c67SŁukasz Kosmaty void JavaCallback::invokeMap(jni::alias_ref<react::WritableNativeMap::javaobject> result) {
635e538c67SŁukasz Kosmaty callback(result->cthis()->consume());
645e538c67SŁukasz Kosmaty }
655e538c67SŁukasz Kosmaty } // namespace expo
66