1*04819bfdSŁukasz Kosmaty #include "AndroidScheduler.h" 2*04819bfdSŁukasz Kosmaty #include <android/log.h> 3*04819bfdSŁukasz Kosmaty #include <fbjni/fbjni.h> 4*04819bfdSŁukasz Kosmaty #include <jsi/jsi.h> 5*04819bfdSŁukasz Kosmaty #include <memory> 6*04819bfdSŁukasz Kosmaty #include <string> 7*04819bfdSŁukasz Kosmaty 8*04819bfdSŁukasz Kosmaty namespace reanimated { 9*04819bfdSŁukasz Kosmaty 10*04819bfdSŁukasz Kosmaty using namespace facebook; 11*04819bfdSŁukasz Kosmaty using namespace react; 12*04819bfdSŁukasz Kosmaty 13*04819bfdSŁukasz Kosmaty class SchedulerWrapper : public Scheduler { 14*04819bfdSŁukasz Kosmaty private: 15*04819bfdSŁukasz Kosmaty jni::global_ref<AndroidScheduler::javaobject> scheduler_; 16*04819bfdSŁukasz Kosmaty 17*04819bfdSŁukasz Kosmaty public: SchedulerWrapper(jni::global_ref<AndroidScheduler::javaobject> scheduler)18*04819bfdSŁukasz Kosmaty explicit SchedulerWrapper( 19*04819bfdSŁukasz Kosmaty jni::global_ref<AndroidScheduler::javaobject> scheduler) 20*04819bfdSŁukasz Kosmaty : scheduler_(scheduler) {} 21*04819bfdSŁukasz Kosmaty scheduleOnUI(std::function<void ()> job)22*04819bfdSŁukasz Kosmaty void scheduleOnUI(std::function<void()> job) override { 23*04819bfdSŁukasz Kosmaty Scheduler::scheduleOnUI(job); 24*04819bfdSŁukasz Kosmaty if (!scheduledOnUI) { 25*04819bfdSŁukasz Kosmaty scheduledOnUI = true; 26*04819bfdSŁukasz Kosmaty scheduler_->cthis()->scheduleOnUI(); 27*04819bfdSŁukasz Kosmaty } 28*04819bfdSŁukasz Kosmaty } 29*04819bfdSŁukasz Kosmaty ~SchedulerWrapper()30*04819bfdSŁukasz Kosmaty ~SchedulerWrapper() {} 31*04819bfdSŁukasz Kosmaty }; 32*04819bfdSŁukasz Kosmaty AndroidScheduler(jni::alias_ref<AndroidScheduler::javaobject> jThis)33*04819bfdSŁukasz KosmatyAndroidScheduler::AndroidScheduler( 34*04819bfdSŁukasz Kosmaty jni::alias_ref<AndroidScheduler::javaobject> jThis) 35*04819bfdSŁukasz Kosmaty : javaPart_(jni::make_global(jThis)), 36*04819bfdSŁukasz Kosmaty scheduler_(new SchedulerWrapper(jni::make_global(jThis))) {} 37*04819bfdSŁukasz Kosmaty initHybrid(jni::alias_ref<jhybridobject> jThis)38*04819bfdSŁukasz Kosmatyjni::local_ref<AndroidScheduler::jhybriddata> AndroidScheduler::initHybrid( 39*04819bfdSŁukasz Kosmaty jni::alias_ref<jhybridobject> jThis) { 40*04819bfdSŁukasz Kosmaty return makeCxxInstance(jThis); 41*04819bfdSŁukasz Kosmaty } 42*04819bfdSŁukasz Kosmaty triggerUI()43*04819bfdSŁukasz Kosmatyvoid AndroidScheduler::triggerUI() { 44*04819bfdSŁukasz Kosmaty scheduler_->triggerUI(); 45*04819bfdSŁukasz Kosmaty } 46*04819bfdSŁukasz Kosmaty scheduleOnUI()47*04819bfdSŁukasz Kosmatyvoid AndroidScheduler::scheduleOnUI() { 48*04819bfdSŁukasz Kosmaty static auto method = javaPart_->getClass()->getMethod<void()>("scheduleOnUI"); 49*04819bfdSŁukasz Kosmaty method(javaPart_.get()); 50*04819bfdSŁukasz Kosmaty } 51*04819bfdSŁukasz Kosmaty registerNatives()52*04819bfdSŁukasz Kosmatyvoid AndroidScheduler::registerNatives() { 53*04819bfdSŁukasz Kosmaty registerHybrid({ 54*04819bfdSŁukasz Kosmaty makeNativeMethod("initHybrid", AndroidScheduler::initHybrid), 55*04819bfdSŁukasz Kosmaty makeNativeMethod("triggerUI", AndroidScheduler::triggerUI), 56*04819bfdSŁukasz Kosmaty }); 57*04819bfdSŁukasz Kosmaty } 58*04819bfdSŁukasz Kosmaty 59*04819bfdSŁukasz Kosmaty } // namespace reanimated 60