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

Unified Diff: content/browser/android/date_time_chooser_android.cc

Issue 23623019: Support datalist for date/time input types on Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years 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: 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()));
}
// ----------------------------------------------------------------------------

Powered by Google App Engine
This is Rietveld 408576698