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