Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1737)

Unified Diff: ui/shell_dialogs/select_file_dialog_android.cc

Issue 443683002: Allow <input type="file" multiple /> to be used on Android JB MR2+. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add a test Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/shell_dialogs/select_file_dialog_android.cc
diff --git a/ui/shell_dialogs/select_file_dialog_android.cc b/ui/shell_dialogs/select_file_dialog_android.cc
index af15c977b0b05261f39aa0fddf88a942d1791594..b9acef51f3b1b63c6c2c58d39a5c32733c40c083 100644
--- a/ui/shell_dialogs/select_file_dialog_android.cc
+++ b/ui/shell_dialogs/select_file_dialog_android.cc
@@ -16,6 +16,8 @@
#include "ui/base/android/window_android.h"
#include "ui/shell_dialogs/selected_file_info.h"
+using base::android::ConvertJavaStringToUTF8;
+
namespace ui {
// static
@@ -28,18 +30,49 @@ void SelectFileDialogImpl::OnFileSelected(JNIEnv* env,
jobject java_object,
jstring filepath,
jstring display_name) {
- if (listener_) {
- std::string path = base::android::ConvertJavaStringToUTF8(env, filepath);
- std::string file_name =
- base::android::ConvertJavaStringToUTF8(env, display_name);
+ if (!listener_)
+ return;
+
+ std::string path = ConvertJavaStringToUTF8(env, filepath);
+ std::string file_name = ConvertJavaStringToUTF8(env, display_name);
+ base::FilePath file_path = base::FilePath(path);
+ ui::SelectedFileInfo file_info;
+ file_info.file_path = file_path;
+ file_info.local_path = file_path;
+ if (!file_name.empty())
+ file_info.display_name = file_name;
+
+ listener_->FileSelectedWithExtraInfo(file_info, 0, NULL);
+}
+
+void SelectFileDialogImpl::OnMultipleFilesSelected(JNIEnv* env,
+ jobject java_object,
+ jobjectArray filepaths,
+ jobjectArray display_names) {
+ if (!listener_)
+ return;
+
+ std::vector<ui::SelectedFileInfo> selected_files;
+
+ jsize length = env->GetArrayLength(filepaths);
Miguel Garcia 2014/08/05 18:01:00 can you DCHECK that env->GetArrayLength(filepaths)
Peter Beverloo 2014/08/05 18:44:53 Done.
+ for (int i = 0; i < length; ++i) {
+ std::string path = ConvertJavaStringToUTF8(
+ env, static_cast<jstring>(env->GetObjectArrayElement(filepaths, i)));
+ std::string display_name = ConvertJavaStringToUTF8(
+ env,
+ static_cast<jstring>(env->GetObjectArrayElement(display_names, i)));
+
base::FilePath file_path = base::FilePath(path);
+
ui::SelectedFileInfo file_info;
file_info.file_path = file_path;
file_info.local_path = file_path;
- if (!file_name.empty())
- file_info.display_name = file_name;
- listener_->FileSelectedWithExtraInfo(file_info, 0, NULL);
+ file_info.display_name = display_name;
+
+ selected_files.push_back(file_info);
}
+
+ listener_->MultiFilesSelectedWithExtraInfo(selected_files, NULL);
}
void SelectFileDialogImpl::OnFileNotSelected(
@@ -74,16 +107,18 @@ void SelectFileDialogImpl::SelectFileImpl(
AcceptTypes accept_types = std::make_pair(std::vector<base::string16>(),
false);
- if (params) {
+ if (params)
accept_types = *(reinterpret_cast<AcceptTypes*>(params));
- }
ScopedJavaLocalRef<jobjectArray> accept_types_java =
base::android::ToJavaArrayOfStrings(env, accept_types.first);
+ bool accept_multiple_files = SelectFileDialog::SELECT_OPEN_MULTI_FILE == type;
Miguel Garcia 2014/08/05 18:01:00 Can you check that you are in JB MR2 or higher jus
Peter Beverloo 2014/08/05 18:44:53 I can add this check in the Java file, but I don't
+
Java_SelectFileDialog_selectFile(env, java_object_.obj(),
accept_types_java.obj(),
accept_types.second,
+ accept_multiple_files,
owning_window->GetJavaObject().obj());
}

Powered by Google App Engine
This is Rietveld 408576698