|
@@ -16,6 +16,7 @@ import android.support.annotation.RequiresApi;
|
16
|
16
|
import android.support.v4.content.ContextCompat;
|
17
|
17
|
import android.support.v4.content.FileProvider;
|
18
|
18
|
import android.util.Log;
|
|
19
|
+import android.webkit.MimeTypeMap;
|
19
|
20
|
import android.webkit.ValueCallback;
|
20
|
21
|
import android.webkit.WebChromeClient;
|
21
|
22
|
import android.widget.Toast;
|
|
@@ -248,6 +249,9 @@ public class RNCWebViewModule extends ReactContextBaseJavaModule implements Acti
|
248
|
249
|
if (acceptTypes.isEmpty()) {
|
249
|
250
|
_acceptTypes = DEFAULT_MIME_TYPES;
|
250
|
251
|
}
|
|
252
|
+ if (acceptTypes.matches("\\.\\w+")) {
|
|
253
|
+ _acceptTypes = getMimeTypeFromExtension(acceptTypes.replace(".", ""));
|
|
254
|
+ }
|
251
|
255
|
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
252
|
256
|
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
253
|
257
|
intent.setType(_acceptTypes);
|
|
@@ -264,17 +268,27 @@ public class RNCWebViewModule extends ReactContextBaseJavaModule implements Acti
|
264
|
268
|
}
|
265
|
269
|
|
266
|
270
|
private Boolean acceptsImages(String types) {
|
267
|
|
- return types.isEmpty() || types.toLowerCase().contains("image");
|
|
271
|
+ String mimeType = types;
|
|
272
|
+ if (types.matches("\\.\\w+")) {
|
|
273
|
+ mimeType = getMimeTypeFromExtension(types.replace(".", ""));
|
|
274
|
+ }
|
|
275
|
+ return mimeType.isEmpty() || mimeType.toLowerCase().contains("image");
|
268
|
276
|
}
|
269
|
277
|
private Boolean acceptsImages(String[] types) {
|
270
|
|
- return isArrayEmpty(types) || arrayContainsString(types, "image");
|
|
278
|
+ String[] mimeTypes = getAcceptedMimeType(types);
|
|
279
|
+ return isArrayEmpty(mimeTypes) || arrayContainsString(mimeTypes, "image");
|
271
|
280
|
}
|
272
|
281
|
|
273
|
282
|
private Boolean acceptsVideo(String types) {
|
274
|
|
- return types.isEmpty() || types.toLowerCase().contains("video");
|
|
283
|
+ String mimeType = types;
|
|
284
|
+ if (types.matches("\\.\\w+")) {
|
|
285
|
+ mimeType = getMimeTypeFromExtension(types.replace(".", ""));
|
|
286
|
+ }
|
|
287
|
+ return mimeType.isEmpty() || mimeType.toLowerCase().contains("video");
|
275
|
288
|
}
|
276
|
289
|
private Boolean acceptsVideo(String[] types) {
|
277
|
|
- return isArrayEmpty(types) || arrayContainsString(types, "video");
|
|
290
|
+ String[] mimeTypes = getAcceptedMimeType(types);
|
|
291
|
+ return isArrayEmpty(mimeTypes) || arrayContainsString(mimeTypes, "video");
|
278
|
292
|
}
|
279
|
293
|
|
280
|
294
|
private Boolean arrayContainsString(String[] array, String pattern){
|
|
@@ -290,7 +304,26 @@ public class RNCWebViewModule extends ReactContextBaseJavaModule implements Acti
|
290
|
304
|
if (isArrayEmpty(types)) {
|
291
|
305
|
return new String[]{DEFAULT_MIME_TYPES};
|
292
|
306
|
}
|
293
|
|
- return types;
|
|
307
|
+ String[] mimeTypes = new String[types.length];
|
|
308
|
+ for (int i = 0; i < types.length; i++) {
|
|
309
|
+ String t = types[i];
|
|
310
|
+ // convert file extensions to mime types
|
|
311
|
+ if (t.matches("\\.\\w+")) {
|
|
312
|
+ String mimeType = getMimeTypeFromExtension(t.replace(".", ""));
|
|
313
|
+ mimeTypes[i] = mimeType;
|
|
314
|
+ } else {
|
|
315
|
+ mimeTypes[i] = t;
|
|
316
|
+ }
|
|
317
|
+ }
|
|
318
|
+ return mimeTypes;
|
|
319
|
+ }
|
|
320
|
+
|
|
321
|
+ private String getMimeTypeFromExtension(String extension) {
|
|
322
|
+ String type = null;
|
|
323
|
+ if (extension != null) {
|
|
324
|
+ type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
|
|
325
|
+ }
|
|
326
|
+ return type;
|
294
|
327
|
}
|
295
|
328
|
|
296
|
329
|
private Uri getOutputUri(String intentType) {
|