Index: chrome/browser/notifications/notification_platform_bridge_android.cc |
diff --git a/chrome/browser/notifications/notification_platform_bridge_android.cc b/chrome/browser/notifications/notification_platform_bridge_android.cc |
index ad1d3a5c3fc056b128f3a11153d0570f4f948568..d689b07119699e9667f3e8188d7fed24a878fd85 100644 |
--- a/chrome/browser/notifications/notification_platform_bridge_android.cc |
+++ b/chrome/browser/notifications/notification_platform_bridge_android.cc |
@@ -19,6 +19,7 @@ |
#include "chrome/browser/notifications/notification.h" |
#include "chrome/browser/notifications/notification_common.h" |
#include "chrome/browser/notifications/notification_display_service_factory.h" |
+#include "chrome/browser/notifications/notification_platform_types_android.h" |
#include "chrome/browser/notifications/persistent_notification_delegate.h" |
#include "chrome/browser/notifications/platform_notification_service_impl.h" |
#include "chrome/browser/profiles/profile_manager.h" |
@@ -27,6 +28,7 @@ |
#include "components/pref_registry/pref_registry_syncable.h" |
#include "content/public/common/persistent_notification_status.h" |
#include "content/public/common/platform_notification_data.h" |
+#include "jni/ActionInfo_jni.h" |
#include "jni/NotificationPlatformBridge_jni.h" |
#include "third_party/skia/include/core/SkBitmap.h" |
#include "ui/gfx/android/java_bitmap.h" |
@@ -42,24 +44,48 @@ using base::android::ScopedJavaLocalRef; |
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()); |
+ScopedJavaLocalRef<jobject> ConvertToJavaBitmap(JNIEnv* env, |
+ const gfx::Image& icon) { |
+ SkBitmap skbitmap = icon.AsBitmap(); |
+ ScopedJavaLocalRef<jobject> j_bitmap = NULL; |
Peter Beverloo
2016/10/20 15:36:20
nit: no need to assign NULL - that's the default c
awdf
2016/10/20 16:05:39
Done.
|
+ if (!skbitmap.drawsNothing()) { |
Peter Beverloo
2016/10/20 15:36:20
micro nit: no {} for one line statements
awdf
2016/10/20 16:05:39
Done.
|
+ j_bitmap = gfx::ConvertToJavaBitmap(&skbitmap); |
+ } |
+ return j_bitmap; |
+} |
+NotificationActionType GetNotificationActionType( |
+ message_center::ButtonInfo button) { |
+ switch (button.type) { |
+ case message_center::ButtonType::BUTTON: |
+ return NotificationActionType::BUTTON; |
+ case message_center::ButtonType::TEXT: |
+ return NotificationActionType::TEXT; |
+ } |
Peter Beverloo
2016/10/20 15:36:20
Not all compilers like this. Nothing stops a stati
awdf
2016/10/20 16:05:39
Done.
|
+} |
+ |
+ScopedJavaLocalRef<jobjectArray> ConvertToJavaActionInfos( |
+ const std::vector<message_center::ButtonInfo>& buttons) { |
JNIEnv* env = AttachCurrentThread(); |
- ScopedJavaLocalRef<jclass> clazz = |
- base::android::GetClass(env, "android/graphics/Bitmap"); |
- jobjectArray array = env->NewObjectArray(skbitmaps.size(), clazz.obj(), |
+ ScopedJavaLocalRef<jclass> clazz = base::android::GetClass( |
+ env, "org/chromium/chrome/browser/notifications/ActionInfo"); |
+ jobjectArray array = env->NewObjectArray(buttons.size(), clazz.obj(), |
Peter Beverloo
2016/10/20 15:36:20
nit: s/array/actions/?
awdf
2016/10/20 16:05:39
Done.
|
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()); |
- } |
+ for (size_t i = 0; i < buttons.size(); ++i) { |
+ ScopedJavaLocalRef<jstring> title = |
Peter Beverloo
2016/10/20 15:36:20
nit: consider having a const reference to the butt
awdf
2016/10/20 16:05:39
Done.
|
+ base::android::ConvertUTF16ToJavaString(env, buttons[i].title); |
+ int type = GetNotificationActionType(buttons[i]); |
+ ScopedJavaLocalRef<jstring> placeholder = |
+ base::android::ConvertUTF16ToJavaString(env, buttons[i].placeholder); |
+ ScopedJavaLocalRef<jobject> icon = |
+ ConvertToJavaBitmap(env, buttons[i].icon); |
+ ScopedJavaLocalRef<jobject> action_info = |
+ chrome::Java_ActionInfo_createActionInfo(AttachCurrentThread(), |
+ title.obj(), icon.obj(), type, |
+ placeholder.obj()); |
+ env->SetObjectArrayElement(array, i, action_info.obj()); |
} |
return ScopedJavaLocalRef<jobjectArray>(env, array); |
@@ -230,6 +256,7 @@ void NotificationPlatformBridgeAndroid::Display( |
// TODO(crbug.com/650302): Combine these action_* vectors into a single vector |
awdf
2016/10/20 15:20:34
Argh, commented out code - thought I removed this.
|
// of objects. |
+ /* |
std::vector<base::string16> action_titles_vector; |
std::vector<base::string16> action_types_vector; |
std::vector<base::string16> action_placeholders_vector; |
@@ -258,6 +285,10 @@ void NotificationPlatformBridgeAndroid::Display( |
ScopedJavaLocalRef<jobjectArray> action_icons = |
ConvertToJavaBitmaps(notification.buttons()); |
+ */ |
+ |
+ ScopedJavaLocalRef<jobjectArray> action_infos = |
+ ConvertToJavaActionInfos(notification.buttons()); |
ScopedJavaLocalRef<jintArray> vibration_pattern = |
base::android::ToJavaIntArray(env, notification.vibration_pattern()); |
@@ -269,8 +300,7 @@ void NotificationPlatformBridgeAndroid::Display( |
env, java_object_, j_notification_id, j_origin, j_profile_id, incognito, |
tag, webapk_package, title, body, image, notification_icon, badge, |
vibration_pattern, notification.timestamp().ToJavaTime(), |
- notification.renotify(), notification.silent(), action_titles, |
- action_icons, action_types, action_placeholders); |
+ notification.renotify(), notification.silent(), action_infos); |
regenerated_notification_infos_[notification_id] = |
RegeneratedNotificationInfo(origin_url.spec(), notification.tag(), |