Chromium Code Reviews| 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())); |
| } |
| // ---------------------------------------------------------------------------- |