Support narrower module dependencies

Reviewed By: javache

Differential Revision: D4772632

fbshipit-source-id: 615bf8998a3817364d0f8bd435c95c2c1f1bebed
This commit is contained in:
Marc Horowitz 2017-03-31 00:46:13 -07:00 committed by Facebook Github Bot
parent 5f5da4e122
commit 0b2ac0ada8
4 changed files with 49 additions and 14 deletions

View File

@ -0,0 +1,32 @@
/**
* 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.bridge;
import android.content.Context;
/**
* Base class for React native modules that require access to an Android
* {@link Context} instance.
*/
public abstract class ContextBaseJavaModule extends BaseJavaModule {
private final Context mContext;
public ContextBaseJavaModule(Context context) {
mContext = context;
}
/**
* Subclasses can use this method to access Android context passed as a constructor
*/
protected final Context getContext() {
return mContext;
}
}

View File

@ -12,10 +12,10 @@ package com.facebook.react.modules.clipboard;
import android.annotation.SuppressLint;
import android.content.ClipboardManager;
import android.content.ClipData;
import android.content.Context;
import android.os.Build;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Promise;
import com.facebook.react.module.annotations.ReactModule;
@ -24,10 +24,10 @@ import com.facebook.react.module.annotations.ReactModule;
* A module that allows JS to get/set clipboard contents.
*/
@ReactModule(name = "Clipboard")
public class ClipboardModule extends ReactContextBaseJavaModule {
public class ClipboardModule extends ContextBaseJavaModule {
public ClipboardModule(ReactApplicationContext reactContext) {
super(reactContext);
public ClipboardModule(Context context) {
super(context);
}
@Override
@ -36,7 +36,7 @@ public class ClipboardModule extends ReactContextBaseJavaModule {
}
private ClipboardManager getClipboardService() {
return (ClipboardManager) getReactApplicationContext().getSystemService(getReactApplicationContext().CLIPBOARD_SERVICE);
return (ClipboardManager) getContext().getSystemService(getContext().CLIPBOARD_SERVICE);
}
@ReactMethod
@ -60,7 +60,6 @@ public class ClipboardModule extends ReactContextBaseJavaModule {
@SuppressLint("DeprecatedMethod")
@ReactMethod
public void setString(String text) {
ReactApplicationContext reactContext = getReactApplicationContext();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
ClipData clipdata = ClipData.newPlainText(null, text);
ClipboardManager clipboard = getClipboardService();

View File

@ -35,14 +35,18 @@ std::unique_ptr<ModuleRegistry> buildModuleRegistry(
jni::alias_ref<jni::JCollection<ModuleHolder::javaobject>::javaobject> cxxModules,
std::shared_ptr<MessageQueueThread> moduleMessageQueue) {
std::vector<std::unique_ptr<NativeModule>> modules;
if (javaModules) {
for (const auto& jm : *javaModules) {
modules.emplace_back(folly::make_unique<JavaNativeModule>(
winstance, jm, moduleMessageQueue));
}
}
if (cxxModules) {
for (const auto& cm : *cxxModules) {
modules.emplace_back(folly::make_unique<CxxNativeModule>(
winstance, cm->getName(), cm->getProvider(), moduleMessageQueue));
}
}
if (modules.empty()) {
return nullptr;
} else {

View File

@ -39,7 +39,7 @@ public class ClipboardModuleTest {
@Before
public void setUp() {
mClipboardModule = new ClipboardModule(ReactTestHelper.createCatalystContextForTest());
mClipboardModule = new ClipboardModule(RuntimeEnvironment.application);
mClipboardManager =
(ClipboardManager) RuntimeEnvironment.application.getSystemService(Context.CLIPBOARD_SERVICE);
}