OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/message_center/message_center_impl.h" | 5 #include "ui/message_center/message_center_impl.h" |
6 | 6 |
7 #include "base/observer_list.h" | 7 #include "base/observer_list.h" |
8 #include "ui/message_center/message_center_observer.h" | 8 #include "ui/message_center/message_center_observer.h" |
9 #include "ui/message_center/notification.h" | 9 #include "ui/message_center/notification.h" |
10 #include "ui/message_center/notification_list.h" | 10 #include "ui/message_center/notification_list.h" |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 | 57 |
58 bool MessageCenterImpl::HasNotification(const std::string& id) { | 58 bool MessageCenterImpl::HasNotification(const std::string& id) { |
59 return notification_list_->HasNotification(id); | 59 return notification_list_->HasNotification(id); |
60 } | 60 } |
61 | 61 |
62 bool MessageCenterImpl::IsQuietMode() const { | 62 bool MessageCenterImpl::IsQuietMode() const { |
63 return notification_list_->quiet_mode(); | 63 return notification_list_->quiet_mode(); |
64 } | 64 } |
65 | 65 |
66 bool MessageCenterImpl::HasClickedListener(const std::string& id) { | 66 bool MessageCenterImpl::HasClickedListener(const std::string& id) { |
67 return delegate_ && delegate_->HasClickedListener(id); | 67 NotificationDelegate* delegate = |
| 68 notification_list_->GetNotificationDelegate(id); |
| 69 return delegate && delegate->HasClickedListener(); |
68 } | 70 } |
69 | 71 |
70 const NotificationList::Notifications& MessageCenterImpl::GetNotifications() { | 72 const NotificationList::Notifications& MessageCenterImpl::GetNotifications() { |
71 return notification_list_->GetNotifications(); | 73 return notification_list_->GetNotifications(); |
72 } | 74 } |
73 | 75 |
74 NotificationList::PopupNotifications | 76 NotificationList::PopupNotifications |
75 MessageCenterImpl::GetPopupNotifications() { | 77 MessageCenterImpl::GetPopupNotifications() { |
76 return notification_list_->GetPopupNotifications(); | 78 return notification_list_->GetPopupNotifications(); |
77 } | 79 } |
78 | 80 |
79 //------------------------------------------------------------------------------ | 81 //------------------------------------------------------------------------------ |
80 // Client code interface. | 82 // Client code interface. |
81 | 83 |
82 void MessageCenterImpl::AddNotification( | 84 void MessageCenterImpl::AddNotification( |
83 NotificationType type, | 85 NotificationType type, |
84 const std::string& id, | 86 const std::string& id, |
85 const string16& title, | 87 const string16& title, |
86 const string16& message, | 88 const string16& message, |
87 const string16& display_source, | 89 const string16& display_source, |
88 const std::string& extension_id, | 90 const std::string& extension_id, |
89 const base::DictionaryValue* optional_fields) { | 91 const base::DictionaryValue* optional_fields, |
| 92 NotificationDelegate* delegate) { |
90 // Sometimes the notification can be added with the same id and the | 93 // Sometimes the notification can be added with the same id and the |
91 // |notification_list| will replace the notification instead of adding new. | 94 // |notification_list| will replace the notification instead of adding new. |
92 // This is essentially an update rather than addition. | 95 // This is essentially an update rather than addition. |
93 bool already_exists = notification_list_->HasNotification(id); | 96 bool already_exists = notification_list_->HasNotification(id); |
94 notification_list_->AddNotification(type, id, title, message, display_source, | 97 notification_list_->AddNotification(type, |
95 extension_id, optional_fields); | 98 id, |
| 99 title, |
| 100 message, |
| 101 display_source, |
| 102 extension_id, |
| 103 optional_fields, |
| 104 delegate); |
96 if (already_exists) { | 105 if (already_exists) { |
97 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, | 106 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, |
98 OnNotificationUpdated(id)); | 107 OnNotificationUpdated(id)); |
99 } else { | 108 } else { |
100 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, | 109 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, |
101 OnNotificationAdded(id)); | 110 OnNotificationAdded(id)); |
102 } | 111 } |
103 } | 112 } |
104 | 113 |
105 void MessageCenterImpl::UpdateNotification( | 114 void MessageCenterImpl::UpdateNotification( |
106 const std::string& old_id, | 115 const std::string& old_id, |
107 const std::string& new_id, | 116 const std::string& new_id, |
108 const string16& title, | 117 const string16& title, |
109 const string16& message, | 118 const string16& message, |
110 const base::DictionaryValue* optional_fields) { | 119 const base::DictionaryValue* optional_fields, |
| 120 NotificationDelegate* delegate) { |
111 notification_list_->UpdateNotificationMessage( | 121 notification_list_->UpdateNotificationMessage( |
112 old_id, new_id, title, message, optional_fields); | 122 old_id, new_id, title, message, optional_fields, delegate); |
113 if (old_id == new_id) { | 123 if (old_id == new_id) { |
114 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, | 124 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, |
115 OnNotificationUpdated(new_id)); | 125 OnNotificationUpdated(new_id)); |
116 } else { | 126 } else { |
117 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, | 127 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, |
118 OnNotificationRemoved(old_id, false)); | 128 OnNotificationRemoved(old_id, false)); |
119 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, | 129 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, |
120 OnNotificationAdded(new_id)); | 130 OnNotificationAdded(new_id)); |
121 } | 131 } |
122 } | 132 } |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 notification_list_->MarkNotificationAsExpanded(id); | 236 notification_list_->MarkNotificationAsExpanded(id); |
227 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, | 237 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, |
228 OnNotificationUpdated(id)); | 238 OnNotificationUpdated(id)); |
229 } | 239 } |
230 | 240 |
231 void MessageCenterImpl::ClickOnNotification(const std::string& id) { | 241 void MessageCenterImpl::ClickOnNotification(const std::string& id) { |
232 if (!HasNotification(id)) | 242 if (!HasNotification(id)) |
233 return; | 243 return; |
234 if (HasPopupNotifications()) | 244 if (HasPopupNotifications()) |
235 MarkSinglePopupAsShown(id, true); | 245 MarkSinglePopupAsShown(id, true); |
236 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, | 246 NotificationDelegate* delegate = |
237 OnNotificationClicked(id)); | 247 notification_list_->GetNotificationDelegate(id); |
| 248 if (delegate) |
| 249 delegate->Click(); |
| 250 FOR_EACH_OBSERVER( |
| 251 MessageCenterObserver, observer_list_, OnNotificationClicked(id)); |
238 } | 252 } |
239 | 253 |
240 void MessageCenterImpl::ClickOnNotificationButton(const std::string& id, | 254 void MessageCenterImpl::ClickOnNotificationButton(const std::string& id, |
241 int button_index) { | 255 int button_index) { |
242 if (!HasNotification(id)) | 256 if (!HasNotification(id)) |
243 return; | 257 return; |
244 if (HasPopupNotifications()) | 258 if (HasPopupNotifications()) |
245 MarkSinglePopupAsShown(id, true); | 259 MarkSinglePopupAsShown(id, true); |
246 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, | 260 NotificationDelegate* delegate = |
247 OnNotificationButtonClicked(id, button_index)); | 261 notification_list_->GetNotificationDelegate(id); |
| 262 if (delegate) |
| 263 delegate->ButtonClick(button_index); |
| 264 FOR_EACH_OBSERVER( |
| 265 MessageCenterObserver, observer_list_, OnNotificationButtonClicked( |
| 266 id, button_index)); |
248 } | 267 } |
249 | 268 |
250 void MessageCenterImpl::MarkSinglePopupAsShown(const std::string& id, | 269 void MessageCenterImpl::MarkSinglePopupAsShown(const std::string& id, |
251 bool mark_notification_as_read) { | 270 bool mark_notification_as_read) { |
252 if (!HasNotification(id)) | 271 if (!HasNotification(id)) |
253 return; | 272 return; |
254 notification_list_->MarkSinglePopupAsShown(id, mark_notification_as_read); | 273 notification_list_->MarkSinglePopupAsShown(id, mark_notification_as_read); |
255 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, | 274 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, |
256 OnNotificationUpdated(id)); | 275 OnNotificationUpdated(id)); |
257 } | 276 } |
258 | 277 |
259 void MessageCenterImpl::DisplayedNotification(const std::string& id) { | 278 void MessageCenterImpl::DisplayedNotification(const std::string& id) { |
260 if (!HasNotification(id)) | 279 if (!HasNotification(id)) |
261 return; | 280 return; |
262 | 281 |
263 if (HasPopupNotifications()) | 282 if (HasPopupNotifications()) |
264 notification_list_->MarkSinglePopupAsDisplayed(id); | 283 notification_list_->MarkSinglePopupAsDisplayed(id); |
265 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, | 284 NotificationDelegate* delegate = |
266 OnNotificationDisplayed(id)); | 285 notification_list_->GetNotificationDelegate(id); |
| 286 if (delegate) |
| 287 delegate->Display(); |
| 288 FOR_EACH_OBSERVER( |
| 289 MessageCenterObserver, observer_list_, OnNotificationDisplayed(id)); |
267 } | 290 } |
268 | 291 |
269 void MessageCenterImpl::SetQuietMode(bool in_quiet_mode) { | 292 void MessageCenterImpl::SetQuietMode(bool in_quiet_mode) { |
270 notification_list_->SetQuietMode(in_quiet_mode); | 293 notification_list_->SetQuietMode(in_quiet_mode); |
271 } | 294 } |
272 | 295 |
273 void MessageCenterImpl::EnterQuietModeWithExpire( | 296 void MessageCenterImpl::EnterQuietModeWithExpire( |
274 const base::TimeDelta& expires_in) { | 297 const base::TimeDelta& expires_in) { |
275 notification_list_->EnterQuietModeWithExpire(expires_in); | 298 notification_list_->EnterQuietModeWithExpire(expires_in); |
276 } | 299 } |
277 | 300 |
278 } // namespace message_center | 301 } // namespace message_center |
OLD | NEW |