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

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

Issue 1864053002: Implement Android UI of web notification inline replies Base URL: https://chromium.googlesource.com/chromium/src.git@inline_replies_ps1
Patch Set: Created 4 years, 8 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 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());

Powered by Google App Engine
This is Rietveld 408576698