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 be87a932e1c922814c0d18fd2eeb949eacb09912..71a4d1529c8eaf027b2c939e49f47a4194714138 100644 |
| --- a/content/browser/android/date_time_chooser_android.cc |
| +++ b/content/browser/android/date_time_chooser_android.cc |
| @@ -4,17 +4,40 @@ |
| #include "content/browser/android/date_time_chooser_android.h" |
| +#include "base/android/jni_android.h" |
| #include "base/android/jni_string.h" |
| +#include "base/i18n/char_iterator.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" |
| +#include "third_party/icu/source/common/unicode/unistr.h" |
| using base::android::AttachCurrentThread; |
| using base::android::ConvertJavaStringToUTF16; |
| using base::android::ConvertUTF8ToJavaString; |
| +using base::android::ConvertUTF16ToJavaString; |
| +namespace { |
| + |
| +string16 SanitizeSuggestionString(const string16& string) { |
| + string16 trimmed = string.substr(0, 255); |
| + icu::UnicodeString sanitized; |
| + base::i18n::UTF16CharIterator sanitized_iterator(&trimmed); |
| + do { |
| + UChar c = sanitized_iterator.get(); |
| + if (u_isprint(c)) |
| + sanitized.append(c); |
| + } while(sanitized_iterator.Advance()); |
|
bulach
2013/12/04 10:37:54
nit: space after "while"
keishi
2013/12/04 12:21:24
Done.
|
| + return string16(sanitized.getBuffer(), |
| + static_cast<size_t>(sanitized.length())); |
| +} |
| + |
| +} // namespace |
| + |
| namespace content { |
| // DateTimeChooserAndroid implementation |
| @@ -40,25 +63,7 @@ void DateTimeChooserAndroid::InitializeDateInputTypes( |
| void DateTimeChooserAndroid::ReplaceDateTime(JNIEnv* env, |
| jobject, |
| - int dialog_type, |
| - int year, |
| - int month, |
| - int day, |
| - int hour, |
| - int minute, |
| - int second, |
| - int milli, |
| - int week) { |
| - ViewHostMsg_DateTimeDialogValue_Params value; |
| - value.year = year; |
| - value.month = month; |
| - value.day = day; |
| - value.hour = hour; |
| - value.minute = minute; |
| - value.second = second; |
| - value.milli = milli; |
| - value.week = week; |
| - value.dialog_type = dialog_type; |
| + jdouble value) { |
| host_->Send(new ViewMsg_ReplaceDateTime(host_->GetRoutingID(), value)); |
| } |
| @@ -66,39 +71,46 @@ void DateTimeChooserAndroid::CancelDialog(JNIEnv* env, jobject) { |
| host_->Send(new ViewMsg_CancelDateTimeDialog(host_->GetRoutingID())); |
| } |
| -void DateTimeChooserAndroid::ShowDialog(ContentViewCore* content, |
| - RenderViewHost* host, |
| - int type, |
| - int year, |
| - int month, |
| - int day, |
| - int hour, |
| - int minute, |
| - int second, |
| - int milli, |
| - int week, |
| - double min, |
| - double max, |
| - double step) { |
| +void DateTimeChooserAndroid::ShowDialog( |
| + ContentViewCore* content, |
| + RenderViewHost* host, |
| + ui::TextInputType dialog_type, |
| + double dialog_value, |
| + double min, |
| + double max, |
| + double step, |
| + const std::vector<DateTimeSuggestion>& suggestions) { |
| host_ = host; |
| JNIEnv* env = AttachCurrentThread(); |
| + ScopedJavaLocalRef<jobjectArray> suggestions_array; |
| + |
| + if (suggestions.size() > 0) { |
| + ScopedJavaLocalRef<jobjectArray> j_suggestions = |
| + Java_DateTimeChooserAndroid_createSuggestionsArray(env, |
|
bulach
2013/12/04 10:37:54
nit: indent + 2
keishi
2013/12/04 12:21:24
Done.
|
| + suggestions.size()); |
| + for (size_t i = 0; i < suggestions.size(); ++i) { |
| + const content::DateTimeSuggestion& suggestion = suggestions[i]; |
| + ScopedJavaLocalRef<jstring> localized_value = ConvertUTF16ToJavaString( |
| + env, SanitizeSuggestionString(suggestion.localized_value)); |
| + ScopedJavaLocalRef<jstring> label = ConvertUTF16ToJavaString( |
| + env, SanitizeSuggestionString(suggestion.label)); |
| + Java_DateTimeChooserAndroid_setDateTimeSuggestionAt(env, |
| + j_suggestions.obj(), i, |
| + suggestion.value, localized_value.obj(), label.obj()); |
| + } |
| + } |
| + |
| j_date_time_chooser_.Reset(Java_DateTimeChooserAndroid_createDateTimeChooser( |
| env, |
| content->GetJavaObject().obj(), |
| reinterpret_cast<intptr_t>(this), |
| - type, |
| - year, |
| - month, |
| - day, |
| - hour, |
| - minute, |
| - second, |
| - milli, |
| - week, |
| + dialog_type, |
| + dialog_value, |
| min, |
| max, |
| - step)); |
| + step, |
| + suggestions_array.obj())); |
| } |
| // ---------------------------------------------------------------------------- |