add Clipboard component for ios and android

Summary:
add Clipboard component for ios and android
 ```javascript
    import Clipboard from 'react-native'

    Clipboard.get((content)=>{
          console.log('here is content in clipboard:%s',content)
    });
    var content = 'here is a string';
    Clipboard.set(content);
```
Closes https://github.com/facebook/react-native/pull/4384

Reviewed By: svcscm

Differential Revision: D2738881

Pulled By: mkonicek

fb-gh-sync-id: a06df32d1eb2824cc9ca3de9d45e4e67fd2edbc9
This commit is contained in:
tantan
2015-12-09 10:00:19 -08:00
committed by facebook-github-bot-4
parent cd4574498d
commit 90c7ad112f
12 changed files with 188 additions and 16 deletions

View File

@@ -0,0 +1,84 @@
/**
* 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.clipboard;
import android.annotation.SuppressLint;
import android.content.ClipboardManager;
import android.content.ClipData;
import android.os.Build;
import com.facebook.common.logging.FLog;
import com.facebook.react.bridge.Callback;
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.ReactConstants;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* A module that allows JS to get/set clipboard contents.
*/
public class ClipboardModule extends ReactContextBaseJavaModule {
public ClipboardModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "Clipboard";
}
private ClipboardManager getClipboardService() {
ReactApplicationContext reactContext = getReactApplicationContext();
return (ClipboardManager) reactContext.getSystemService(reactContext.CLIPBOARD_SERVICE);
}
@ReactMethod
public void getString(Callback cb) {
try {
ClipboardManager clipboard = getClipboardService();
ClipData clipData = clipboard.getPrimaryClip();
if (clipData == null) {
cb.invoke("");
return;
}
if (clipData.getItemCount() >= 1) {
ClipData.Item firstItem = clipboard.getPrimaryClip().getItemAt(0);
String text = "" + firstItem.getText();
cb.invoke(text);
} else {
cb.invoke("");
}
} catch(Exception e) {
FLog.w(ReactConstants.TAG, "Cannot get clipboard contents: " + e.getMessage());
}
}
@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();
clipboard.setPrimaryClip(clipdata);
} else {
ClipboardManager clipboard = getClipboardService();
clipboard.setText(text);
}
}
}

View File

@@ -41,6 +41,7 @@ import com.facebook.react.views.toolbar.ReactToolbarManager;
import com.facebook.react.views.view.ReactViewManager;
import com.facebook.react.views.viewpager.ReactViewPagerManager;
import com.facebook.react.views.swiperefresh.SwipeRefreshLayoutManager;
import com.facebook.react.modules.clipboard.ClipboardModule;
/**
* Package defining basic modules and view managers.
@@ -51,6 +52,7 @@ public class MainReactPackage implements ReactPackage {
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
return Arrays.<NativeModule>asList(
new AsyncStorageModule(reactContext),
new ClipboardModule(reactContext),
new FrescoModule(reactContext),
new IntentModule(reactContext),
new LocationModule(reactContext),