#include "AndroidUIScheduler.h" #include #include #include #include #include namespace reanimated { using namespace facebook; using namespace react; class UISchedulerWrapper : public UIScheduler { private: jni::global_ref androidUiScheduler_; public: explicit UISchedulerWrapper( jni::global_ref androidUiScheduler) : androidUiScheduler_(androidUiScheduler) {} void scheduleOnUI(std::function job) override { UIScheduler::scheduleOnUI(job); if (!scheduledOnUI_) { scheduledOnUI_ = true; androidUiScheduler_->cthis()->scheduleTriggerOnUI(); } } ~UISchedulerWrapper() {} }; AndroidUIScheduler::AndroidUIScheduler( jni::alias_ref jThis) : javaPart_(jni::make_global(jThis)), uiScheduler_( std::make_shared(jni::make_global(jThis))) {} jni::local_ref AndroidUIScheduler::initHybrid( jni::alias_ref jThis) { return makeCxxInstance(jThis); } void AndroidUIScheduler::triggerUI() { uiScheduler_->triggerUI(); } void AndroidUIScheduler::scheduleTriggerOnUI() { static const auto method = javaPart_->getClass()->getMethod("scheduleTriggerOnUI"); method(javaPart_.get()); } void AndroidUIScheduler::registerNatives() { registerHybrid({ makeNativeMethod("initHybrid", AndroidUIScheduler::initHybrid), makeNativeMethod("triggerUI", AndroidUIScheduler::triggerUI), }); } } // namespace reanimated