| 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..64122c563447f97217a48d82cf879e0cca4e2e7f 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,24 @@ using base::android::ConvertUTF8ToJavaString;
|
|
|
| namespace {
|
|
|
| +ScopedJavaLocalRef<jobjectArray> ToJavaArrayOfNullableStrings(
|
| + JNIEnv* env,
|
| + const std::vector<base::NullableString16>& strings) {
|
| + ScopedJavaLocalRef<jclass> string_clazz =
|
| + base::android::GetClass(env, "java/lang/String");
|
| + jobjectArray array =
|
| + env->NewObjectArray(strings.size(), string_clazz.obj(), nullptr);
|
| + base::android::CheckException(env);
|
| +
|
| + for (size_t i = 0; i < strings.size(); ++i) {
|
| + if (strings[i].is_null())
|
| + continue;
|
| + env->SetObjectArrayElement(
|
| + array, i, ConvertUTF16ToJavaString(env, strings[i].string()).obj());
|
| + }
|
| + return ScopedJavaLocalRef<jobjectArray>(env, array);
|
| +}
|
| +
|
| ScopedJavaLocalRef<jobjectArray> ConvertToJavaBitmaps(
|
| const std::vector<message_center::ButtonInfo>& buttons) {
|
| std::vector<SkBitmap> skbitmaps;
|
| @@ -170,15 +189,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 +221,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());
|
|
|