diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml
index 914eec5..1c61a40 100644
--- a/android/src/main/AndroidManifest.xml
+++ b/android/src/main/AndroidManifest.xml
@@ -1,4 +1,15 @@
+ package="com.chirag.RNMail">
-
\ No newline at end of file
+
+
+
+
+
+
diff --git a/android/src/main/java/com/chirag/RNMail/RNMailFileProvider.java b/android/src/main/java/com/chirag/RNMail/RNMailFileProvider.java
new file mode 100644
index 0000000..45cf23e
--- /dev/null
+++ b/android/src/main/java/com/chirag/RNMail/RNMailFileProvider.java
@@ -0,0 +1,7 @@
+package com.chirag.RNMail;
+
+import androidx.core.content.FileProvider;
+
+public class RNMailFileProvider extends FileProvider {
+
+}
diff --git a/android/src/main/java/com/chirag/RNMail/RNMailModule.java b/android/src/main/java/com/chirag/RNMail/RNMailModule.java
index bcd00c4..8460848 100644
--- a/android/src/main/java/com/chirag/RNMail/RNMailModule.java
+++ b/android/src/main/java/com/chirag/RNMail/RNMailModule.java
@@ -5,6 +5,7 @@
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.text.Html;
+import androidx.core.content.FileProvider;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
@@ -15,6 +16,7 @@
import java.util.List;
import java.io.File;
+import java.net.URI;
import java.util.ArrayList;
/**
@@ -54,8 +56,9 @@ private String[] readableArrayToStringArray(ReadableArray r) {
@ReactMethod
public void mail(ReadableMap options, Callback callback) {
- Intent i = new Intent(Intent.ACTION_SENDTO);
- i.setData(Uri.parse("mailto:"));
+ Intent i = new Intent(Intent.ACTION_SEND_MULTIPLE);
+ Intent selectorIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"));
+ i.setSelector(selectorIntent);
if (options.hasKey("subject") && !options.isNull("subject")) {
i.putExtra(Intent.EXTRA_SUBJECT, options.getString("subject"));
@@ -86,25 +89,33 @@ public void mail(ReadableMap options, Callback callback) {
}
if (options.hasKey("attachments") && !options.isNull("attachments")) {
- ReadableArray r = options.getArray("attachments");
- int length = r.size();
- ArrayList uris = new ArrayList();
- for (int keyIndex = 0; keyIndex < length; keyIndex++) {
- ReadableMap clip = r.getMap(keyIndex);
- if (clip.hasKey("path") && !clip.isNull("path")){
- String path = clip.getString("path");
- File file = new File(path);
- Uri u = Uri.fromFile(file);
- uris.add(u);
- }
- }
-
- if (uris.size() == 1) {
- i.putExtra(Intent.EXTRA_STREAM, uris.get(0));
- } else {
- i.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
- }
- }
+ ReadableArray r = options.getArray("attachments");
+ int length = r.size();
+
+ String provider = reactContext.getApplicationContext().getPackageName() + ".rnmail.provider";
+ List resolvedIntentActivities = reactContext.getPackageManager().queryIntentActivities(i,
+ PackageManager.MATCH_DEFAULT_ONLY);
+
+ ArrayList uris = new ArrayList();
+ for (int keyIndex = 0; keyIndex < length; keyIndex++) {
+ ReadableMap clip = r.getMap(keyIndex);
+ if (clip.hasKey("path") && !clip.isNull("path")){
+ String path = clip.getString("path");
+ File file = new File(path);
+ Uri uri = FileProvider.getUriForFile(reactContext, provider, file);
+ uris.add(uri);
+
+ for (ResolveInfo resolvedIntentInfo : resolvedIntentActivities) {
+ String packageName = resolvedIntentInfo.activityInfo.packageName;
+ reactContext.grantUriPermission(packageName, uri,
+ Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ }
+ }
+ }
+
+ i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ i.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
+ }
PackageManager manager = reactContext.getPackageManager();
List list = manager.queryIntentActivities(i, 0);
@@ -123,11 +134,11 @@ public void mail(ReadableMap options, Callback callback) {
}
} else {
String chooserTitle = "Send Mail";
-
+
if (options.hasKey("customChooserTitle") && !options.isNull("customChooserTitle")) {
chooserTitle = options.getString("customChooserTitle");
- }
-
+ }
+
Intent chooser = Intent.createChooser(i, chooserTitle);
chooser.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
diff --git a/android/src/main/res/xml/provider_paths.xml b/android/src/main/res/xml/provider_paths.xml
new file mode 100644
index 0000000..97384e1
--- /dev/null
+++ b/android/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+