| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ui/message_center/message_center.h" |
| |
| #include "base/logging.h" |
| |
| namespace message_center { |
| |
| //------------------------------------------------------------------------------ |
| |
| MessageCenter::MessageCenter(Host* host) |
| : host_(host), |
| delegate_(NULL) { |
| notification_list_.reset(new NotificationList(this)); |
| } |
| |
| MessageCenter::~MessageCenter() { |
| notification_list_.reset(); |
| } |
| |
| void MessageCenter::SetDelegate(Delegate* delegate) { |
| DCHECK(!delegate_); |
| delegate_ = delegate; |
| } |
| |
| void MessageCenter::SetMessageCenterVisible(bool visible) { |
| notification_list_->SetMessageCenterVisible(visible); |
| } |
| |
| size_t MessageCenter::NotificationCount() const { |
| return notification_list_->NotificationCount(); |
| } |
| |
| size_t MessageCenter::UnreadNotificationCount() const { |
| return notification_list_->unread_count(); |
| } |
| |
| bool MessageCenter::HasPopupNotifications() const { |
| return notification_list_->HasPopupNotifications(); |
| } |
| |
| //------------------------------------------------------------------------------ |
| // Client code interface. |
| |
| void MessageCenter::AddNotification( |
| ui::notifications::NotificationType type, |
| const std::string& id, |
| const string16& title, |
| const string16& message, |
| const string16& display_source, |
| const std::string& extension_id, |
| const base::DictionaryValue* optional_fields) { |
| notification_list_->AddNotification(type, id, title, message, display_source, |
| extension_id, optional_fields); |
| if (host_) |
| host_->MessageCenterChanged(true); |
| } |
| |
| void MessageCenter::UpdateNotification( |
| const std::string& old_id, |
| const std::string& new_id, |
| const string16& title, |
| const string16& message, |
| const base::DictionaryValue* optional_fields) { |
| notification_list_->UpdateNotificationMessage( |
| old_id, new_id, title, message, optional_fields); |
| if (host_) |
| host_->MessageCenterChanged(true); |
| } |
| |
| void MessageCenter::RemoveNotification(const std::string& id) { |
| if (!notification_list_->RemoveNotification(id)) |
| return; |
| if (host_) |
| host_->MessageCenterChanged(false); |
| } |
| |
| void MessageCenter::SetNotificationImage(const std::string& id, |
| const gfx::ImageSkia& image) { |
| if (!notification_list_->SetNotificationImage(id, image)) |
| return; |
| if (host_) |
| host_->MessageCenterChanged(true); |
| } |
| |
| //------------------------------------------------------------------------------ |
| // Overridden from NotificationList::Delegate. |
| |
| void MessageCenter::SendRemoveNotification(const std::string& id) { |
| if (delegate_) |
| delegate_->NotificationRemoved(id); |
| } |
| |
| void MessageCenter::SendRemoveAllNotifications() { |
| if (delegate_) { |
| NotificationList::Notifications notifications; |
| notification_list_->GetNotifications(¬ifications); |
| for (NotificationList::Notifications::const_iterator loopiter = |
| notifications.begin(); |
| loopiter != notifications.end(); ) { |
| NotificationList::Notifications::const_iterator curiter = loopiter++; |
| std::string notification_id = curiter->id; |
| // May call RemoveNotification and erase curiter. |
| delegate_->NotificationRemoved(notification_id); |
| } |
| } |
| } |
| |
| void MessageCenter::DisableNotificationByExtension( |
| const std::string& id) { |
| if (delegate_) |
| delegate_->DisableExtension(id); |
| // When we disable notifications, we remove any existing matching |
| // notifications to avoid adding complicated UI to re-enable the source. |
| notification_list_->SendRemoveNotificationsByExtension(id); |
| } |
| |
| void MessageCenter::DisableNotificationByUrl(const std::string& id) { |
| if (delegate_) |
| delegate_->DisableNotificationsFromSource(id); |
| notification_list_->SendRemoveNotificationsBySource(id); |
| } |
| |
| void MessageCenter::ShowNotificationSettings(const std::string& id) { |
| if (delegate_) |
| delegate_->ShowSettings(id); |
| } |
| |
| void MessageCenter::OnNotificationClicked(const std::string& id) { |
| if (delegate_) |
| delegate_->OnClicked(id); |
| } |
| |
| void MessageCenter::OnQuietModeChanged(bool quiet_mode) { |
| host_->MessageCenterChanged(true); |
| } |
| |
| void MessageCenter::OnButtonClicked(const std::string& id, int button_index) { |
| if (delegate_) |
| delegate_->OnButtonClicked(id, button_index); |
| } |
| |
| NotificationList* MessageCenter::GetNotificationList() { |
| return notification_list_.get(); |
| } |
| |
| void MessageCenter::Delegate::OnButtonClicked(const std::string& id, |
| int button_index) { |
| } |
| |
| } // namespace message_center |