Index: content/browser/android/date_time_chooser_android.cc |
diff --git a/content/browser/android/date_time_chooser_android.cc b/content/browser/android/date_time_chooser_android.cc |
index 87f02b9f72960de9e72c916663917a99b7cdc703..2ab675bc83dc5b38dd5be9a024455123eef9af14 100644 |
--- a/content/browser/android/date_time_chooser_android.cc |
+++ b/content/browser/android/date_time_chooser_android.cc |
@@ -4,17 +4,36 @@ |
#include "content/browser/android/date_time_chooser_android.h" |
+#include "base/android/jni_android.h" |
#include "base/android/jni_string.h" |
+#include "content/common/date_time_suggestion.h" |
#include "content/common/view_messages.h" |
#include "content/public/browser/android/content_view_core.h" |
#include "content/public/browser/render_view_host.h" |
#include "jni/DateTimeChooserAndroid_jni.h" |
+#include "third_party/icu/source/common/unicode/uchar.h" |
using base::android::AttachCurrentThread; |
using base::android::ConvertJavaStringToUTF16; |
using base::android::ConvertUTF8ToJavaString; |
+using base::android::ConvertUTF16ToJavaString; |
+namespace { |
+ |
+bool IsNonPrintableChar(char16 c) { |
+ return !u_isprint(static_cast<UChar>(c)); |
+} |
+ |
+string16 SanitizeSuggestionString(string16 string) { |
bulach
2013/12/03 14:22:29
nit: parameter as const&?
keishi
2013/12/03 16:52:34
Done.
|
+ string.erase( |
+ std::remove_if(string.begin(), string.end(), &IsNonPrintableChar), |
bulach
2013/12/03 14:22:29
shouldn't this be using base::i18n::UTF16CharItera
keishi
2013/12/03 16:52:34
Done.
|
+ string.end()); |
+ return string.substr(0, 255); |
+} |
+ |
+} // namespace |
+ |
namespace content { |
// DateTimeChooserAndroid implementation |
@@ -55,10 +74,37 @@ void DateTimeChooserAndroid::ShowDialog( |
double dialog_value, |
double min, |
double max, |
- double step) { |
+ double step, |
+ std::vector<DateTimeSuggestion> suggestions) { |
host_ = host; |
JNIEnv* env = AttachCurrentThread(); |
+ ScopedJavaLocalRef<jobjectArray> suggestions_array; |
+ |
+ if (suggestions.size() > 0) { |
+ ScopedJavaLocalRef<jclass> suggestion_class = base::android::GetClass( |
+ env, |
+ "org/chromium/content/browser/input/DateTimeSuggestion"); |
bulach
2013/12/03 14:22:29
we try as much as possible to use GetClass, NewObj
keishi
2013/12/03 16:52:34
Done.
|
+ suggestions_array.Reset(env, env->NewObjectArray(suggestions.size(), |
+ suggestion_class.obj(), |
+ NULL)); |
+ for (size_t i = 0; i < suggestions.size(); ++i) { |
+ const content::DateTimeSuggestion& suggestion = suggestions[i]; |
+ ScopedJavaLocalRef<jstring> localizedValue = ConvertUTF16ToJavaString( |
bulach
2013/12/03 14:22:29
nit: localized_value
keishi
2013/12/03 16:52:34
Done.
|
+ env, SanitizeSuggestionString(suggestion.localizedValue)); |
+ ScopedJavaLocalRef<jstring> label = ConvertUTF16ToJavaString( |
+ env, SanitizeSuggestionString(suggestion.label)); |
+ env->SetObjectArrayElement( |
+ suggestions_array.obj(), |
+ i, |
+ Java_DateTimeChooserAndroid_createDateTimeSuggestion( |
+ env, |
+ suggestion.value, |
+ localizedValue.obj(), |
+ label.obj()).obj()); |
+ } |
+ } |
+ |
j_date_time_chooser_.Reset(Java_DateTimeChooserAndroid_createDateTimeChooser( |
env, |
content->GetJavaObject().obj(), |
@@ -67,7 +113,8 @@ void DateTimeChooserAndroid::ShowDialog( |
dialog_value, |
min, |
max, |
- step)); |
+ step, |
+ suggestions_array.obj())); |
} |
// ---------------------------------------------------------------------------- |