Chromium Code Reviews| Index: ui/message_center/notification_list.h |
| diff --git a/ui/message_center/notification_list.h b/ui/message_center/notification_list.h |
| index ec8b4db65d362f5facbefb4482c0efcd778490a6..b24ebbc4e27f36a9fff728e025b47a8aa6107087 100644 |
| --- a/ui/message_center/notification_list.h |
| +++ b/ui/message_center/notification_list.h |
| @@ -5,8 +5,7 @@ |
| #ifndef UI_MESSAGE_CENTER_NOTIFICATION_LIST_H_ |
| #define UI_MESSAGE_CENTER_NOTIFICATION_LIST_H_ |
| -#include <list> |
| -#include <map> |
| +#include <set> |
| #include <string> |
| #include "base/string16.h" |
| @@ -16,7 +15,7 @@ |
| #include "ui/gfx/native_widget_types.h" |
| #include "ui/message_center/message_center_export.h" |
| #include "ui/message_center/notification.h" |
| -#include "ui/notifications/notification_types.h" |
| +#include "ui/message_center/notification_types.h" |
| namespace base { |
| class DictionaryValue; |
| @@ -24,10 +23,24 @@ class DictionaryValue; |
| namespace message_center { |
| +// Comparers used to auto-sort the lists of Notifications. |
| +struct ComparePriorityTimestampSerial { |
| +bool operator()(Notification* n1, Notification* n2); |
|
Jun Mukai
2013/02/23 01:19:10
nit: 2 space indent?
Dmitry Titov
2013/02/23 01:35:48
Done.
|
| +}; |
| +struct CompareTimestampSerial { |
| +bool operator()(Notification* n1, Notification* n2); |
|
Jun Mukai
2013/02/23 01:19:10
ditto
Dmitry Titov
2013/02/23 01:35:48
Done.
|
| +}; |
| + |
| // A helper class to manage the list of notifications. |
| class MESSAGE_CENTER_EXPORT NotificationList { |
| public: |
| - typedef std::list<Notification> Notifications; |
| + // Auto-sorted set. Matches the order in which Notifications are shown in |
| + // Notification Center. |
| + typedef std::set<Notification*, ComparePriorityTimestampSerial> Notifications; |
| + |
| + // Auto-sorted set used to return the Notifications to be shown as popup |
| + // toasts. |
| + typedef std::set<Notification*, CompareTimestampSerial> PopupNotifications; |
| class MESSAGE_CENTER_EXPORT Delegate { |
| public: |
| @@ -69,7 +82,7 @@ class MESSAGE_CENTER_EXPORT NotificationList { |
| // Affects whether or not a message has been "read". |
| void SetMessageCenterVisible(bool visible); |
| - void AddNotification(ui::notifications::NotificationType type, |
| + void AddNotification(NotificationType type, |
| const std::string& id, |
| const string16& title, |
| const string16& message, |
| @@ -83,8 +96,7 @@ class MESSAGE_CENTER_EXPORT NotificationList { |
| const string16& message, |
| const base::DictionaryValue* optional_fields); |
| - // Returns true if the notification was removed. |
| - bool RemoveNotification(const std::string& id); |
| + void RemoveNotification(const std::string& id); |
| void RemoveAllNotifications(); |
| @@ -111,9 +123,11 @@ class MESSAGE_CENTER_EXPORT NotificationList { |
| // means that all notifications have been shown). |
| bool HasPopupNotifications(); |
| - // Modifies |notifications| to contain the |kMaxVisiblePopupNotifications| |
| - // least recent notifications that have not been shown as a popup. |
| - void GetPopupNotifications(Notifications* notifications); |
| + // Returns the recent notifications of the priority higher then LOW, |
| + // that have not been shown as a popup. kMaxVisiblePopupNotifications are |
| + // used to limit the number of notifications for the DEFAULT priority. |
| + // The returned list is sorted by timestamp, newer first. |
| + PopupNotifications GetPopupNotifications(); |
| // Marks the popups for the |priority| as shown. |
| void MarkPopupsAsShown(int priority); |
| @@ -133,7 +147,9 @@ class MESSAGE_CENTER_EXPORT NotificationList { |
| // specified time-delta from now. |
| void EnterQuietModeWithExpire(const base::TimeDelta& expires_in); |
| - void GetNotifications(Notifications* notifications) const; |
| + // Returns all notifications, in a (priority-timestamp) order. Suitable for |
| + // rendering notifications in a NotificationCenter. |
| + const Notifications& GetNotifications(); |
| size_t NotificationCount() const; |
| size_t unread_count() const { return unread_count_; } |
| @@ -141,35 +157,18 @@ class MESSAGE_CENTER_EXPORT NotificationList { |
| static const size_t kMaxVisibleMessageCenterNotifications; |
| private: |
| - typedef std::map<int, Notifications> NotificationMap; |
| - |
| - // Iterates through the list and stores the first notification matching |id| |
| - // (should always be unique) to |iter|. Returns true if it's found. |
| - bool GetNotification(const std::string& id, Notifications::iterator* iter); |
| + // Iterates through the list and returns the first notification matching |id|. |
| + Notifications::iterator GetNotification(const std::string& id); |
| void EraseNotification(Notifications::iterator iter); |
| - void PushNotification(Notification& notification); |
| - |
| - // Returns the recent notifications of the |priority| that have not been shown |
| - // as a popup. kMaxVisiblePopupNotifications are used to limit the number of |
| - // notifications for the default priority. |
| - void GetPopupIterators(int priority, |
| - Notifications::iterator* first, |
| - Notifications::iterator* last); |
| - |
| - // Given a dictionary of optional notification fields (or NULL), unpacks all |
| - // recognized values into the given Notification struct. We assume prior |
| - // proper initialization of |notification| fields that correspond to |
| - // |optional_fields|. |
| - void UnpackOptionalFields(const base::DictionaryValue* optional_fields, |
| - Notification* notification); |
| + void PushNotification(scoped_ptr<Notification> notification); |
| // Sets the current quiet mode status to |quiet_mode|. |
| void SetQuietModeInternal(bool quiet_mode); |
| Delegate* delegate_; |
| - NotificationMap notifications_; |
| + Notifications notifications_; |
| bool message_center_visible_; |
| size_t unread_count_; |
| bool quiet_mode_; |