Commit 2e51bec68fc163fb23df815e4e91c9adb76fe41b

Authored by Andrei Pfeiffer
1 parent 9bb69a73
Exists in master

Support multiple files selection, based on input "multiple" attribute

android/src/main/java/com/rncustomwebview/CustomWebViewModule.java
... ... @@ -74,8 +74,9 @@ public class CustomWebViewModule extends ReactContextBaseJavaModule implements A
74 74 }
75 75 break;
76 76 case SELECT_FILE:
77   - if (resultCode == RESULT_OK && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
78   - filePathCallback.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data));
  77 + if (resultCode == RESULT_OK && data != null) {
  78 + Uri result[] = this.getSelectedFiles(data, resultCode);
  79 + filePathCallback.onReceiveValue(result);
79 80 } else {
80 81 filePathCallback.onReceiveValue(null);
81 82 }
... ... @@ -87,6 +88,28 @@ public class CustomWebViewModule extends ReactContextBaseJavaModule implements A
87 88 public void onNewIntent(Intent intent) {
88 89 }
89 90  
  91 + private Uri[] getSelectedFiles(Intent data, int resultCode) {
  92 + // we have one files selected
  93 + if (data.getData() != null) {
  94 + if (resultCode == RESULT_OK && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  95 + Uri[] result = WebChromeClient.FileChooserParams.parseResult(resultCode, data);
  96 + return result;
  97 + } else {
  98 + return null;
  99 + }
  100 + }
  101 + // we have multiple files selected
  102 + if (data.getClipData() != null) {
  103 + final int numSelectedFiles = data.getClipData().getItemCount();
  104 + Uri[] result = new Uri[numSelectedFiles];
  105 + for (int i = 0; i < numSelectedFiles; i++) {
  106 + result[i] = data.getClipData().getItemAt(i).getUri();
  107 + }
  108 + return result;
  109 + }
  110 + return null;
  111 + }
  112 +
90 113 public boolean startPhotoPickerIntent(
91 114 final ValueCallback<Uri[]> filePathCallback,
92 115 final WebChromeClient.FileChooserParams fileChooserParams
... ... @@ -159,9 +182,12 @@ public class CustomWebViewModule extends ReactContextBaseJavaModule implements A
159 182 final String[] acceptTypes = getSafeAcceptedTypes(fileChooserParams);
160 183  
161 184 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  185 + final boolean allowMultiple = fileChooserParams.getMode() == WebChromeClient.FileChooserParams.MODE_OPEN_MULTIPLE;
  186 +
162 187 Intent intent = fileChooserParams.createIntent();
163 188 intent.setType("*/*");
164 189 intent.putExtra(Intent.EXTRA_MIME_TYPES, getAcceptedMimeType(acceptTypes));
  190 + intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, allowMultiple);
165 191 getCurrentActivity().startActivityForResult(intent, SELECT_FILE);
166 192 }
167 193 }
... ...