Skip to content

Commit

Permalink
Fix Deadlock in RCTi18nUtil (iOS) (microsoft#733)
Browse files Browse the repository at this point in the history
* Initial Commit

* Fix typo

* Fix default initialization of isRTLAllowed and documentation

* use BOOL, remove superfluous readwrite decorator

* Fix another typo

* Add TODO Marker
  • Loading branch information
Saadnajmi committed Feb 26, 2021
1 parent f758a5b commit ef30ff3
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 55 deletions.
21 changes: 15 additions & 6 deletions React/Modules/RCTI18nUtil.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,20 @@
+ (instancetype)sharedInstance;

- (BOOL)isRTL;
- (BOOL)isRTLAllowed;
- (void)allowRTL:(BOOL)value;
- (BOOL)isRTLForced;
- (void)forceRTL:(BOOL)value;
- (BOOL)doLeftAndRightSwapInRTL;
- (void)swapLeftAndRightInRTL:(BOOL)value;
// [ TODO(macOS#4904077)
/**
* Should be used very early during app start up
* Before the bridge is initialized
*/
@property(atomic, setter=allowRTL:) BOOL isRTLAllowed;

/**
* Could be used to test RTL layout with English
* Used for development and testing purpose
*/
@property(atomic, setter=forceRTL:) BOOL isRTLForced;

@property(atomic, setter=swapLeftAndRightInRTL:) BOOL doLeftAndRightSwapInRTL;
// ]TODO(macOS#4904077)

@end
51 changes: 2 additions & 49 deletions React/Modules/RCTI18nUtil.m
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ + (instancetype)sharedInstance
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [self new];
[sharedInstance swapLeftAndRightInRTL: true];
[sharedInstance swapLeftAndRightInRTL:true];
[sharedInstance allowRTL:true]; // TODO(macOS#4904077)
});

return sharedInstance;
Expand All @@ -40,54 +41,6 @@ - (BOOL)isRTL
return NO;
}

/**
* Should be used very early during app start up
* Before the bridge is initialized
* @return whether the app allows RTL layout, default is true
*/
- (BOOL)isRTLAllowed
{
NSNumber *value = [[NSUserDefaults standardUserDefaults] objectForKey:@"RCTI18nUtil_allowRTL"];
if (value == nil) {
return YES;
}
return [value boolValue];
}

- (void)allowRTL:(BOOL)rtlStatus
{
[[NSUserDefaults standardUserDefaults] setBool:rtlStatus forKey:@"RCTI18nUtil_allowRTL"];
[[NSUserDefaults standardUserDefaults] synchronize];
}

/**
* Could be used to test RTL layout with English
* Used for development and testing purpose
*/
- (BOOL)isRTLForced
{
BOOL rtlStatus = [[NSUserDefaults standardUserDefaults]
boolForKey:@"RCTI18nUtil_forceRTL"];
return rtlStatus;
}

- (void)forceRTL:(BOOL)rtlStatus
{
[[NSUserDefaults standardUserDefaults] setBool:rtlStatus forKey:@"RCTI18nUtil_forceRTL"];
[[NSUserDefaults standardUserDefaults] synchronize];
}

- (BOOL)doLeftAndRightSwapInRTL
{
return [[NSUserDefaults standardUserDefaults] boolForKey:@"RCTI18nUtil_makeRTLFlipLeftAndRightStyles"];
}

- (void)swapLeftAndRightInRTL:(BOOL)value
{
[[NSUserDefaults standardUserDefaults] setBool:value forKey:@"RCTI18nUtil_makeRTLFlipLeftAndRightStyles"];
[[NSUserDefaults standardUserDefaults] synchronize];
}

// Check if the current device language is RTL
- (BOOL)isDevicePreferredLanguageRTL
{
Expand Down

0 comments on commit ef30ff3

Please sign in to comment.