mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Make StatusBarManager use main queue setup (#50113)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/50113 ## Rationale Rendering can now include main -> js sync calls. If we allow js -> main sync calls during rendering, react native can deadlock. So, this diff moves the js -> main sync calls to "main queue module setup", which occurs before rendering. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D71348559 fbshipit-source-id: 918f145d817866a5d08087c1a4a0e151f783109e
This commit is contained in:
committed by
Facebook GitHub Bot
parent
2b03fd74cb
commit
b4775ebb39
@@ -27,15 +27,10 @@ RCT_EXPORT_METHOD(setNetworkActivityIndicatorVisible : (BOOL)visible) {}
|
||||
|
||||
- (facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants>)getConstants
|
||||
{
|
||||
__block facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants> constants;
|
||||
RCTUnsafeExecuteOnMainQueueSync(^{
|
||||
constants = facebook::react::typedConstants<JS::NativeStatusBarManagerIOS::Constants>({
|
||||
.HEIGHT = 0,
|
||||
.DEFAULT_BACKGROUND_COLOR = std::nullopt,
|
||||
});
|
||||
return facebook::react::typedConstants<JS::NativeStatusBarManagerIOS::Constants>({
|
||||
.HEIGHT = 0,
|
||||
.DEFAULT_BACKGROUND_COLOR = std::nullopt,
|
||||
});
|
||||
|
||||
return constants;
|
||||
}
|
||||
|
||||
- (facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants>)constantsToExport
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#import "CoreModulesPlugins.h"
|
||||
|
||||
#import <React/RCTEventDispatcherProtocol.h>
|
||||
#import <React/RCTInitializing.h>
|
||||
#import <React/RCTLog.h>
|
||||
#import <React/RCTUtils.h>
|
||||
|
||||
@@ -47,10 +48,12 @@ RCT_ENUM_CONVERTER(
|
||||
|
||||
@end
|
||||
|
||||
@interface RCTStatusBarManager () <NativeStatusBarManagerIOSSpec>
|
||||
@interface RCTStatusBarManager () <NativeStatusBarManagerIOSSpec, RCTInitializing>
|
||||
@end
|
||||
|
||||
@implementation RCTStatusBarManager
|
||||
@implementation RCTStatusBarManager {
|
||||
facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants> _constants;
|
||||
}
|
||||
|
||||
static BOOL RCTViewControllerBasedStatusBarAppearance()
|
||||
{
|
||||
@@ -72,6 +75,14 @@ RCT_EXPORT_MODULE()
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)initialize
|
||||
{
|
||||
_constants = facebook::react::typedConstants<JS::NativeStatusBarManagerIOS::Constants>({
|
||||
.HEIGHT = RCTUIStatusBarManager().statusBarFrame.size.height,
|
||||
.DEFAULT_BACKGROUND_COLOR = std::nullopt,
|
||||
});
|
||||
}
|
||||
|
||||
- (NSArray<NSString *> *)supportedEvents
|
||||
{
|
||||
return @[ kStatusBarFrameDidChange, kStatusBarFrameWillChange ];
|
||||
@@ -177,15 +188,7 @@ RCT_EXPORT_METHOD(setNetworkActivityIndicatorVisible : (BOOL)visible)
|
||||
|
||||
- (facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants>)getConstants
|
||||
{
|
||||
__block facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants> constants;
|
||||
RCTUnsafeExecuteOnMainQueueSync(^{
|
||||
constants = facebook::react::typedConstants<JS::NativeStatusBarManagerIOS::Constants>({
|
||||
.HEIGHT = RCTUIStatusBarManager().statusBarFrame.size.height,
|
||||
.DEFAULT_BACKGROUND_COLOR = std::nullopt,
|
||||
});
|
||||
});
|
||||
|
||||
return constants;
|
||||
return _constants;
|
||||
}
|
||||
|
||||
- (facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants>)constantsToExport
|
||||
|
||||
@@ -159,6 +159,9 @@
|
||||
},
|
||||
"PlatformConstants": {
|
||||
"unstableRequiresMainQueueSetup": true
|
||||
},
|
||||
"StatusBarManager": {
|
||||
"unstableRequiresMainQueueSetup": true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user