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

Unified Diff: chrome/browser/notifications/notification_ui_manager_android.cc

Issue 1681123002: Plumb Notification action icons through to the UI layer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ActionIconResourceFetching
Patch Set: Rebase. Appease FindBugs some more. Created 4 years, 10 months 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: 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 19626a3dbe4cb82ef0a8a534ab9036bcc583a412..640152ab4552a33e4d5ced3fbf2165c8f74b643c 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(&notification_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.silent(),
- action_titles.obj());
+ action_titles.obj(), action_icons.obj());
regenerated_notification_infos_[persistent_notification_id] =
std::make_pair(origin_url.spec(), notification.tag());

Powered by Google App Engine
This is Rietveld 408576698