blob: 158b890b7ee851526995409961de840ab6914eed [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_MESSAGE_CENTER_NOTIFICATION_LIST_H_
#define UI_MESSAGE_CENTER_NOTIFICATION_LIST_H_
#include <list>
#include <string>
#include "base/string16.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/message_center/message_center_export.h"
namespace message_center {
// A helper class to manage the list of notifications.
class MESSAGE_CENTER_EXPORT NotificationList {
public:
struct MESSAGE_CENTER_EXPORT Notification {
Notification();
virtual ~Notification();
std::string id;
string16 title;
string16 message;
string16 display_source;
std::string extension_id;
gfx::ImageSkia image;
bool is_read; // True if this has been seen in the message center
bool shown_as_popup; // True if this has been shown as a popup notification
};
typedef std::list<Notification> Notifications;
class MESSAGE_CENTER_EXPORT Delegate {
public:
Delegate() {}
virtual ~Delegate() {}
// Removes notifications
virtual void SendRemoveNotification(const std::string& id) = 0;
virtual void SendRemoveAllNotifications() = 0;
// Disables notifications
virtual void DisableNotificationByExtension(const std::string& id) = 0;
virtual void DisableNotificationByUrl(const std::string& id) = 0;
// Requests the Delegate to the settings dialog.
virtual void ShowNotificationSettings(const std::string& id) = 0;
// Called when a notification is clicked on.
virtual void OnNotificationClicked(const std::string& id) = 0;
// Returns the list of notifications to display.
virtual NotificationList* GetNotificationList() = 0;
};
explicit NotificationList(Delegate* delegate);
virtual ~NotificationList();
// Affects whether or not a message has been "read".
void SetMessageCenterVisible(bool visible);
void AddNotification(const std::string& id,
const string16& title,
const string16& message,
const string16& display_source,
const std::string& extension_id);
void UpdateNotificationMessage(const std::string& old_id,
const std::string& new_id,
const string16& title,
const string16& message);
// Returns true if the notification was removed.
bool RemoveNotification(const std::string& id);
void RemoveAllNotifications();
void SendRemoveNotificationsBySource(const std::string& id);
void SendRemoveNotificationsByExtension(const std::string& id);
// Returns true if the notification exists and was updated.
bool SetNotificationImage(const std::string& id,
const gfx::ImageSkia& image);
bool HasNotification(const std::string& id);
// Returns false if the first notification has been shown as a popup (which
// 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);
// Marks the popups returned by GetPopupNotifications() as shown.
void MarkPopupsAsShown();
const Notifications& notifications() const { return notifications_; }
size_t unread_count() const { return unread_count_; }
static const size_t kMaxVisiblePopupNotifications;
static const size_t kMaxVisibleMessageCenterNotifications;
private:
// Iterates through the list and returns the first notification matching |id|
// (should always be unique).
Notifications::iterator GetNotification(const std::string& id);
void EraseNotification(Notifications::iterator iter);
void PushNotification(Notification& notification);
// Returns the |kMaxVisiblePopupNotifications| least recent notifications
// that have not been shown as a popup.
void GetPopupIterators(Notifications::iterator& first,
Notifications::iterator& last);
Delegate* delegate_;
Notifications notifications_;
bool message_center_visible_;
size_t unread_count_;
DISALLOW_COPY_AND_ASSIGN(NotificationList);
};
} // namespace message_center
#endif // UI_MESSAGE_CENTER_NOTIFICATION_LIST_H_