From 567116c3238fb744a24bcb7315ac6f8fe5955e02 Mon Sep 17 00:00:00 2001 From: dengguo Date: Wed, 12 Apr 2017 23:15:07 +0800 Subject: [PATCH 1/9] add clear --- .../alinz/parkerdan/shareextension/ShareModule.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/android/src/main/java/com/alinz/parkerdan/shareextension/ShareModule.java b/android/src/main/java/com/alinz/parkerdan/shareextension/ShareModule.java index e1aea2ce..e23c023b 100644 --- a/android/src/main/java/com/alinz/parkerdan/shareextension/ShareModule.java +++ b/android/src/main/java/com/alinz/parkerdan/shareextension/ShareModule.java @@ -27,6 +27,18 @@ public String getName() { return "ReactNativeShareExtension"; } + @ReactMethod + public void clear() { + Activity currentActivity = getCurrentActivity(); + + if (currentActivity != null) { + Intent intent = currentActivity.getIntent(); + intent.setAction(""); + intent.removeExtra(Intent.EXTRA_TEXT); + intent.removeExtra(Intent.EXTRA_STREAM); + } + } + @ReactMethod public void close() { getCurrentActivity().finish(); From 7614869489d57ab3a1259ed39a68c261ce283705 Mon Sep 17 00:00:00 2001 From: dengguo Date: Wed, 12 Apr 2017 23:35:30 +0800 Subject: [PATCH 2/9] add clear --- .../java/com/alinz/parkerdan/shareextension/ShareModule.java | 2 +- lib/index.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/alinz/parkerdan/shareextension/ShareModule.java b/android/src/main/java/com/alinz/parkerdan/shareextension/ShareModule.java index e23c023b..3b7fefbe 100644 --- a/android/src/main/java/com/alinz/parkerdan/shareextension/ShareModule.java +++ b/android/src/main/java/com/alinz/parkerdan/shareextension/ShareModule.java @@ -68,7 +68,7 @@ public WritableMap processIntent() { if (Intent.ACTION_SEND.equals(action) && "text/plain".equals(type)) { value = intent.getStringExtra(Intent.EXTRA_TEXT); } - else if (Intent.ACTION_SEND.equals(action) && ("image/*".equals(type) || "image/jpeg".equals(type) || "image/png".equals(type) || "image/jpg".equals(type) ) ) { + else if (Intent.ACTION_SEND.equals(action) && type.startsWith("image")) { Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); value = "file://" + RealPathUtil.getRealPathFromURI(currentActivity, uri); diff --git a/lib/index.js b/lib/index.js index aa17dce1..941d7d3c 100644 --- a/lib/index.js +++ b/lib/index.js @@ -5,5 +5,6 @@ import { NativeModules } from 'react-native' // NativeModules.ShareExtension.close() export default { data: () => NativeModules.ReactNativeShareExtension.data(), - close: () => NativeModules.ReactNativeShareExtension.close() + close: () => NativeModules.ReactNativeShareExtension.close(), + clear: () => NativeModules.ReactNativeShareExtension.clear() } From 31ed4d9827be40085806378988f0efa8a513da10 Mon Sep 17 00:00:00 2001 From: dengguo Date: Thu, 13 Apr 2017 15:44:14 +0800 Subject: [PATCH 3/9] update to support multiple images --- .../parkerdan/shareextension/ShareModule.java | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/android/src/main/java/com/alinz/parkerdan/shareextension/ShareModule.java b/android/src/main/java/com/alinz/parkerdan/shareextension/ShareModule.java index 3b7fefbe..f09c2299 100644 --- a/android/src/main/java/com/alinz/parkerdan/shareextension/ShareModule.java +++ b/android/src/main/java/com/alinz/parkerdan/shareextension/ShareModule.java @@ -5,6 +5,7 @@ import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.WritableMap; +import com.facebook.react.bridge.WritableArray; import com.facebook.react.bridge.Arguments; import android.app.Activity; @@ -13,6 +14,7 @@ import android.graphics.Bitmap; import java.io.InputStream; +import java.util.ArrayList; public class ShareModule extends ReactContextBaseJavaModule { @@ -51,8 +53,9 @@ public void data(Promise promise) { public WritableMap processIntent() { WritableMap map = Arguments.createMap(); + WritableArray images = Arguments.createArray(); - String value = ""; + String text = ""; String type = ""; String action = ""; @@ -65,23 +68,23 @@ public WritableMap processIntent() { if (type == null) { type = ""; } + if (Intent.ACTION_SEND.equals(action) && "text/plain".equals(type)) { - value = intent.getStringExtra(Intent.EXTRA_TEXT); - } - else if (Intent.ACTION_SEND.equals(action) && type.startsWith("image")) { + text = intent.getStringExtra(Intent.EXTRA_TEXT); + } else if (Intent.ACTION_SEND.equals(action) && type.startsWith("image")) { Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); - value = "file://" + RealPathUtil.getRealPathFromURI(currentActivity, uri); - - } else { - value = ""; - } - } else { - value = ""; - type = ""; - } + images.pushString("file://" + RealPathUtil.getRealPathFromURI(currentActivity, uri)); + } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type.startsWith("image")) { + ArrayList uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); + for (Uri uri : uris) { + images.pushString("file://" + RealPathUtil.getRealPathFromURI(currentActivity, uri)); + } + } + } map.putString("type", type); - map.putString("value",value); + map.putString("text", text); + map.putArray("images", images); return map; } From 5725dc3bcbac3138dd658e538fd77409b98a737b Mon Sep 17 00:00:00 2001 From: dengguo Date: Thu, 13 Apr 2017 16:51:47 +0800 Subject: [PATCH 4/9] support content uri --- .../shareextension/RealPathUtil.java | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java b/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java index c712e18a..c2ad644e 100644 --- a/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java +++ b/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java @@ -9,6 +9,10 @@ import android.content.ContentUris; import android.os.Environment; +import android.os.ParcelFileDescriptor; +import java.io.*; +import java.nio.channels.FileChannel; + public class RealPathUtil { public static String getRealPathFromURI(final Context context, final Uri uri) { @@ -67,7 +71,10 @@ else if ("content".equalsIgnoreCase(uri.getScheme())) { if (isGooglePhotosUri(uri)) return uri.getLastPathSegment(); - return getDataColumn(context, uri, null, null); + String path = getDataColumn(context, uri, null, null); + + // Try save to tmp file, and return tmp file path + return getPathFromSavingTempFile(context, uri); } // File else if ("file".equalsIgnoreCase(uri.getScheme())) { @@ -77,6 +84,25 @@ else if ("file".equalsIgnoreCase(uri.getScheme())) { return null; } + public static String getPathFromSavingTempFile(Context context, final Uri uri) { + File tmpFile; + try { + String fileName = uri.getLastPathSegment(); + tmpFile = File.createTempFile(fileName, null, context.getCacheDir()); + + ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r"); + + FileChannel src = new FileInputStream(pfd.getFileDescriptor()).getChannel(); + FileChannel dst = new FileOutputStream(tmpFile).getChannel(); + dst.transferFrom(src, 0, src.size()); + src.close(); + dst.close(); + } catch (IOException ex) { + return null; + } + return tmpFile.getAbsolutePath(); + } + /** * Get the value of the data column for this Uri. This is useful for * MediaStore Uris, and other file-based ContentProviders. From fbbda2874fa95bde83a5d539f66d9e9612635fd3 Mon Sep 17 00:00:00 2001 From: dengguo Date: Thu, 13 Apr 2017 16:56:34 +0800 Subject: [PATCH 5/9] change tmp file using suffix --- .../java/com/alinz/parkerdan/shareextension/RealPathUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java b/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java index c2ad644e..76020bcd 100644 --- a/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java +++ b/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java @@ -88,7 +88,7 @@ public static String getPathFromSavingTempFile(Context context, final Uri uri) { File tmpFile; try { String fileName = uri.getLastPathSegment(); - tmpFile = File.createTempFile(fileName, null, context.getCacheDir()); + tmpFile = File.createTempFile(null, fileName, context.getCacheDir()); ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r"); From a5c23378457a7e1549985434625ebdd479734061 Mon Sep 17 00:00:00 2001 From: dengguo Date: Thu, 13 Apr 2017 16:59:51 +0800 Subject: [PATCH 6/9] add path checking before saving to tmp file --- .../java/com/alinz/parkerdan/shareextension/RealPathUtil.java | 1 + 1 file changed, 1 insertion(+) diff --git a/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java b/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java index 76020bcd..7830be8e 100644 --- a/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java +++ b/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java @@ -73,6 +73,7 @@ else if ("content".equalsIgnoreCase(uri.getScheme())) { String path = getDataColumn(context, uri, null, null); + if (path != null) return path; // Try save to tmp file, and return tmp file path return getPathFromSavingTempFile(context, uri); } From 01f6fec4fcd0e98cb2a57758b8ff417e7bb6fa4a Mon Sep 17 00:00:00 2001 From: dengguo Date: Thu, 13 Apr 2017 17:18:22 +0800 Subject: [PATCH 7/9] fix tmp file generate --- .../java/com/alinz/parkerdan/shareextension/RealPathUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java b/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java index 7830be8e..8bf985e2 100644 --- a/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java +++ b/android/src/main/java/com/alinz/parkerdan/shareextension/RealPathUtil.java @@ -89,7 +89,7 @@ public static String getPathFromSavingTempFile(Context context, final Uri uri) { File tmpFile; try { String fileName = uri.getLastPathSegment(); - tmpFile = File.createTempFile(null, fileName, context.getCacheDir()); + tmpFile = File.createTempFile("tmp", fileName, context.getCacheDir()); ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r"); From ecf328d2b827799caf20ec1575b10fbb34630e4d Mon Sep 17 00:00:00 2001 From: dengguo Date: Thu, 13 Apr 2017 17:22:30 +0800 Subject: [PATCH 8/9] update readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ae8c5d92..a9705567 100644 --- a/README.md +++ b/README.md @@ -288,6 +288,7 @@ public class MainApplication extends Application implements ReactApplication { android:theme="@style/Theme.Share.Transparent" > + // for sharing links include From 42c390b913345121082806aae68e892481f6c4a9 Mon Sep 17 00:00:00 2001 From: dengguo Date: Wed, 16 Aug 2017 11:22:02 +0800 Subject: [PATCH 9/9] remove override --- .../java/com/alinz/parkerdan/shareextension/SharePackage.java | 1 - .../github/alinz/reactNativeShareExtension/ShareExPackage.java | 1 - 2 files changed, 2 deletions(-) diff --git a/android/src/main/java/com/alinz/parkerdan/shareextension/SharePackage.java b/android/src/main/java/com/alinz/parkerdan/shareextension/SharePackage.java index 23431dd5..3e168353 100644 --- a/android/src/main/java/com/alinz/parkerdan/shareextension/SharePackage.java +++ b/android/src/main/java/com/alinz/parkerdan/shareextension/SharePackage.java @@ -16,7 +16,6 @@ public List createNativeModules(ReactApplicationContext reactConte return Arrays.asList(new ShareModule(reactContext)); } - @Override public List> createJSModules() { return Collections.emptyList(); } diff --git a/android/src/main/java/com/github/alinz/reactNativeShareExtension/ShareExPackage.java b/android/src/main/java/com/github/alinz/reactNativeShareExtension/ShareExPackage.java index 84c591b2..f21656c3 100644 --- a/android/src/main/java/com/github/alinz/reactNativeShareExtension/ShareExPackage.java +++ b/android/src/main/java/com/github/alinz/reactNativeShareExtension/ShareExPackage.java @@ -17,7 +17,6 @@ public List createNativeModules(ReactApplicationContext reactConte return Arrays.asList(new ShareExModule(reactContext)); } - @Override public List> createJSModules() { return Collections.emptyList(); }