Permalink
Browse files

Implement gating support for direction-aware API changes

Reviewed By: achen1

Differential Revision: D6045083

fbshipit-source-id: 857a43029ad88d2324ec77145a1e30d92b5e8fae
  • Loading branch information...
RSNara authored and facebook-github-bot committed Oct 19, 2017
1 parent f788831 commit 98547d4bcfa4f284de1eb7bd9670a00aac7b650a
@@ -14,14 +14,18 @@
type I18nManagerStatus = {
isRTL: boolean,
doesRTLFlipLeftAndRightStyles: boolean,
allowRTL: (allowRTL: boolean) => {},
forceRTL: (forceRTL: boolean) => {},
makeRTLFlipLeftAndRightStyles: (flipStyles: boolean) => {},
};
const I18nManager: I18nManagerStatus = require('NativeModules').I18nManager || {
isRTL: false,
doesRTLFlipLeftAndRightStyles: true,
allowRTL: () => {},
forceRTL: () => {},
makeRTLFlipLeftAndRightStyles: () => {},
};
module.exports = I18nManager;
@@ -29,10 +29,16 @@ + (BOOL)requiresMainQueueSetup
[[RCTI18nUtil sharedInstance] forceRTL:value];
}
RCT_EXPORT_METHOD(makeRTLFlipLeftAndRightStyles:(BOOL)value)
{
[[RCTI18nUtil sharedInstance] makeRTLFlipLeftAndRightStyles:value];
}
- (NSDictionary *)constantsToExport
{
return @{
@"isRTL": @([[RCTI18nUtil sharedInstance] isRTL])
@"isRTL": @([[RCTI18nUtil sharedInstance] isRTL]),
@"doesRTLFlipLeftAndRightStyles": @([[RCTI18nUtil sharedInstance] doesRTLFlipLeftAndRightStyles])
};
}
@@ -24,5 +24,7 @@
- (void)allowRTL:(BOOL)value;
- (BOOL)isRTLForced;
- (void)forceRTL:(BOOL)value;
- (BOOL)doesRTLFlipLeftAndRightStyles;
- (void)makeRTLFlipLeftAndRightStyles:(BOOL)value;
@end
@@ -19,6 +19,7 @@ + (instancetype)sharedInstance
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [self new];
[sharedInstance makeRTLFlipLeftAndRightStyles: true];
});
return sharedInstance;
@@ -78,6 +79,17 @@ - (void)forceRTL:(BOOL)rtlStatus
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (BOOL)doesRTLFlipLeftAndRightStyles
{
return [[NSUserDefaults standardUserDefaults] boolForKey:@"RCTI18nUtil_makeRTLFlipLeftAndRightStyles"];
}
- (void)makeRTLFlipLeftAndRightStyles:(BOOL)value
{
[[NSUserDefaults standardUserDefaults] setBool:value forKey:@"RCTI18nUtil_makeRTLFlipLeftAndRightStyles"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
// Check if the current device language is RTL
- (BOOL)isDevicePreferredLanguageRTL
{
@@ -45,6 +45,7 @@ public String getName() {
final Map<String, Object> constants = MapBuilder.newHashMap();
constants.put("isRTL", sharedI18nUtilInstance.isRTL(context));
constants.put("doesRTLFlipLeftAndRightStyles", sharedI18nUtilInstance.doesRTLFlipLeftAndRightStyles(context));
constants.put("localeIdentifier", locale.toString());
return constants;
}
@@ -58,4 +59,9 @@ public void allowRTL(boolean value) {
public void forceRTL(boolean value) {
sharedI18nUtilInstance.forceRTL(getContext(), value);
}
@ReactMethod
public void makeRTLFlipLeftAndRightStyles(boolean value) {
sharedI18nUtilInstance.makeRTLFlipLeftAndRightStyles(getContext(), value);
}
}
@@ -26,6 +26,8 @@
"RCTI18nUtil_allowRTL";
private static final String KEY_FOR_PREFS_FORCERTL =
"RCTI18nUtil_forceRTL";
private static final String KEY_FOR_PERFS_MAKE_RTL_FLIP_LEFT_AND_RIGHT_STYLES =
"RCTI18nUtil_makeRTLFlipLeftAndRightStyles";
private I18nUtil() {
// Exists only to defeat instantiation.
@@ -65,6 +67,14 @@ public void allowRTL(Context context, boolean allowRTL) {
setPref(context, KEY_FOR_PREFS_ALLOWRTL, allowRTL);
}
public boolean doesRTLFlipLeftAndRightStyles(Context context) {
return isPrefSet(context, KEY_FOR_PERFS_MAKE_RTL_FLIP_LEFT_AND_RIGHT_STYLES, true);
}
public void makeRTLFlipLeftAndRightStyles(Context context, boolean flip) {
setPref(context, KEY_FOR_PERFS_MAKE_RTL_FLIP_LEFT_AND_RIGHT_STYLES, flip);
}
/**
* Could be used to test RTL layout with English
* Used for development and testing purpose

0 comments on commit 98547d4

Please sign in to comment.