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
3 // found in the LICENSE file.
5 #ifndef UI_MESSAGE_CENTER_MESSAGE_CENTER_H_
6 #define UI_MESSAGE_CENTER_MESSAGE_CENTER_H_
10 #include "base/memory/scoped_ptr.h"
11 #include "ui/message_center/message_center_export.h"
12 #include "ui/message_center/message_center_types.h"
13 #include "ui/message_center/notification_list.h"
16 class DictionaryValue
;
19 // Interface to manage the NotificationList. The client (e.g. Chrome) calls
20 // [Add|Remove|Update]Notification to create and update notifications in the
21 // list. It also sends those changes to its observers when a notification
22 // is shown, closed, or clicked on.
24 // MessageCenter is agnostic of profiles; it uses the string returned by
25 // message_center::Notification::id() to uniquely identify a notification. It is
26 // the caller's responsibility to formulate the id so that 2 different
27 // notification should have different ids. For example, if the caller supports
28 // multiple profiles, then caller should encode both profile characteristics and
29 // notification front end's notification id into a new id and set it into the
30 // notification instance before passing that in. Consequently the id passed to
31 // observers will be this unique id, which can be used with MessageCenter
32 // interface but probably not higher level interfaces.
34 namespace message_center
{
37 class MessagePopupCollectionTest
;
40 class MessageCenterObserver
;
41 class NotificationBlocker
;
42 class NotifierSettingsProvider
;
44 class MESSAGE_CENTER_EXPORT MessageCenter
{
46 // Creates the global message center object.
47 static void Initialize();
49 // Returns the global message center object. Returns NULL if Initialize is not
51 static MessageCenter
* Get();
53 // Destroys the global message_center object.
54 static void Shutdown();
56 // Management of the observer list.
57 virtual void AddObserver(MessageCenterObserver
* observer
) = 0;
58 virtual void RemoveObserver(MessageCenterObserver
* observer
) = 0;
60 // Queries of current notification list status.
61 virtual size_t NotificationCount() const = 0;
62 virtual size_t UnreadNotificationCount() const = 0;
63 virtual bool HasPopupNotifications() const = 0;
64 virtual bool IsQuietMode() const = 0;
65 virtual bool HasClickedListener(const std::string
& id
) = 0;
67 // Find the notification with the corresponding id. Returns NULL if not found.
68 // The returned instance is owned by the message center.
69 virtual message_center::Notification
* FindVisibleNotificationById(
70 const std::string
& id
) = 0;
72 // Gets all notifications to be shown to the user in the message center. Note
73 // that queued changes due to the message center being open are not reflected
75 virtual const NotificationList::Notifications
& GetVisibleNotifications() = 0;
77 // Gets all notifications being shown as popups. This should not be affected
78 // by the change queue since notifications are not held up while the state is
79 // VISIBILITY_TRANSIENT or VISIBILITY_SETTINGS.
80 virtual NotificationList::PopupNotifications
GetPopupNotifications() = 0;
82 // Management of NotificationBlockers.
83 virtual void AddNotificationBlocker(NotificationBlocker
* blocker
) = 0;
84 virtual void RemoveNotificationBlocker(NotificationBlocker
* blocker
) = 0;
86 // Basic operations of notification: add/remove/update.
88 // Adds a new notification.
89 virtual void AddNotification(scoped_ptr
<Notification
> notification
) = 0;
91 // Updates an existing notification with id = old_id and set its id to new_id.
92 virtual void UpdateNotification(
93 const std::string
& old_id
,
94 scoped_ptr
<Notification
> new_notification
) = 0;
96 // Removes an existing notification.
97 virtual void RemoveNotification(const std::string
& id
, bool by_user
) = 0;
98 virtual void RemoveAllNotifications(bool by_user
) = 0;
99 virtual void RemoveAllVisibleNotifications(bool by_user
) = 0;
101 // Sets the icon image. Icon appears at the top-left of the notification.
102 virtual void SetNotificationIcon(const std::string
& notification_id
,
103 const gfx::Image
& image
) = 0;
105 // Sets the large image for the notifications of type == TYPE_IMAGE. Specified
106 // image will appear below of the notification.
107 virtual void SetNotificationImage(const std::string
& notification_id
,
108 const gfx::Image
& image
) = 0;
110 // Sets the image for the icon of the specific action button.
111 virtual void SetNotificationButtonIcon(const std::string
& notification_id
,
113 const gfx::Image
& image
) = 0;
115 // Operations happening especially from GUIs: click, disable, and settings.
116 // Searches through the notifications and disables any that match the
117 // extension id given.
118 virtual void DisableNotificationsByNotifier(
119 const NotifierId
& notifier_id
) = 0;
121 // This should be called by UI classes when a notification is clicked to
122 // trigger the notification's delegate callback and also update the message
124 virtual void ClickOnNotification(const std::string
& id
) = 0;
126 // This should be called by UI classes when a notification button is clicked
127 // to trigger the notification's delegate callback and also update the message
129 virtual void ClickOnNotificationButton(const std::string
& id
,
130 int button_index
) = 0;
132 // This should be called by UI classes after a visible notification popup
133 // closes, indicating that the notification has been shown to the user.
134 // |mark_notification_as_read|, if false, will unset the read bit on a
135 // notification, increasing the unread count of the center.
136 virtual void MarkSinglePopupAsShown(const std::string
& id
,
137 bool mark_notification_as_read
) = 0;
139 // This should be called by UI classes when a notification is first displayed
140 // to the user, in order to decrement the unread_count for the tray, and to
141 // notify observers that the notification is visible.
142 virtual void DisplayedNotification(
143 const std::string
& id
,
144 const DisplaySource source
) = 0;
146 // Setter/getter of notifier settings provider. This will be a weak reference.
147 // This should be set at the initialization process. The getter may return
149 virtual void SetNotifierSettingsProvider(
150 NotifierSettingsProvider
* provider
) = 0;
151 virtual NotifierSettingsProvider
* GetNotifierSettingsProvider() = 0;
153 // This can be called to change the quiet mode state (without a timeout).
154 virtual void SetQuietMode(bool in_quiet_mode
) = 0;
156 // Temporarily enables quiet mode for |expires_in| time.
157 virtual void EnterQuietModeWithExpire(const base::TimeDelta
& expires_in
) = 0;
159 // Informs the notification list whether the message center is visible.
160 // This affects whether or not a message has been "read".
161 virtual void SetVisibility(Visibility visible
) = 0;
163 // Allows querying the visibility of the center.
164 virtual bool IsMessageCenterVisible() const = 0;
166 // UI classes should call this when there is cause to leave popups visible for
167 // longer than the default (for example, when the mouse hovers over a popup).
168 virtual void PausePopupTimers() = 0;
170 // UI classes should call this when the popup timers should restart (for
171 // example, after the mouse leaves the popup.)
172 virtual void RestartPopupTimers() = 0;
175 friend class TrayViewControllerTest
;
176 friend class test::MessagePopupCollectionTest
;
177 virtual void DisableTimersForTest() = 0;
180 virtual ~MessageCenter();
183 DISALLOW_COPY_AND_ASSIGN(MessageCenter
);
186 } // namespace message_center
188 #endif // UI_MESSAGE_CENTER_MESSAGE_CENTER_H_