From 2c6211c2dd426e47e1044a7784a1fb7a97414d38 Mon Sep 17 00:00:00 2001 From: Andrei Shikov Date: Thu, 21 Apr 2022 08:45:01 -0700 Subject: [PATCH] Expose UIManager from Scheduler (#33545) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/33545 Exposes `UIManager` instance for access from third-party modules. Changelog: [Changed] Exposes `UIManager` instance for third-party access. Reviewed By: javache Differential Revision: D35314058 fbshipit-source-id: 8640911c24a19c48fe6a4141cfec26c9427fb9c3 --- React/Fabric/RCTScheduler.h | 2 ++ React/Fabric/RCTScheduler.mm | 5 +++++ ReactCommon/react/renderer/scheduler/Scheduler.cpp | 4 ++++ ReactCommon/react/renderer/scheduler/Scheduler.h | 3 +++ 4 files changed, 14 insertions(+) diff --git a/React/Fabric/RCTScheduler.h b/React/Fabric/RCTScheduler.h index c9ee613b8219c7..29d0f7038cf8a0 100644 --- a/React/Fabric/RCTScheduler.h +++ b/React/Fabric/RCTScheduler.h @@ -16,6 +16,7 @@ #import #import #import +#import #import NS_ASSUME_NONNULL_BEGIN @@ -48,6 +49,7 @@ NS_ASSUME_NONNULL_BEGIN @interface RCTScheduler : NSObject @property (atomic, weak, nullable) id delegate; +@property (readonly, nullable) facebook::react::UIManager const *uiManager; - (instancetype)initWithToolbox:(facebook::react::SchedulerToolbox)toolbox; diff --git a/React/Fabric/RCTScheduler.mm b/React/Fabric/RCTScheduler.mm index b8921fdabe2f2a..0c42e2157877af 100644 --- a/React/Fabric/RCTScheduler.mm +++ b/React/Fabric/RCTScheduler.mm @@ -203,4 +203,9 @@ - (void)removeEventListener:(std::shared_ptr const &)listener return _scheduler->removeEventListener(listener); } +- (facebook::react::UIManager const *)uiManager +{ + return _scheduler->getUIManager().get(); +} + @end diff --git a/ReactCommon/react/renderer/scheduler/Scheduler.cpp b/ReactCommon/react/renderer/scheduler/Scheduler.cpp index 5161f5c9fca18c..01cf24e7c1fa57 100644 --- a/ReactCommon/react/renderer/scheduler/Scheduler.cpp +++ b/ReactCommon/react/renderer/scheduler/Scheduler.cpp @@ -368,6 +368,10 @@ ContextContainer::Shared Scheduler::getContextContainer() const { return contextContainer_; } +std::shared_ptr Scheduler::getUIManager() const { + return uiManager_; +} + void Scheduler::addEventListener( const std::shared_ptr &listener) { if (eventDispatcher_->has_value()) { diff --git a/ReactCommon/react/renderer/scheduler/Scheduler.h b/ReactCommon/react/renderer/scheduler/Scheduler.h index f06adbaadf14ca..626572a073f23f 100644 --- a/ReactCommon/react/renderer/scheduler/Scheduler.h +++ b/ReactCommon/react/renderer/scheduler/Scheduler.h @@ -108,6 +108,9 @@ class Scheduler final : public UIManagerDelegate { #pragma mark - ContextContainer ContextContainer::Shared getContextContainer() const; +#pragma mark - UIManager + std::shared_ptr getUIManager() const; + #pragma mark - Event listeners void addEventListener(const std::shared_ptr &listener); void removeEventListener(