notifier_settings.h revision bb1529ce867d8845a77ec7cdf3e3003ef1771a40
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  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.
67struct 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
87struct 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
111MESSAGE_CENTER_EXPORT std::string ToString(
112    NotifierId::SystemComponentNotifierType type);
113MESSAGE_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.
118class 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.
130class 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  // Informs the settings provider that further requests to GetNotifierList
146  // should return notifiers for the specified notifier group.
147  virtual void SwitchToNotifierGroup(size_t index) = 0;
148
149  // Requests the currently active notifier group.
150  virtual const message_center::NotifierGroup& GetActiveNotifierGroup()
151      const = 0;
152
153  // Collects the current notifier list and fills to |notifiers|. Caller takes
154  // the ownership of the elements of |notifiers|.
155  virtual void GetNotifierList(std::vector<Notifier*>* notifiers) = 0;
156
157  // Called when the |enabled| for the |notifier| has been changed by user
158  // operation.
159  virtual void SetNotifierEnabled(const Notifier& notifier, bool enabled) = 0;
160
161  // Called when the settings window is closed.
162  virtual void OnNotifierSettingsClosing() = 0;
163};
164
165}  // namespace message_center
166
167#endif  // UI_MESSAGE_CENTER_NOTIFIER_SETTINGS_H_
168