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