Provide I18n Module in OSS 1/3

Summary: Create I18nUtil and I18nManagerModule for OSS.

Reviewed By: dmmiller

Differential Revision: D3575674

fbshipit-source-id: aad96be167f3e7b0692a9cc2c7f8a558e7aa722a
This commit is contained in:
Mengjue Wang 2016-07-20 11:13:35 -07:00 committed by Facebook Github Bot 7
parent c7ff46bf55
commit 0ab1486f7e
3 changed files with 126 additions and 0 deletions

View File

@ -0,0 +1,19 @@
include_defs('//ReactAndroid/DEFS')
android_library(
name = 'i18nmanager',
srcs = glob(['*.java']),
deps = [
react_native_dep('third-party/java/infer-annotations:infer-annotations'),
react_native_dep('third-party/java/jsr-305:jsr-305'),
react_native_target('java/com/facebook/react/bridge:bridge'),
react_native_target('java/com/facebook/react/common:common'),
],
visibility = [
'PUBLIC',
],
)
project_config(
src_target = ':i18nmanager',
)

View File

@ -0,0 +1,54 @@
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.react.modules.i18nmanager;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.common.MapBuilder;
import java.util.Map;
/**
* {@link NativeModule} that allows JS to set allowRTL and get isRTL status.
*/
public class I18nManagerModule extends ReactContextBaseJavaModule {
private final I18nUtil sharedI18nUtilInstance = I18nUtil.getInstance();
public I18nManagerModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "I18nManager";
}
@Override
public Map<String, Object> getConstants() {
final Map<String, Object> constants = MapBuilder.newHashMap();
constants.put("isRTL", sharedI18nUtilInstance.isRTL(
getReactApplicationContext()
));
return constants;
}
@ReactMethod
public void allowRTL(boolean value) {
sharedI18nUtilInstance.setAllowRTL(
getReactApplicationContext(),
value
);
}
}

View File

@ -0,0 +1,53 @@
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.react.modules.i18nmanager;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
public class I18nUtil {
private static I18nUtil sharedI18nUtilInstance = null;
private static final String MY_PREFS_NAME =
"com.facebook.react.modules.i18nmanager.I18nUtil";
private static final String KEY_FOR_PREFS =
"RCTI18nUtil_allowRTL";
private I18nUtil() {
// Exists only to defeat instantiation.
}
public static I18nUtil getInstance() {
if(sharedI18nUtilInstance == null) {
sharedI18nUtilInstance = new I18nUtil();
}
return sharedI18nUtilInstance;
}
// If set allowRTL on the JS side,
// the RN app will automatically have a RTL layout.
public boolean isRTL(Context context) {
return allowRTL(context);
}
private boolean allowRTL(Context context) {
SharedPreferences prefs =
context.getSharedPreferences(MY_PREFS_NAME, Context.MODE_PRIVATE);
return prefs.getBoolean(KEY_FOR_PREFS, false);
}
public void setAllowRTL(Context context, boolean allowRTL) {
SharedPreferences.Editor editor =
context.getSharedPreferences(MY_PREFS_NAME, Context.MODE_PRIVATE).edit();
editor.putBoolean(KEY_FOR_PREFS, allowRTL);
editor.apply();
}
}