15e538c67SŁukasz Kosmaty // Copyright © 2021-present 650 Industries, Inc. (aka Expo) 25e538c67SŁukasz Kosmaty 35e538c67SŁukasz Kosmaty #pragma once 45e538c67SŁukasz Kosmaty 5*29e8b6f8SŁukasz Kosmaty #include "JNIDeallocator.h" 6*29e8b6f8SŁukasz Kosmaty 75e538c67SŁukasz Kosmaty #include <fbjni/fbjni.h> 85e538c67SŁukasz Kosmaty #include <folly/dynamic.h> 95e538c67SŁukasz Kosmaty 105e538c67SŁukasz Kosmaty #include <react/jni/WritableNativeArray.h> 115e538c67SŁukasz Kosmaty #include <react/jni/WritableNativeMap.h> 125e538c67SŁukasz Kosmaty 135e538c67SŁukasz Kosmaty namespace jni = facebook::jni; 145e538c67SŁukasz Kosmaty namespace react = facebook::react; 155e538c67SŁukasz Kosmaty 165e538c67SŁukasz Kosmaty namespace expo { 17*29e8b6f8SŁukasz Kosmaty class JSIInteropModuleRegistry; 18*29e8b6f8SŁukasz Kosmaty 19*29e8b6f8SŁukasz Kosmaty class JavaCallback : public jni::HybridClass<JavaCallback, Destructible> { 205e538c67SŁukasz Kosmaty public: 215e538c67SŁukasz Kosmaty static auto constexpr 225e538c67SŁukasz Kosmaty kJavaDescriptor = "Lexpo/modules/kotlin/jni/JavaCallback;"; 235e538c67SŁukasz Kosmaty static auto constexpr TAG = "JavaCallback"; 245e538c67SŁukasz Kosmaty 25*29e8b6f8SŁukasz Kosmaty using Callback = std::function<void(folly::dynamic)>; 26*29e8b6f8SŁukasz Kosmaty 275e538c67SŁukasz Kosmaty static void registerNatives(); 285e538c67SŁukasz Kosmaty 29*29e8b6f8SŁukasz Kosmaty static jni::local_ref<JavaCallback::javaobject> newInstance( 30*29e8b6f8SŁukasz Kosmaty JSIInteropModuleRegistry *jsiInteropModuleRegistry, 31*29e8b6f8SŁukasz Kosmaty Callback callback 32*29e8b6f8SŁukasz Kosmaty ); 33*29e8b6f8SŁukasz Kosmaty 345e538c67SŁukasz Kosmaty private: 355e538c67SŁukasz Kosmaty friend HybridBase; 365e538c67SŁukasz Kosmaty 375e538c67SŁukasz Kosmaty 385e538c67SŁukasz Kosmaty JavaCallback(Callback callback); 395e538c67SŁukasz Kosmaty 405e538c67SŁukasz Kosmaty void invoke(); 415e538c67SŁukasz Kosmaty 425e538c67SŁukasz Kosmaty void invokeBool(bool result); 435e538c67SŁukasz Kosmaty 445e538c67SŁukasz Kosmaty void invokeInt(int result); 455e538c67SŁukasz Kosmaty 465e538c67SŁukasz Kosmaty void invokeDouble(double result); 475e538c67SŁukasz Kosmaty 485e538c67SŁukasz Kosmaty void invokeFloat(float result); 495e538c67SŁukasz Kosmaty 505e538c67SŁukasz Kosmaty void invokeString(jni::alias_ref<jstring> result); 515e538c67SŁukasz Kosmaty 525e538c67SŁukasz Kosmaty void invokeArray(jni::alias_ref<react::WritableNativeArray::javaobject> result); 535e538c67SŁukasz Kosmaty 545e538c67SŁukasz Kosmaty void invokeMap(jni::alias_ref<react::WritableNativeMap::javaobject> result); 555e538c67SŁukasz Kosmaty 565e538c67SŁukasz Kosmaty Callback callback; 575e538c67SŁukasz Kosmaty }; 585e538c67SŁukasz Kosmaty } // namespace expo 59