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