notifier_settings.h revision 424c4d7b64af9d0d8fd9624f381f469654d5e3d2
1// Copyright (c) 2013 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_NOTIFIER_SETTINGS_H_ 6#define UI_MESSAGE_CENTER_NOTIFIER_SETTINGS_H_ 7 8#include <string> 9 10#include "base/strings/string16.h" 11#include "ui/gfx/image/image.h" 12#include "ui/message_center/message_center_export.h" 13#include "url/gurl.h" 14 15namespace message_center { 16 17class NotifierSettingsDelegate; 18class NotifierSettingsProvider; 19 20// Brings up the settings dialog and returns a weak reference to the delegate, 21// which is typically the view. If the dialog already exists, it is brought to 22// the front, otherwise it is created. 23MESSAGE_CENTER_EXPORT NotifierSettingsDelegate* ShowSettings( 24 NotifierSettingsProvider* provider, 25 gfx::NativeView context); 26 27// The struct to distinguish the notifiers. 28struct MESSAGE_CENTER_EXPORT NotifierId { 29 enum NotifierType { 30 APPLICATION, 31 WEB_PAGE, 32 SYSTEM_COMPONENT, 33 SYNCED_NOTIFICATION_SERVICE, 34 }; 35 36 // Constructor for APPLICATION and SYNCED_NOTIFICATION_SERVICE type. 37 NotifierId(NotifierType type, const std::string& id); 38 39 // Constructor for WEB_PAGE type. 40 explicit NotifierId(const GURL& url); 41 42 // Constructor for system component types. The type should be positive. 43 explicit NotifierId(int type); 44 45 // The default constructor which doesn't specify the notifier. Used for tests. 46 NotifierId(); 47 48 bool operator==(const NotifierId& other) const; 49 50 NotifierType type; 51 52 // The identifier of the app notifier. Empty if it's not APPLICATION or 53 // SYNCED_NOTIFICATION_SERVICE. 54 std::string id; 55 56 // The URL pattern of the notifer. 57 GURL url; 58 59 // The type of system component notifier, usually used in ash. -1 if it's not 60 // the system component. See also: ash/system/system_notifier.h 61 int system_component_type; 62}; 63 64// The struct to hold the information of notifiers. The information will be 65// used by NotifierSettingsView. 66struct MESSAGE_CENTER_EXPORT Notifier { 67 Notifier(const NotifierId& notifier_id, const string16& name, bool enabled); 68 ~Notifier(); 69 70 NotifierId notifier_id; 71 72 // The human-readable name of the notifier such like the extension name. 73 // It can be empty. 74 string16 name; 75 76 // True if the source is allowed to send notifications. True is default. 77 bool enabled; 78 79 // The icon image of the notifier. The extension icon or favicon. 80 gfx::Image icon; 81 82 private: 83 DISALLOW_COPY_AND_ASSIGN(Notifier); 84}; 85 86struct MESSAGE_CENTER_EXPORT NotifierGroup { 87 NotifierGroup(const gfx::Image& icon, 88 const string16& name, 89 const string16& login_info, 90 size_t index); 91 ~NotifierGroup(); 92 93 // Icon of a notifier group. 94 const gfx::Image icon; 95 96 // Display name of a notifier group. 97 const string16 name; 98 99 // More display information about the notifier group. 100 string16 login_info; 101 102 // Unique identifier for the notifier group so that they can be selected in 103 // the UI. 104 const size_t index; 105 106 private: 107 DISALLOW_COPY_AND_ASSIGN(NotifierGroup); 108}; 109 110// An observer class implemented by the view of the NotifierSettings to get 111// notified when the controller has changed data. 112class MESSAGE_CENTER_EXPORT NotifierSettingsObserver { 113 public: 114 // Called when an icon in the controller has been updated. 115 virtual void UpdateIconImage(const NotifierId& notifier_id, 116 const gfx::Image& icon) = 0; 117 118 // Called when any change happens to the set of notifier groups. 119 virtual void NotifierGroupChanged() = 0; 120}; 121 122// A class used by NotifierSettingsView to integrate with a setting system 123// for the clients of this module. 124class MESSAGE_CENTER_EXPORT NotifierSettingsProvider { 125 public: 126 virtual ~NotifierSettingsProvider() {}; 127 128 // Sets the delegate. 129 virtual void AddObserver(NotifierSettingsObserver* observer) = 0; 130 virtual void RemoveObserver(NotifierSettingsObserver* observer) = 0; 131 132 // Returns the number of notifier groups available. 133 virtual size_t GetNotifierGroupCount() const = 0; 134 135 // Requests the model for a particular notifier group. 136 virtual const message_center::NotifierGroup& GetNotifierGroupAt( 137 size_t index) const = 0; 138 139 // Returns true if the notifier group at |index| is active. 140 virtual bool IsNotifierGroupActiveAt(size_t index) const = 0; 141 142 // Informs the settings provider that further requests to GetNotifierList 143 // should return notifiers for the specified notifier group. 144 virtual void SwitchToNotifierGroup(size_t index) = 0; 145 146 // Requests the currently active notifier group. 147 virtual const message_center::NotifierGroup& GetActiveNotifierGroup() 148 const = 0; 149 150 // Collects the current notifier list and fills to |notifiers|. Caller takes 151 // the ownership of the elements of |notifiers|. 152 virtual void GetNotifierList(std::vector<Notifier*>* notifiers) = 0; 153 154 // Called when the |enabled| for the |notifier| has been changed by user 155 // operation. 156 virtual void SetNotifierEnabled(const Notifier& notifier, bool enabled) = 0; 157 158 // Called when the settings window is closed. 159 virtual void OnNotifierSettingsClosing() = 0; 160}; 161 162} // namespace message_center 163 164#endif // UI_MESSAGE_CENTER_NOTIFIER_SETTINGS_H_ 165