Skip to content

Commit

Permalink
Implement gating support for direction-aware API changes
Browse files Browse the repository at this point in the history
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 98547d4
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 1 deletion.
4 changes: 4 additions & 0 deletions Libraries/ReactNative/I18nManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
8 changes: 7 additions & 1 deletion React/Modules/RCTI18nManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -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])
};
}

Expand Down
2 changes: 2 additions & 0 deletions React/Modules/RCTI18nUtil.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,7 @@
- (void)allowRTL:(BOOL)value;
- (BOOL)isRTLForced;
- (void)forceRTL:(BOOL)value;
- (BOOL)doesRTLFlipLeftAndRightStyles;
- (void)makeRTLFlipLeftAndRightStyles:(BOOL)value;

@end
12 changes: 12 additions & 0 deletions React/Modules/RCTI18nUtil.m
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ + (instancetype)sharedInstance
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [self new];
[sharedInstance makeRTLFlipLeftAndRightStyles: true];
});

return sharedInstance;
Expand Down Expand Up @@ -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
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public Map<String, Object> getConstants() {

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;
}
Expand All @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ public class I18nUtil {
"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.
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 98547d4

Please sign in to comment.