Skip to content

Commit 220034c

Browse files
javachefacebook-github-bot
authored andcommitted
Configure requiresMainQueueSetup for core modules
Reviewed By: fkgozali Differential Revision: D5528305 fbshipit-source-id: f17cad933685be09784b2246f44baf252bfa5a26
1 parent d42ccca commit 220034c

File tree

14 files changed

+96
-50
lines changed

14 files changed

+96
-50
lines changed

Libraries/Blob/RCTBlobManager.m

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ @implementation RCTBlobManager
3232

3333
@synthesize bridge = _bridge;
3434

35+
+ (BOOL)requiresMainQueueSetup
36+
{
37+
return NO;
38+
}
39+
3540
- (NSDictionary<NSString *, id> *)constantsToExport
3641
{
3742
return @{

Libraries/Settings/RCTSettingsManager.m

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,38 +24,40 @@ @implementation RCTSettingsManager
2424

2525
RCT_EXPORT_MODULE()
2626

27+
+ (BOOL)requiresMainQueueSetup
28+
{
29+
return NO;
30+
}
31+
32+
- (instancetype)init
33+
{
34+
return [self initWithUserDefaults:[NSUserDefaults standardUserDefaults]];
35+
}
36+
2737
- (instancetype)initWithUserDefaults:(NSUserDefaults *)defaults
2838
{
2939
if ((self = [self init])) {
3040
_defaults = defaults;
41+
42+
43+
[[NSNotificationCenter defaultCenter] addObserver:self
44+
selector:@selector(userDefaultsDidChange:)
45+
name:NSUserDefaultsDidChangeNotification
46+
object:_defaults];
3147
}
3248
return self;
3349
}
3450

35-
- (void)setBridge:(RCTBridge *)bridge
51+
- (void)dealloc
3652
{
37-
_bridge = bridge;
38-
39-
if (!_defaults) {
40-
_defaults = [NSUserDefaults standardUserDefaults];
41-
}
42-
43-
[[NSNotificationCenter defaultCenter] addObserver:self
44-
selector:@selector(userDefaultsDidChange:)
45-
name:NSUserDefaultsDidChangeNotification
46-
object:_defaults];
53+
[[NSNotificationCenter defaultCenter] removeObserver:self];
4754
}
4855

4956
- (NSDictionary<NSString *, id> *)constantsToExport
5057
{
5158
return @{@"settings": RCTJSONClean([_defaults dictionaryRepresentation])};
5259
}
5360

54-
- (void)dealloc
55-
{
56-
[[NSNotificationCenter defaultCenter] removeObserver:self];
57-
}
58-
5961
- (void)userDefaultsDidChange:(NSNotification *)note
6062
{
6163
if (_ignoringUpdates) {

RNTester/RNTesterUnitTests/RCTModuleInitNotificationRaceTests.m

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ - (void)dealloc
7171

7272
@end
7373

74-
7574
@interface RCTModuleInitNotificationRaceTests : XCTestCase <RCTBridgeDelegate>
7675
{
7776
RCTBridge *_bridge;
@@ -98,6 +97,10 @@ - (void)setUp
9897

9998
_notificationObserver = [RCTNotificationObserverModule new];
10099
_bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:nil];
100+
101+
dispatch_async(dispatch_get_main_queue(), ^{
102+
[[self->_bridge uiManager] constantsToExport];
103+
});
101104
}
102105

103106
- (void)tearDown

React/Base/RCTPlatform.m

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313

1414
#import "RCTUtils.h"
1515

16-
@implementation RCTPlatform
17-
1816
static NSString *interfaceIdiom(UIUserInterfaceIdiom idiom) {
1917
switch(idiom) {
2018
case UIUserInterfaceIdiomPhone:
@@ -30,8 +28,15 @@ @implementation RCTPlatform
3028
}
3129
}
3230

31+
@implementation RCTPlatform
32+
3333
RCT_EXPORT_MODULE(PlatformConstants)
3434

35+
+ (BOOL)requiresMainQueueSetup
36+
{
37+
return YES;
38+
}
39+
3540
- (NSDictionary<NSString *, id> *)constantsToExport
3641
{
3742
UIDevice *device = [UIDevice currentDevice];

React/DevSupport/RCTDevLoadingView.m

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,9 @@ - (void)dealloc
4141
[[NSNotificationCenter defaultCenter] removeObserver:self];
4242
}
4343

44-
- (instancetype)init
44+
+ (BOOL)requiresMainQueueSetup
4545
{
46-
// We're only overriding this to ensure the module gets created at startup
47-
// TODO (t11106126): Remove once we have more declarative control over module setup.
48-
return [super init];
46+
return YES;
4947
}
5048

5149
- (void)setBridge:(RCTBridge *)bridge

React/DevSupport/RCTDevMenu.m

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ + (void)initialize
9999
RCTSwapInstanceMethods([UIWindow class], @selector(motionEnded:withEvent:), @selector(RCT_motionEnded:withEvent:));
100100
}
101101

102+
+ (BOOL)requiresMainQueueSetup
103+
{
104+
return YES;
105+
}
106+
102107
- (instancetype)init
103108
{
104109
if ((self = [super init])) {

React/Modules/RCTAccessibilityManager.m

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,7 @@
1717

1818
NSString *const RCTAccessibilityManagerDidUpdateMultiplierNotification = @"RCTAccessibilityManagerDidUpdateMultiplierNotification";
1919

20-
@interface RCTAccessibilityManager ()
21-
22-
@property (nonatomic, copy) NSString *contentSizeCategory;
23-
@property (nonatomic, assign) CGFloat multiplier;
24-
25-
@end
26-
27-
@implementation RCTAccessibilityManager
28-
29-
@synthesize bridge = _bridge;
30-
@synthesize multipliers = _multipliers;
31-
32-
RCT_EXPORT_MODULE()
33-
34-
+ (NSDictionary<NSString *, NSString *> *)JSToUIKitMap
20+
static NSString *UIKitCategoryFromJSCategory(NSString *JSCategory)
3521
{
3622
static NSDictionary *map = nil;
3723
static dispatch_once_t onceToken;
@@ -49,12 +35,26 @@ @implementation RCTAccessibilityManager
4935
@"accessibilityExtraExtraLarge": UIContentSizeCategoryAccessibilityExtraExtraLarge,
5036
@"accessibilityExtraExtraExtraLarge": UIContentSizeCategoryAccessibilityExtraExtraExtraLarge};
5137
});
52-
return map;
38+
return map[JSCategory];
5339
}
5440

55-
+ (NSString *)UIKitCategoryFromJSCategory:(NSString *)JSCategory
41+
@interface RCTAccessibilityManager ()
42+
43+
@property (nonatomic, copy) NSString *contentSizeCategory;
44+
@property (nonatomic, assign) CGFloat multiplier;
45+
46+
@end
47+
48+
@implementation RCTAccessibilityManager
49+
50+
@synthesize bridge = _bridge;
51+
@synthesize multipliers = _multipliers;
52+
53+
RCT_EXPORT_MODULE()
54+
55+
+ (BOOL)requiresMainQueueSetup
5656
{
57-
return [self JSToUIKitMap][JSCategory];
57+
return YES;
5858
}
5959

6060
- (instancetype)init
@@ -71,7 +71,7 @@ - (instancetype)init
7171
selector:@selector(didReceiveNewVoiceOverStatus:)
7272
name:UIAccessibilityVoiceOverStatusChanged
7373
object:nil];
74-
74+
7575
[[NSNotificationCenter defaultCenter] addObserver:self
7676
selector:@selector(accessibilityAnnouncementDidFinish:)
7777
name:UIAccessibilityAnnouncementDidFinishNotification
@@ -112,7 +112,7 @@ - (void)accessibilityAnnouncementDidFinish:(__unused NSNotification *)notificati
112112
// Response dictionary to populate the event with.
113113
NSDictionary *response = @{@"announcement": userInfo[UIAccessibilityAnnouncementKeyStringValue],
114114
@"success": userInfo[UIAccessibilityAnnouncementKeyWasSuccessful]};
115-
115+
116116
#pragma clang diagnostic push
117117
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
118118
[_bridge.eventDispatcher sendDeviceEventWithName:@"announcementDidFinish"
@@ -176,7 +176,7 @@ - (void)setMultipliers:(NSDictionary<NSString *, NSNumber *> *)multipliers
176176
NSMutableDictionary<NSString *, NSNumber *> *multipliers = [NSMutableDictionary new];
177177
for (NSString *__nonnull JSCategory in JSMultipliers) {
178178
NSNumber *m = [RCTConvert NSNumber:JSMultipliers[JSCategory]];
179-
NSString *UIKitCategory = [[self class] UIKitCategoryFromJSCategory:JSCategory];
179+
NSString *UIKitCategory = UIKitCategoryFromJSCategory(JSCategory);
180180
multipliers[UIKitCategory] = m;
181181
}
182182
self.multipliers = multipliers;

React/Modules/RCTAppState.m

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
static NSString *RCTCurrentAppBackgroundState()
1818
{
19-
RCTAssertMainQueue();
20-
2119
static NSDictionary *states;
2220
static dispatch_once_t onceToken;
2321
dispatch_once(&onceToken, ^{
@@ -41,6 +39,13 @@ @implementation RCTAppState
4139

4240
RCT_EXPORT_MODULE()
4341

42+
+ (BOOL)requiresMainQueueSetup
43+
{
44+
// UIApplication.applicationState seems reasonably safe to access from
45+
// a background thread.
46+
return NO;
47+
}
48+
4449
- (dispatch_queue_t)methodQueue
4550
{
4651
return dispatch_get_main_queue();

React/Modules/RCTDevSettings.mm

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,11 @@ @implementation RCTDevSettings
132132

133133
RCT_EXPORT_MODULE()
134134

135+
+ (BOOL)requiresMainQueueSetup
136+
{
137+
return YES; // RCT_DEV-only
138+
}
139+
135140
- (instancetype)init
136141
{
137142
// default behavior is to use NSUserDefaults

React/Modules/RCTDeviceInfo.m

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ @implementation RCTDeviceInfo {
2424

2525
RCT_EXPORT_MODULE()
2626

27+
+ (BOOL)requiresMainQueueSetup
28+
{
29+
return YES;
30+
}
31+
2732
- (dispatch_queue_t)methodQueue
2833
{
2934
return dispatch_get_main_queue();

0 commit comments

Comments
 (0)