Commit 2e51bec68fc163fb23df815e4e91c9adb76fe41b
1 parent
9bb69a73
Exists in
master
Support multiple files selection, based on input "multiple" attribute
Showing
1 changed file
with
28 additions
and
2 deletions
Show diff stats
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 | } | ... | ... |