OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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.h" | 5 #include "ui/message_center/message_center.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/memory/singleton.h" |
| 9 #include "base/observer_list.h" |
8 | 10 |
9 namespace message_center { | 11 namespace message_center { |
10 | 12 |
11 //------------------------------------------------------------------------------ | 13 //------------------------------------------------------------------------------ |
12 | 14 |
13 MessageCenter::MessageCenter(Host* host) | 15 // static |
14 : host_(host), | 16 MessageCenter* MessageCenter::GetInstance() { |
15 delegate_(NULL) { | 17 return Singleton<MessageCenter>::get(); |
16 notification_list_.reset(new NotificationList(this)); | |
17 } | 18 } |
18 | 19 |
19 MessageCenter::~MessageCenter() { | 20 MessageCenter::~MessageCenter() { |
20 notification_list_.reset(); | 21 notification_list_.reset(); |
21 } | 22 } |
22 | 23 |
| 24 void MessageCenter::AddObserver(Observer* observer) { |
| 25 observer_list_.AddObserver(observer); |
| 26 } |
| 27 |
| 28 void MessageCenter::RemoveObserver(Observer* observer) { |
| 29 observer_list_.RemoveObserver(observer); |
| 30 } |
| 31 |
23 void MessageCenter::SetDelegate(Delegate* delegate) { | 32 void MessageCenter::SetDelegate(Delegate* delegate) { |
24 DCHECK(!delegate_); | |
25 delegate_ = delegate; | 33 delegate_ = delegate; |
26 } | 34 } |
27 | 35 |
28 void MessageCenter::SetMessageCenterVisible(bool visible) { | 36 void MessageCenter::SetMessageCenterVisible(bool visible) { |
29 notification_list_->SetMessageCenterVisible(visible); | 37 notification_list_->SetMessageCenterVisible(visible); |
30 } | 38 } |
31 | 39 |
32 size_t MessageCenter::NotificationCount() const { | 40 size_t MessageCenter::NotificationCount() const { |
33 return notification_list_->NotificationCount(); | 41 return notification_list_->NotificationCount(); |
34 } | 42 } |
(...skipping 12 matching lines...) Expand all Loading... |
47 void MessageCenter::AddNotification( | 55 void MessageCenter::AddNotification( |
48 ui::notifications::NotificationType type, | 56 ui::notifications::NotificationType type, |
49 const std::string& id, | 57 const std::string& id, |
50 const string16& title, | 58 const string16& title, |
51 const string16& message, | 59 const string16& message, |
52 const string16& display_source, | 60 const string16& display_source, |
53 const std::string& extension_id, | 61 const std::string& extension_id, |
54 const base::DictionaryValue* optional_fields) { | 62 const base::DictionaryValue* optional_fields) { |
55 notification_list_->AddNotification(type, id, title, message, display_source, | 63 notification_list_->AddNotification(type, id, title, message, display_source, |
56 extension_id, optional_fields); | 64 extension_id, optional_fields); |
57 if (host_) | 65 NotifyMessageCenterChanged(true); |
58 host_->MessageCenterChanged(true); | |
59 } | 66 } |
60 | 67 |
61 void MessageCenter::UpdateNotification( | 68 void MessageCenter::UpdateNotification( |
62 const std::string& old_id, | 69 const std::string& old_id, |
63 const std::string& new_id, | 70 const std::string& new_id, |
64 const string16& title, | 71 const string16& title, |
65 const string16& message, | 72 const string16& message, |
66 const base::DictionaryValue* optional_fields) { | 73 const base::DictionaryValue* optional_fields) { |
67 notification_list_->UpdateNotificationMessage( | 74 notification_list_->UpdateNotificationMessage( |
68 old_id, new_id, title, message, optional_fields); | 75 old_id, new_id, title, message, optional_fields); |
69 if (host_) | 76 NotifyMessageCenterChanged(true); |
70 host_->MessageCenterChanged(true); | |
71 } | 77 } |
72 | 78 |
73 void MessageCenter::RemoveNotification(const std::string& id) { | 79 void MessageCenter::RemoveNotification(const std::string& id) { |
74 if (!notification_list_->RemoveNotification(id)) | 80 if (!notification_list_->RemoveNotification(id)) |
75 return; | 81 return; |
76 if (host_) | 82 NotifyMessageCenterChanged(false); |
77 host_->MessageCenterChanged(false); | |
78 } | 83 } |
79 | 84 |
80 void MessageCenter::SetNotificationPrimaryIcon(const std::string& id, | 85 void MessageCenter::SetNotificationPrimaryIcon(const std::string& id, |
81 const gfx::ImageSkia& image) { | 86 const gfx::ImageSkia& image) { |
82 if (notification_list_->SetNotificationPrimaryIcon(id, image) && host_) | 87 if (notification_list_->SetNotificationPrimaryIcon(id, image)) |
83 host_->MessageCenterChanged(true); | 88 NotifyMessageCenterChanged(true); |
84 } | 89 } |
85 | 90 |
86 void MessageCenter::SetNotificationSecondaryIcon(const std::string& id, | 91 void MessageCenter::SetNotificationSecondaryIcon(const std::string& id, |
87 const gfx::ImageSkia& image) { | 92 const gfx::ImageSkia& image) { |
88 if (notification_list_->SetNotificationSecondaryIcon(id, image) && host_) | 93 if (notification_list_->SetNotificationSecondaryIcon(id, image)) |
89 host_->MessageCenterChanged(true); | 94 NotifyMessageCenterChanged(true); |
90 } | 95 } |
91 | 96 |
92 //------------------------------------------------------------------------------ | 97 //------------------------------------------------------------------------------ |
93 // Overridden from NotificationList::Delegate. | 98 // Overridden from NotificationList::Delegate. |
94 | 99 |
95 void MessageCenter::SendRemoveNotification(const std::string& id) { | 100 void MessageCenter::SendRemoveNotification(const std::string& id) { |
96 if (delegate_) | 101 if (delegate_) |
97 delegate_->NotificationRemoved(id); | 102 delegate_->NotificationRemoved(id); |
98 } | 103 } |
99 | 104 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 if (delegate_) | 136 if (delegate_) |
132 delegate_->ShowSettings(id); | 137 delegate_->ShowSettings(id); |
133 } | 138 } |
134 | 139 |
135 void MessageCenter::OnNotificationClicked(const std::string& id) { | 140 void MessageCenter::OnNotificationClicked(const std::string& id) { |
136 if (delegate_) | 141 if (delegate_) |
137 delegate_->OnClicked(id); | 142 delegate_->OnClicked(id); |
138 } | 143 } |
139 | 144 |
140 void MessageCenter::OnQuietModeChanged(bool quiet_mode) { | 145 void MessageCenter::OnQuietModeChanged(bool quiet_mode) { |
141 host_->MessageCenterChanged(true); | 146 NotifyMessageCenterChanged(true); |
142 } | 147 } |
143 | 148 |
144 void MessageCenter::OnButtonClicked(const std::string& id, int button_index) { | 149 void MessageCenter::OnButtonClicked(const std::string& id, int button_index) { |
145 if (delegate_) | 150 if (delegate_) |
146 delegate_->OnButtonClicked(id, button_index); | 151 delegate_->OnButtonClicked(id, button_index); |
147 } | 152 } |
148 | 153 |
149 NotificationList* MessageCenter::GetNotificationList() { | 154 NotificationList* MessageCenter::GetNotificationList() { |
150 return notification_list_.get(); | 155 return notification_list_.get(); |
151 } | 156 } |
152 | 157 |
153 void MessageCenter::Delegate::OnButtonClicked(const std::string& id, | 158 void MessageCenter::Delegate::OnButtonClicked(const std::string& id, |
154 int button_index) { | 159 int button_index) { |
155 } | 160 } |
156 | 161 |
| 162 //------------------------------------------------------------------------------ |
| 163 // Private. |
| 164 |
| 165 MessageCenter::MessageCenter() |
| 166 : delegate_(NULL) { |
| 167 notification_list_.reset(new NotificationList(this)); |
| 168 } |
| 169 |
| 170 void MessageCenter::NotifyMessageCenterChanged(bool new_notification) { |
| 171 FOR_EACH_OBSERVER(Observer, |
| 172 observer_list_, |
| 173 OnMessageCenterChanged(new_notification)); |
| 174 } |
| 175 |
| 176 |
157 } // namespace message_center | 177 } // namespace message_center |
OLD | NEW |