Chromium Code Reviews| Index: ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java |
| diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java |
| index 7391ac5ba349667b937c9d7b9d1eb03b7f579ecf..316ba8ca7cdea2b81f7f6fda34e0c7dfc99d7482 100644 |
| --- a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java |
| +++ b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java |
| @@ -5,6 +5,7 @@ |
| package org.chromium.ui.base; |
| import android.app.Activity; |
| +import android.content.ClipData; |
| import android.content.ContentResolver; |
| import android.content.Intent; |
| import android.database.Cursor; |
| @@ -50,10 +51,12 @@ class SelectFileDialog implements WindowAndroid.IntentCallback{ |
| * Creates and starts an intent based on the passed fileTypes and capture value. |
| * @param fileTypes MIME types requested (i.e. "image/*") |
| * @param capture The capture value as described in http://www.w3.org/TR/html-media-capture/ |
| + * @param multiple Whether it should be possible to select multiple files. |
| * @param window The WindowAndroid that can show intents |
| */ |
| @CalledByNative |
| - private void selectFile(String[] fileTypes, boolean capture, WindowAndroid window) { |
| + private void selectFile( |
| + String[] fileTypes, boolean capture, boolean multiple, WindowAndroid window) { |
| mFileTypes = new ArrayList<String>(Arrays.asList(fileTypes)); |
| mCapture = capture; |
| @@ -78,6 +81,10 @@ class SelectFileDialog implements WindowAndroid.IntentCallback{ |
| Intent getContentIntent = new Intent(Intent.ACTION_GET_CONTENT); |
| getContentIntent.addCategory(Intent.CATEGORY_OPENABLE); |
| + |
| + if (multiple) |
| + getContentIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); |
| + |
| ArrayList<Intent> extraIntents = new ArrayList<Intent>(); |
| if (!noSpecificType()) { |
| // Create a chooser based on the accept type that was specified in the webpage. Note |
| @@ -183,6 +190,32 @@ class SelectFileDialog implements WindowAndroid.IntentCallback{ |
| return; |
| } |
| + // Path for when EXTRA_ALLOW_MULTIPLE Intent extra has been defined. Each of the selected |
| + // files will be shared as an entry on the Intent's ClipData. |
| + if (results.getData() == null && results.getClipData() != null) { |
|
Miguel Garcia
2014/08/05 18:01:00
can you check that the |results| intent in fact co
Peter Beverloo
2014/08/05 18:44:53
|results| is the resulting Intent, not the content
|
| + ClipData clipData = results.getClipData(); |
| + |
| + int itemCount = clipData.getItemCount(); |
| + if (itemCount == 0) { |
| + onFileNotSelected(); |
| + return; |
| + } |
| + |
| + String[] filePathArray = new String[itemCount]; |
| + String[] displayNameArray = new String[itemCount]; |
| + |
| + for (int i = 0; i < itemCount; ++i) { |
| + final Uri uri = clipData.getItemAt(i).getUri(); |
| + |
| + filePathArray[i] = uri.toString(); |
| + displayNameArray[i] = resolveFileName(uri, contentResolver); |
| + } |
| + |
| + nativeOnMultipleFilesSelected(mNativeSelectFileDialog, |
| + filePathArray, displayNameArray); |
| + return; |
| + } |
| + |
| if (ContentResolver.SCHEME_FILE.equals(results.getData().getScheme())) { |
| nativeOnFileSelected(mNativeSelectFileDialog, |
| results.getData().getSchemeSpecificPart(), ""); |
| @@ -262,5 +295,7 @@ class SelectFileDialog implements WindowAndroid.IntentCallback{ |
| private native void nativeOnFileSelected(long nativeSelectFileDialogImpl, |
| String filePath, String displayName); |
| + private native void nativeOnMultipleFilesSelected(long nativeSelectFileDialogImpl, |
| + String[] filePathArray, String[] displayNameArray); |
| private native void nativeOnFileNotSelected(long nativeSelectFileDialogImpl); |
| } |