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