Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Unified Diff: ui/message_center/notification_list.h

Issue 12277024: Notificaitons refactor step 2 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more feedback from Steven Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/message_center/notification.cc ('k') | ui/message_center/notification_list.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..3d3771317d350fb80c41f6579027f151c1361006 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,25 @@ class DictionaryValue;
namespace message_center {
+// Comparers used to auto-sort the lists of Notifications.
+struct ComparePriorityTimestampSerial {
+ bool operator()(Notification* n1, Notification* n2);
+};
+
+struct CompareTimestampSerial {
+ bool operator()(Notification* n1, Notification* n2);
+};
+
// 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 +83,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 +97,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 +124,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 +148,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 +158,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_;
« no previous file with comments | « ui/message_center/notification.cc ('k') | ui/message_center/notification_list.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698