Home | History | Annotate | Download | only in message_center
      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