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 a27483a0..fecea2fe 100644 --- a/android/src/main/java/com/alinz/parkerdan/shareextension/ShareModule.java +++ b/android/src/main/java/com/alinz/parkerdan/shareextension/ShareModule.java @@ -46,6 +46,7 @@ public WritableArray processIntent() { mediaTypesSupported.add("video"); mediaTypesSupported.add("audio"); mediaTypesSupported.add("image"); + mediaTypesSupported.add("application"); String type = ""; String action = ""; @@ -67,8 +68,7 @@ public WritableArray processIntent() { dataMap.putString("type", type); dataMap.putString("value", intent.getStringExtra(Intent.EXTRA_TEXT)); dataArrayMap.pushMap(dataMap); - } else if (Intent.ACTION_SEND.equals(action) && ( - mediaTypesSupported.contains(typePart))) { + } else if (Intent.ACTION_SEND.equals(action) && mediaTypesSupported.contains(typePart)) { WritableMap dataMap = Arguments.createMap(); dataMap.putString("type", type); Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); @@ -82,6 +82,12 @@ public WritableArray processIntent() { dataMap.putString("value", "file://" + RealPathUtil.getRealPathFromURI(currentActivity, uri)); dataArrayMap.pushMap(dataMap); } + } else if (Intent.ACTION_VIEW.equals(action) && mediaTypesSupported.contains(typePart)) { + WritableMap dataMap = Arguments.createMap(); + dataMap.putString("type", type); + Uri uri = intent.getData(); + dataMap.putString("value", "file://" + RealPathUtil.getRealPathFromURI(currentActivity, uri)); + dataArrayMap.pushMap(dataMap); } } return dataArrayMap; diff --git a/android/src/main/java/com/github/alinz/reactNativeShareExtension/ShareExModule.java b/android/src/main/java/com/github/alinz/reactNativeShareExtension/ShareExModule.java deleted file mode 100644 index 5409cb05..00000000 --- a/android/src/main/java/com/github/alinz/reactNativeShareExtension/ShareExModule.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.github.alinz.reactNativeShareExtension; - -import android.app.Activity; -import android.content.Intent; -import android.util.Log; -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ActivityEventListener; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.WritableMap; -import com.facebook.react.bridge.Arguments; - -import javax.annotation.Nullable; - -public class ShareExModule extends ReactContextBaseJavaModule implements ActivityEventListener { - - public ShareExModule(ReactApplicationContext reactContext) { - super(reactContext); - reactContext.addActivityEventListener(this); - } - - public String getName() { - return "ReactNativeShareExtension"; - } - - @ReactMethod - public void data(Promise promise) { - promise.resolve(processIntent()); - } - - protected WritableMap processIntent() { - - Activity currentActivity = getCurrentActivity(); - - WritableMap map = Arguments.createMap(); - - Intent intent = currentActivity.getIntent(); - String action = intent.getAction(); - String type = intent.getType(); - String value = ""; - - if (type == null) { - type = ""; - } - - //if you want to support more, just add more things here. - //at the moment we are only supporting browser URL - if (Intent.ACTION_SEND.equals(action) && "text/plain".equals(type)) { - value = intent.getStringExtra(Intent.EXTRA_TEXT); - } - - map.putString("type", type); - map.putString("value", value); - - return map; - } - - @ReactMethod - public void close() { - Activity currentActivity = getCurrentActivity(); - - currentActivity.finish(); - } - - public void onActivityResult(final int requestCode, final int resultCode, final Intent data) { } - - public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) { } - - public void onNewIntent(Intent intent) { } -} diff --git a/android/src/main/java/com/github/alinz/reactNativeShareExtension/ShareExPackage.java b/android/src/main/java/com/github/alinz/reactNativeShareExtension/ShareExPackage.java deleted file mode 100644 index 485c87c5..00000000 --- a/android/src/main/java/com/github/alinz/reactNativeShareExtension/ShareExPackage.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.github.alinz.reactNativeShareExtension; - -import com.facebook.react.ReactPackage; -import com.facebook.react.bridge.JavaScriptModule; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.uimanager.ViewManager; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -public class ShareExPackage implements ReactPackage { - - @Override - public List createNativeModules(ReactApplicationContext reactContext) { - return Arrays.asList(new ShareExModule(reactContext)); - } - - @Override - public List createViewManagers(ReactApplicationContext reactContext) { - return Collections.emptyList(); - } -} diff --git a/ios/ReactNativeShareExtension.m b/ios/ReactNativeShareExtension.m index 3556ae8f..0fde78b3 100644 --- a/ios/ReactNativeShareExtension.m +++ b/ios/ReactNativeShareExtension.m @@ -41,7 +41,11 @@ - (void)viewDidLoad { completionHandler:nil]; } - +RCT_EXPORT_METHOD(openURL:(NSString *)url) { + UIApplication *application = [UIApplication sharedApplication]; + NSURL *urlToOpen = [NSURL URLWithString:[url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; + [application openURL:urlToOpen options:@{} completionHandler: nil]; +} RCT_REMAP_METHOD(data, resolver:(RCTPromiseResolveBlock)resolve diff --git a/lib/index.js b/lib/index.js index aa17dce1..cf6e5cfd 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(), + openURL: url => NativeModules.ReactNativeShareExtension.openURL(url), }