| 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 ac6706155644ba76225dce99a49237f4be5af0dc..f1b8dc5e81f09821c763b6d0255c96227b52a9fd 100644
|
| --- a/chrome/browser/notifications/notification_ui_manager_android.cc
|
| +++ b/chrome/browser/notifications/notification_ui_manager_android.cc
|
| @@ -5,6 +5,7 @@
|
| #include "chrome/browser/notifications/notification_ui_manager_android.h"
|
|
|
| #include <utility>
|
| +#include <vector>
|
|
|
| #include "base/android/context_utils.h"
|
| #include "base/android/jni_array.h"
|
| @@ -20,6 +21,7 @@
|
| #include "content/public/common/persistent_notification_status.h"
|
| #include "content/public/common/platform_notification_data.h"
|
| #include "jni/NotificationUIManager_jni.h"
|
| +#include "third_party/skia/include/core/SkBitmap.h"
|
| #include "ui/gfx/android/java_bitmap.h"
|
| #include "ui/gfx/image/image.h"
|
|
|
| @@ -28,6 +30,33 @@ using base::android::ConvertJavaStringToUTF8;
|
| using base::android::ConvertUTF16ToJavaString;
|
| using base::android::ConvertUTF8ToJavaString;
|
|
|
| +namespace {
|
| +
|
| +ScopedJavaLocalRef<jobjectArray> ConvertToJavaBitmaps(
|
| + const std::vector<message_center::ButtonInfo>& buttons) {
|
| + std::vector<SkBitmap> skbitmaps;
|
| + for (const message_center::ButtonInfo& button : buttons)
|
| + skbitmaps.push_back(button.icon.AsBitmap());
|
| +
|
| + JNIEnv* env = AttachCurrentThread();
|
| + ScopedJavaLocalRef<jclass> clazz =
|
| + base::android::GetClass(env, "android/graphics/Bitmap");
|
| + jobjectArray array = env->NewObjectArray(skbitmaps.size(), clazz.obj(),
|
| + nullptr /* initialElement */);
|
| + base::android::CheckException(env);
|
| +
|
| + for (size_t i = 0; i < skbitmaps.size(); ++i) {
|
| + if (!skbitmaps[i].drawsNothing()) {
|
| + env->SetObjectArrayElement(
|
| + array, i, gfx::ConvertToJavaBitmap(&(skbitmaps[i])).obj());
|
| + }
|
| + }
|
| +
|
| + return ScopedJavaLocalRef<jobjectArray>(env, array);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| // Called by the Java side when a notification event has been received, but the
|
| // NotificationUIManager has not been initialized yet. Enforce initialization of
|
| // the class.
|
| @@ -131,11 +160,10 @@ void NotificationUIManagerAndroid::Add(const Notification& notification,
|
| ScopedJavaLocalRef<jstring> body = ConvertUTF16ToJavaString(
|
| env, notification.message());
|
|
|
| - ScopedJavaLocalRef<jobject> icon;
|
| -
|
| - SkBitmap icon_bitmap = notification.icon().AsBitmap();
|
| - if (!icon_bitmap.isNull())
|
| - icon = gfx::ConvertToJavaBitmap(&icon_bitmap);
|
| + ScopedJavaLocalRef<jobject> notification_icon;
|
| + SkBitmap notification_icon_bitmap = notification.icon().AsBitmap();
|
| + if (!notification_icon_bitmap.drawsNothing())
|
| + notification_icon = gfx::ConvertToJavaBitmap(¬ification_icon_bitmap);
|
|
|
| std::vector<base::string16> action_titles_vector;
|
| for (const message_center::ButtonInfo& button : notification.buttons())
|
| @@ -143,6 +171,9 @@ void NotificationUIManagerAndroid::Add(const Notification& notification,
|
| ScopedJavaLocalRef<jobjectArray> action_titles =
|
| base::android::ToJavaArrayOfStrings(env, action_titles_vector);
|
|
|
| + ScopedJavaLocalRef<jobjectArray> action_icons =
|
| + ConvertToJavaBitmaps(notification.buttons());
|
| +
|
| ScopedJavaLocalRef<jintArray> vibration_pattern =
|
| base::android::ToJavaIntArray(env, notification.vibration_pattern());
|
|
|
| @@ -152,9 +183,9 @@ void NotificationUIManagerAndroid::Add(const Notification& notification,
|
| Java_NotificationUIManager_displayNotification(
|
| env, java_object_.obj(), persistent_notification_id, origin.obj(),
|
| profile_id.obj(), profile->IsOffTheRecord(), tag.obj(), title.obj(),
|
| - body.obj(), icon.obj(), vibration_pattern.obj(),
|
| + body.obj(), notification_icon.obj(), vibration_pattern.obj(),
|
| notification.timestamp().ToJavaTime(), notification.renotify(),
|
| - notification.silent(), action_titles.obj());
|
| + notification.silent(), action_titles.obj(), action_icons.obj());
|
|
|
| regenerated_notification_infos_[persistent_notification_id] =
|
| std::make_pair(origin_url.spec(), notification.tag());
|
|
|