diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/ContextBaseJavaModule.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/ContextBaseJavaModule.java new file mode 100644 index 000000000..8f3471819 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/ContextBaseJavaModule.java @@ -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; + } +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/clipboard/ClipboardModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/clipboard/ClipboardModule.java index 520010795..62187356b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/clipboard/ClipboardModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/clipboard/ClipboardModule.java @@ -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(); diff --git a/ReactAndroid/src/main/jni/xreact/jni/ModuleRegistryBuilder.cpp b/ReactAndroid/src/main/jni/xreact/jni/ModuleRegistryBuilder.cpp index 0dd0c4836..95e33b714 100644 --- a/ReactAndroid/src/main/jni/xreact/jni/ModuleRegistryBuilder.cpp +++ b/ReactAndroid/src/main/jni/xreact/jni/ModuleRegistryBuilder.cpp @@ -35,13 +35,17 @@ std::unique_ptr buildModuleRegistry( jni::alias_ref::javaobject> cxxModules, std::shared_ptr moduleMessageQueue) { std::vector> modules; - for (const auto& jm : *javaModules) { - modules.emplace_back(folly::make_unique( - winstance, jm, moduleMessageQueue)); + if (javaModules) { + for (const auto& jm : *javaModules) { + modules.emplace_back(folly::make_unique( + winstance, jm, moduleMessageQueue)); + } } - for (const auto& cm : *cxxModules) { - modules.emplace_back(folly::make_unique( - winstance, cm->getName(), cm->getProvider(), moduleMessageQueue)); + if (cxxModules) { + for (const auto& cm : *cxxModules) { + modules.emplace_back(folly::make_unique( + winstance, cm->getName(), cm->getProvider(), moduleMessageQueue)); + } } if (modules.empty()) { return nullptr; diff --git a/ReactAndroid/src/test/java/com/facebook/react/modules/clipboard/ClipboardModuleTest.java b/ReactAndroid/src/test/java/com/facebook/react/modules/clipboard/ClipboardModuleTest.java index 0486ae79f..adfa1e2ea 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/modules/clipboard/ClipboardModuleTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/modules/clipboard/ClipboardModuleTest.java @@ -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); }