1 // Copyright © 2021-present 650 Industries, Inc. (aka Expo) 2 3 #pragma once 4 5 #include "JNIDeallocator.h" 6 7 #include <fbjni/fbjni.h> 8 #include <folly/dynamic.h> 9 10 #include <react/jni/WritableNativeArray.h> 11 #include <react/jni/WritableNativeMap.h> 12 13 namespace jni = facebook::jni; 14 namespace react = facebook::react; 15 16 namespace expo { 17 class JSIInteropModuleRegistry; 18 19 class JavaCallback : public jni::HybridClass<JavaCallback, Destructible> { 20 public: 21 static auto constexpr 22 kJavaDescriptor = "Lexpo/modules/kotlin/jni/JavaCallback;"; 23 static auto constexpr TAG = "JavaCallback"; 24 25 using Callback = std::function<void(folly::dynamic)>; 26 27 static void registerNatives(); 28 29 static jni::local_ref<JavaCallback::javaobject> newInstance( 30 JSIInteropModuleRegistry *jsiInteropModuleRegistry, 31 Callback callback 32 ); 33 34 private: 35 friend HybridBase; 36 37 38 JavaCallback(Callback callback); 39 40 void invoke(); 41 42 void invokeBool(bool result); 43 44 void invokeInt(int result); 45 46 void invokeDouble(double result); 47 48 void invokeFloat(float result); 49 50 void invokeString(jni::alias_ref<jstring> result); 51 52 void invokeArray(jni::alias_ref<react::WritableNativeArray::javaobject> result); 53 54 void invokeMap(jni::alias_ref<react::WritableNativeMap::javaobject> result); 55 56 Callback callback; 57 }; 58 } // namespace expo 59