1 // Copyright © 2021-present 650 Industries, Inc. (aka Expo)
2 
3 #pragma once
4 
5 #include <jni.h>
6 #include <fbjni/fbjni.h>
7 #include <jsi/jsi.h>
8 
9 #include <memory>
10 
11 #include <ReactCommon/CallInvokerHolder.h>
12 #include <ReactCommon/CallInvoker.h>
13 
14 #include "JPlayerData.h"
15 
16 namespace expo {
17   namespace av {
18 
19     namespace jni = facebook::jni;
20 
21     class JAVManager : public jni::HybridClass<JAVManager> {
22     public:
23       static auto constexpr kJavaDescriptor = "Lexpo/modules/av/AVManager;";
24       static auto constexpr TAG = "JAVManager";
25 
26       static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
27 
28       static void registerNatives();
29 
30       void installJSIBindings(jlong jsRuntimePointer,
31                               jni::alias_ref<facebook::react::CallInvokerHolder::javaobject> jsCallInvokerHolder);
32 
33     private:
34       friend HybridBase;
35       jni::global_ref<JAVManager::javaobject> javaPart_;
36 
JAVManager(jni::alias_ref<jhybridobject> jThis)37       explicit JAVManager(jni::alias_ref<jhybridobject> jThis) :
38         javaPart_(jni::make_global(jThis)) {}
39 
40       JPlayerData *getMediaPlayerById(int id);
41     };
42 
43   } // namespace av
44 } // namespace expo
45