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_NOTIFICATION_LIST_H_
6 #define UI_MESSAGE_CENTER_NOTIFICATION_LIST_H_
12 #include "base/gtest_prod_util.h"
13 #include "ui/message_center/message_center_export.h"
14 #include "ui/message_center/notification_blocker.h"
15 #include "ui/message_center/notification_types.h"
18 class DictionaryValue;
26 namespace message_center {
29 class NotificationListTest;
33 class NotificationDelegate;
36 // Comparers used to auto-sort the lists of Notifications.
37 struct MESSAGE_CENTER_EXPORT ComparePriorityTimestampSerial {
38 bool operator()(Notification* n1, Notification* n2);
41 struct CompareTimestampSerial {
42 bool operator()(Notification* n1, Notification* n2);
45 // A helper class to manage the list of notifications.
46 class MESSAGE_CENTER_EXPORT NotificationList {
48 // Auto-sorted set. Matches the order in which Notifications are shown in
49 // Notification Center.
50 typedef std::set<Notification*, ComparePriorityTimestampSerial> Notifications;
52 // Auto-sorted set used to return the Notifications to be shown as popup
54 typedef std::set<Notification*, CompareTimestampSerial> PopupNotifications;
56 explicit NotificationList();
57 virtual ~NotificationList();
59 // Affects whether or not a message has been "read". Collects the set of
60 // ids whose state have changed and set to |udpated_ids|. NULL if updated
62 void SetMessageCenterVisible(bool visible,
63 std::set<std::string>* updated_ids);
65 void AddNotification(scoped_ptr<Notification> notification);
67 void UpdateNotificationMessage(const std::string& old_id,
68 scoped_ptr<Notification> new_notification);
70 void RemoveNotification(const std::string& id);
72 Notifications GetNotificationsByNotifierId(const NotifierId& notifier_id);
74 // Returns true if the notification exists and was updated.
75 bool SetNotificationIcon(const std::string& notification_id,
76 const gfx::Image& image);
78 // Returns true if the notification exists and was updated.
79 bool SetNotificationImage(const std::string& notification_id,
80 const gfx::Image& image);
82 // Returns true if the notification and button exist and were updated.
83 bool SetNotificationButtonIcon(const std::string& notification_id,
85 const gfx::Image& image);
87 // Returns true if |id| matches a notification in the list.
88 bool HasNotification(const std::string& id);
90 // Returns true if |id| matches a notification in the list and that
91 // notification's type matches the given type.
92 bool HasNotificationOfType(const std::string& id,
93 const NotificationType type);
95 // Returns false if the first notification has been shown as a popup (which
96 // means that all notifications have been shown).
97 bool HasPopupNotifications(const NotificationBlockers& blockers);
99 // Returns the recent notifications of the priority higher then LOW,
100 // that have not been shown as a popup. kMaxVisiblePopupNotifications are
101 // used to limit the number of notifications for the DEFAULT priority.
102 // It also stores the list of notification ids which is blocked by |blockers|
103 // to |blocked_ids|. |blocked_ids| can be NULL if the caller doesn't care
104 // which notifications are blocked.
105 PopupNotifications GetPopupNotifications(
106 const NotificationBlockers& blockers,
107 std::list<std::string>* blocked_ids);
109 // Marks a specific popup item as shown. Set |mark_notification_as_read| to
110 // true in case marking the notification as read too.
111 void MarkSinglePopupAsShown(const std::string& id,
112 bool mark_notification_as_read);
114 // Marks a specific popup item as displayed.
115 void MarkSinglePopupAsDisplayed(const std::string& id);
117 NotificationDelegate* GetNotificationDelegate(const std::string& id);
119 bool quiet_mode() const { return quiet_mode_; }
121 // Sets the current quiet mode status to |quiet_mode|.
122 void SetQuietMode(bool quiet_mode);
124 // Sets the current quiet mode to true. The quiet mode will expire in the
125 // specified time-delta from now.
126 void EnterQuietModeWithExpire(const base::TimeDelta& expires_in);
128 // Returns all visible notifications, in a (priority-timestamp) order.
129 // Suitable for rendering notifications in a MessageCenter.
130 Notifications GetVisibleNotifications(
131 const NotificationBlockers& blockers) const;
132 size_t NotificationCount(const NotificationBlockers& blockers) const;
133 size_t UnreadCount(const NotificationBlockers& blockers) const;
135 bool is_message_center_visible() const { return message_center_visible_; }
138 friend class NotificationListTest;
139 FRIEND_TEST_ALL_PREFIXES(NotificationListTest,
140 TestPushingShownNotification);
142 // Iterates through the list and returns the first notification matching |id|.
143 Notifications::iterator GetNotification(const std::string& id);
145 void EraseNotification(Notifications::iterator iter);
147 void PushNotification(scoped_ptr<Notification> notification);
149 Notifications notifications_;
150 bool message_center_visible_;
153 DISALLOW_COPY_AND_ASSIGN(NotificationList);
156 } // namespace message_center
158 #endif // UI_MESSAGE_CENTER_NOTIFICATION_LIST_H_