Chromium Code Reviews| Index: chrome/browser/notifications/notification_ui_manager_android.cc |
| diff --git a/chrome/browser/notifications/notification_ui_manager_android.cc b/chrome/browser/notifications/notification_ui_manager_android.cc |
| index d4b2f6f360dd683508045d5915d641e887dcb678..b28de8ec4cf36744a10d55fef8b0d535e440080c 100644 |
| --- a/chrome/browser/notifications/notification_ui_manager_android.cc |
| +++ b/chrome/browser/notifications/notification_ui_manager_android.cc |
| @@ -12,6 +12,7 @@ |
| #include "base/android/jni_string.h" |
| #include "base/files/file_path.h" |
| #include "base/logging.h" |
| +#include "base/strings/nullable_string16.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/notifications/notification.h" |
| @@ -32,6 +33,26 @@ using base::android::ConvertUTF8ToJavaString; |
| namespace { |
| +ScopedJavaLocalRef<jobjectArray> ToJavaArrayOfNullableStrings( |
| + JNIEnv* env, |
| + const std::vector<base::NullableString16>& v) { |
|
Michael van Ouwerkerk
2016/04/06 13:27:35
s/v/strings/
Nina
2016/04/06 16:05:49
Copy pasting = These things happen. Fixed.
|
| + ScopedJavaLocalRef<jclass> string_clazz = |
| + base::android::GetClass(env, "java/lang/String"); |
| + jobjectArray joa = env->NewObjectArray(v.size(), string_clazz.obj(), NULL); |
|
Michael van Ouwerkerk
2016/04/06 13:27:35
nit: s/NULL/nullptr /* initialElement *//
Michael van Ouwerkerk
2016/04/06 13:27:35
nit: s/joa/array/
Nina
2016/04/06 16:05:49
Done.
|
| + jni_generator::CheckException(env); |
|
Michael van Ouwerkerk
2016/04/06 13:27:35
use base::android::CheckException
Nina
2016/04/06 16:05:49
Done.
|
| + |
| + for (size_t i = 0; i < v.size(); ++i) { |
| + if (v[i].is_null()) { |
| + env->SetObjectArrayElement(joa, i, nullptr); |
|
Michael van Ouwerkerk
2016/04/06 13:27:35
This is a no-op, they are all initialized with nul
Nina
2016/04/06 16:05:49
Removed.
|
| + } else { |
| + ScopedJavaLocalRef<jstring> item = |
| + ConvertUTF16ToJavaString(env, v[i].string()); |
|
Michael van Ouwerkerk
2016/04/06 13:27:35
nit: inline this in the SetObjectArrayElement call
Nina
2016/04/06 16:05:49
Done.
|
| + env->SetObjectArrayElement(joa, i, item.obj()); |
| + } |
| + } |
| + return ScopedJavaLocalRef<jobjectArray>(env, joa); |
| +} |
| + |
| ScopedJavaLocalRef<jobjectArray> ConvertToJavaBitmaps( |
| const std::vector<message_center::ButtonInfo>& buttons) { |
| std::vector<SkBitmap> skbitmaps; |
| @@ -170,15 +191,27 @@ void NotificationUIManagerAndroid::Add(const Notification& notification, |
| if (!badge_bitmap.drawsNothing()) |
| badge = gfx::ConvertToJavaBitmap(&badge_bitmap); |
| + std::vector<int> action_types_vector; |
| std::vector<base::string16> action_titles_vector; |
| - for (const message_center::ButtonInfo& button : notification.buttons()) |
| + std::vector<base::NullableString16> action_placeholders_vector; |
| + for (const message_center::ButtonInfo& button : notification.buttons()) { |
| + action_types_vector.push_back(static_cast<int>(button.type)); |
| action_titles_vector.push_back(button.title); |
| + action_placeholders_vector.push_back(button.placeholder); |
| + } |
| + |
| + ScopedJavaLocalRef<jintArray> action_types = |
| + base::android::ToJavaIntArray(env, action_types_vector); |
| + |
| ScopedJavaLocalRef<jobjectArray> action_titles = |
| base::android::ToJavaArrayOfStrings(env, action_titles_vector); |
| ScopedJavaLocalRef<jobjectArray> action_icons = |
| ConvertToJavaBitmaps(notification.buttons()); |
| + ScopedJavaLocalRef<jobjectArray> action_placeholders = |
| + ToJavaArrayOfNullableStrings(env, action_placeholders_vector); |
| + |
| ScopedJavaLocalRef<jintArray> vibration_pattern = |
| base::android::ToJavaIntArray(env, notification.vibration_pattern()); |
| @@ -190,7 +223,8 @@ void NotificationUIManagerAndroid::Add(const Notification& notification, |
| profile_id.obj(), profile->IsOffTheRecord(), tag.obj(), title.obj(), |
| body.obj(), notification_icon.obj(), badge.obj(), vibration_pattern.obj(), |
| notification.timestamp().ToJavaTime(), notification.renotify(), |
| - notification.silent(), action_titles.obj(), action_icons.obj()); |
| + notification.silent(), action_types.obj(), action_titles.obj(), |
| + action_icons.obj(), action_placeholders.obj()); |
| regenerated_notification_infos_[persistent_notification_id] = |
| std::make_pair(origin_url.spec(), notification.tag()); |