1*ab11e3c9SKudo Chien #pragma once 2*ab11e3c9SKudo Chien 3*ab11e3c9SKudo Chien #include <unistd.h> 4*ab11e3c9SKudo Chien #include <memory> 5*ab11e3c9SKudo Chien #include <string> 6*ab11e3c9SKudo Chien #include <vector> 7*ab11e3c9SKudo Chien 8*ab11e3c9SKudo Chien #include "AnimatedSensorModule.h" 9*ab11e3c9SKudo Chien #include "ErrorHandler.h" 10*ab11e3c9SKudo Chien #include "LayoutAnimationsProxy.h" 11*ab11e3c9SKudo Chien #include "NativeReanimatedModuleSpec.h" 12*ab11e3c9SKudo Chien #include "PlatformDepMethodsHolder.h" 13*ab11e3c9SKudo Chien #include "RuntimeDecorator.h" 14*ab11e3c9SKudo Chien #include "RuntimeManager.h" 15*ab11e3c9SKudo Chien #include "Scheduler.h" 16*ab11e3c9SKudo Chien #include "SingleInstanceChecker.h" 17*ab11e3c9SKudo Chien 18*ab11e3c9SKudo Chien namespace reanimated { 19*ab11e3c9SKudo Chien 20*ab11e3c9SKudo Chien using FrameCallback = std::function<void(double)>; 21*ab11e3c9SKudo Chien 22*ab11e3c9SKudo Chien class ShareableValue; 23*ab11e3c9SKudo Chien class MutableValue; 24*ab11e3c9SKudo Chien class MapperRegistry; 25*ab11e3c9SKudo Chien class EventHandlerRegistry; 26*ab11e3c9SKudo Chien 27*ab11e3c9SKudo Chien class NativeReanimatedModule : public NativeReanimatedModuleSpec, 28*ab11e3c9SKudo Chien public RuntimeManager { 29*ab11e3c9SKudo Chien friend ShareableValue; 30*ab11e3c9SKudo Chien friend MutableValue; 31*ab11e3c9SKudo Chien 32*ab11e3c9SKudo Chien public: 33*ab11e3c9SKudo Chien NativeReanimatedModule( 34*ab11e3c9SKudo Chien std::shared_ptr<CallInvoker> jsInvoker, 35*ab11e3c9SKudo Chien std::shared_ptr<Scheduler> scheduler, 36*ab11e3c9SKudo Chien std::shared_ptr<jsi::Runtime> rt, 37*ab11e3c9SKudo Chien std::shared_ptr<ErrorHandler> errorHandler, 38*ab11e3c9SKudo Chien std::function<jsi::Value(jsi::Runtime &, const int, const jsi::String &)> 39*ab11e3c9SKudo Chien propObtainer, 40*ab11e3c9SKudo Chien std::shared_ptr<LayoutAnimationsProxy> layoutAnimationsProxy, 41*ab11e3c9SKudo Chien PlatformDepMethodsHolder platformDepMethodsHolder); 42*ab11e3c9SKudo Chien 43*ab11e3c9SKudo Chien void installCoreFunctions(jsi::Runtime &rt, const jsi::Value &valueSetter) 44*ab11e3c9SKudo Chien override; 45*ab11e3c9SKudo Chien 46*ab11e3c9SKudo Chien jsi::Value makeShareable(jsi::Runtime &rt, const jsi::Value &value) override; 47*ab11e3c9SKudo Chien jsi::Value makeMutable(jsi::Runtime &rt, const jsi::Value &value) override; 48*ab11e3c9SKudo Chien jsi::Value makeRemote(jsi::Runtime &rt, const jsi::Value &value) override; 49*ab11e3c9SKudo Chien 50*ab11e3c9SKudo Chien jsi::Value startMapper( 51*ab11e3c9SKudo Chien jsi::Runtime &rt, 52*ab11e3c9SKudo Chien const jsi::Value &worklet, 53*ab11e3c9SKudo Chien const jsi::Value &inputs, 54*ab11e3c9SKudo Chien const jsi::Value &outputs, 55*ab11e3c9SKudo Chien const jsi::Value &updater, 56*ab11e3c9SKudo Chien const jsi::Value &viewDescriptors) override; 57*ab11e3c9SKudo Chien void stopMapper(jsi::Runtime &rt, const jsi::Value &mapperId) override; 58*ab11e3c9SKudo Chien 59*ab11e3c9SKudo Chien jsi::Value registerEventHandler( 60*ab11e3c9SKudo Chien jsi::Runtime &rt, 61*ab11e3c9SKudo Chien const jsi::Value &eventHash, 62*ab11e3c9SKudo Chien const jsi::Value &worklet) override; 63*ab11e3c9SKudo Chien void unregisterEventHandler( 64*ab11e3c9SKudo Chien jsi::Runtime &rt, 65*ab11e3c9SKudo Chien const jsi::Value ®istrationId) override; 66*ab11e3c9SKudo Chien 67*ab11e3c9SKudo Chien jsi::Value getViewProp( 68*ab11e3c9SKudo Chien jsi::Runtime &rt, 69*ab11e3c9SKudo Chien const jsi::Value &viewTag, 70*ab11e3c9SKudo Chien const jsi::Value &propName, 71*ab11e3c9SKudo Chien const jsi::Value &callback) override; 72*ab11e3c9SKudo Chien 73*ab11e3c9SKudo Chien jsi::Value enableLayoutAnimations(jsi::Runtime &rt, const jsi::Value &config) 74*ab11e3c9SKudo Chien override; 75*ab11e3c9SKudo Chien jsi::Value configureProps( 76*ab11e3c9SKudo Chien jsi::Runtime &rt, 77*ab11e3c9SKudo Chien const jsi::Value &uiProps, 78*ab11e3c9SKudo Chien const jsi::Value &nativeProps) override; 79*ab11e3c9SKudo Chien 80*ab11e3c9SKudo Chien void onRender(double timestampMs); 81*ab11e3c9SKudo Chien void onEvent(std::string eventName, std::string eventAsString); 82*ab11e3c9SKudo Chien bool isAnyHandlerWaitingForEvent(std::string eventName); 83*ab11e3c9SKudo Chien 84*ab11e3c9SKudo Chien void maybeRequestRender(); 85*ab11e3c9SKudo Chien UpdaterFunction updaterFunction; 86*ab11e3c9SKudo Chien 87*ab11e3c9SKudo Chien jsi::Value registerSensor( 88*ab11e3c9SKudo Chien jsi::Runtime &rt, 89*ab11e3c9SKudo Chien const jsi::Value &sensorType, 90*ab11e3c9SKudo Chien const jsi::Value &interval, 91*ab11e3c9SKudo Chien const jsi::Value &sensorDataContainer) override; 92*ab11e3c9SKudo Chien void unregisterSensor(jsi::Runtime &rt, const jsi::Value &sensorId) override; 93*ab11e3c9SKudo Chien jsi::Value subscribeForKeyboardEvents( 94*ab11e3c9SKudo Chien jsi::Runtime &rt, 95*ab11e3c9SKudo Chien const jsi::Value &keyboardEventContainer) override; 96*ab11e3c9SKudo Chien void unsubscribeFromKeyboardEvents( 97*ab11e3c9SKudo Chien jsi::Runtime &rt, 98*ab11e3c9SKudo Chien const jsi::Value &listenerId) override; 99*ab11e3c9SKudo Chien 100*ab11e3c9SKudo Chien private: 101*ab11e3c9SKudo Chien std::shared_ptr<MapperRegistry> mapperRegistry; 102*ab11e3c9SKudo Chien std::shared_ptr<EventHandlerRegistry> eventHandlerRegistry; 103*ab11e3c9SKudo Chien std::function<void(FrameCallback &, jsi::Runtime &)> requestRender; 104*ab11e3c9SKudo Chien std::shared_ptr<jsi::Value> dummyEvent; 105*ab11e3c9SKudo Chien std::vector<FrameCallback> frameCallbacks; 106*ab11e3c9SKudo Chien bool renderRequested = false; 107*ab11e3c9SKudo Chien std::function<jsi::Value(jsi::Runtime &, const int, const jsi::String &)> 108*ab11e3c9SKudo Chien propObtainer; 109*ab11e3c9SKudo Chien std::function<void(double)> onRenderCallback; 110*ab11e3c9SKudo Chien std::shared_ptr<LayoutAnimationsProxy> layoutAnimationsProxy; 111*ab11e3c9SKudo Chien AnimatedSensorModule animatedSensorModule; 112*ab11e3c9SKudo Chien ConfigurePropsFunction configurePropsPlatformFunction; 113*ab11e3c9SKudo Chien KeyboardEventSubscribeFunction subscribeForKeyboardEventsFunction; 114*ab11e3c9SKudo Chien KeyboardEventUnsubscribeFunction unsubscribeFromKeyboardEventsFunction; 115*ab11e3c9SKudo Chien 116*ab11e3c9SKudo Chien #ifdef DEBUG 117*ab11e3c9SKudo Chien SingleInstanceChecker<NativeReanimatedModule> singleInstanceChecker_; 118*ab11e3c9SKudo Chien #endif 119*ab11e3c9SKudo Chien }; 120*ab11e3c9SKudo Chien 121*ab11e3c9SKudo Chien } // namespace reanimated 122