8689d4769ab80969ed8d42d0cf243b901b2acb49
[platform/framework/web/crosswalk.git] / src / ui / message_center / notification_list.h
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.
4
5 #ifndef UI_MESSAGE_CENTER_NOTIFICATION_LIST_H_
6 #define UI_MESSAGE_CENTER_NOTIFICATION_LIST_H_
7
8 #include <list>
9 #include <set>
10 #include <string>
11
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"
16
17 namespace base {
18 class DictionaryValue;
19 class TimeDelta;
20 }
21
22 namespace gfx {
23 class Image;
24 }
25
26 namespace message_center {
27
28 namespace test {
29 class NotificationListTest;
30 }
31
32 class Notification;
33 class NotificationDelegate;
34 struct NotifierId;
35
36 // Comparers used to auto-sort the lists of Notifications.
37 struct MESSAGE_CENTER_EXPORT ComparePriorityTimestampSerial {
38   bool operator()(Notification* n1, Notification* n2);
39 };
40
41 struct CompareTimestampSerial {
42   bool operator()(Notification* n1, Notification* n2);
43 };
44
45 // A helper class to manage the list of notifications.
46 class MESSAGE_CENTER_EXPORT NotificationList {
47  public:
48   // Auto-sorted set. Matches the order in which Notifications are shown in
49   // Notification Center.
50   typedef std::set<Notification*, ComparePriorityTimestampSerial> Notifications;
51
52   // Auto-sorted set used to return the Notifications to be shown as popup
53   // toasts.
54   typedef std::set<Notification*, CompareTimestampSerial> PopupNotifications;
55
56   explicit NotificationList();
57   virtual ~NotificationList();
58
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
61   // ids don't matter.
62   void SetMessageCenterVisible(bool visible,
63                                std::set<std::string>* updated_ids);
64
65   void AddNotification(scoped_ptr<Notification> notification);
66
67   void UpdateNotificationMessage(const std::string& old_id,
68                                  scoped_ptr<Notification> new_notification);
69
70   void RemoveNotification(const std::string& id);
71
72   Notifications GetNotificationsByNotifierId(const NotifierId& notifier_id);
73
74   // Returns true if the notification exists and was updated.
75   bool SetNotificationIcon(const std::string& notification_id,
76                            const gfx::Image& image);
77
78   // Returns true if the notification exists and was updated.
79   bool SetNotificationImage(const std::string& notification_id,
80                             const gfx::Image& image);
81
82   // Returns true if the notification and button exist and were updated.
83   bool SetNotificationButtonIcon(const std::string& notification_id,
84                                  int button_index,
85                                  const gfx::Image& image);
86
87   // Returns true if |id| matches a notification in the list.
88   bool HasNotification(const std::string& id);
89
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);
94
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);
98
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);
108
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);
113
114   // Marks a specific popup item as displayed.
115   void MarkSinglePopupAsDisplayed(const std::string& id);
116
117   NotificationDelegate* GetNotificationDelegate(const std::string& id);
118
119   bool quiet_mode() const { return quiet_mode_; }
120
121   // Sets the current quiet mode status to |quiet_mode|.
122   void SetQuietMode(bool quiet_mode);
123
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);
127
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;
134
135   bool is_message_center_visible() const { return message_center_visible_; }
136
137  private:
138   friend class NotificationListTest;
139   FRIEND_TEST_ALL_PREFIXES(NotificationListTest,
140                            TestPushingShownNotification);
141
142   // Iterates through the list and returns the first notification matching |id|.
143   Notifications::iterator GetNotification(const std::string& id);
144
145   void EraseNotification(Notifications::iterator iter);
146
147   void PushNotification(scoped_ptr<Notification> notification);
148
149   Notifications notifications_;
150   bool message_center_visible_;
151   bool quiet_mode_;
152
153   DISALLOW_COPY_AND_ASSIGN(NotificationList);
154 };
155
156 }  // namespace message_center
157
158 #endif // UI_MESSAGE_CENTER_NOTIFICATION_LIST_H_