system_tray_delegate.h revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
1// Copyright (c) 2012 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 ASH_SYSTEM_TRAY_SYSTEM_TRAY_DELEGATE_H_
6#define ASH_SYSTEM_TRAY_SYSTEM_TRAY_DELEGATE_H_
7
8#include <string>
9#include <vector>
10
11#include "ash/ash_export.h"
12#include "ash/system/user/login_status.h"
13#include "base/files/file_path.h"
14#include "base/i18n/time_formatting.h"
15#include "base/memory/scoped_ptr.h"
16#include "base/strings/string16.h"
17#include "ui/gfx/image/image_skia.h"
18#include "ui/gfx/native_widget_types.h"
19
20namespace base {
21class TimeDelta;
22class TimeTicks;
23}
24
25namespace ash {
26
27struct ASH_EXPORT NetworkIconInfo {
28  NetworkIconInfo();
29  ~NetworkIconInfo();
30
31  bool highlight() const { return connected || connecting; }
32
33  bool connecting;
34  bool connected;
35  bool tray_icon_visible;
36  gfx::ImageSkia image;
37  base::string16 name;
38  base::string16 description;
39  std::string service_path;
40  bool is_cellular;
41};
42
43struct ASH_EXPORT BluetoothDeviceInfo {
44  BluetoothDeviceInfo();
45  ~BluetoothDeviceInfo();
46
47  std::string address;
48  base::string16 display_name;
49  bool connected;
50  bool connecting;
51  bool paired;
52};
53
54typedef std::vector<BluetoothDeviceInfo> BluetoothDeviceList;
55
56// Structure that packs progress information of each operation.
57struct ASH_EXPORT DriveOperationStatus {
58  enum OperationType {
59    OPERATION_UPLOAD,
60    OPERATION_DOWNLOAD
61  };
62
63  enum OperationState {
64    OPERATION_NOT_STARTED,
65    OPERATION_IN_PROGRESS,
66    OPERATION_COMPLETED,
67    OPERATION_FAILED,
68  };
69
70  DriveOperationStatus();
71  ~DriveOperationStatus();
72
73  // Unique ID for the operation.
74  int32 id;
75
76  // File path.
77  base::FilePath file_path;
78  // Current operation completion progress [0.0 - 1.0].
79  double progress;
80  OperationType type;
81  OperationState state;
82};
83
84typedef std::vector<DriveOperationStatus> DriveOperationStatusList;
85
86
87struct ASH_EXPORT IMEPropertyInfo {
88  IMEPropertyInfo();
89  ~IMEPropertyInfo();
90
91  bool selected;
92  std::string key;
93  base::string16 name;
94};
95
96typedef std::vector<IMEPropertyInfo> IMEPropertyInfoList;
97
98struct ASH_EXPORT IMEInfo {
99  IMEInfo();
100  ~IMEInfo();
101
102  bool selected;
103  bool third_party;
104  std::string id;
105  base::string16 name;
106  base::string16 medium_name;
107  base::string16 short_name;
108};
109
110typedef std::vector<IMEInfo> IMEInfoList;
111
112class VolumeControlDelegate;
113
114namespace tray {
115class UserAccountsDelegate;
116}  // namespace tray
117
118class ASH_EXPORT SystemTrayDelegate {
119 public:
120  virtual ~SystemTrayDelegate() {}
121
122  // Called after SystemTray has been instantiated.
123  virtual void Initialize() = 0;
124
125  // Called before SystemTray is destroyed.
126  virtual void Shutdown() = 0;
127
128  // Returns true if system tray should be visible on startup.
129  virtual bool GetTrayVisibilityOnStartup() = 0;
130
131  // Gets information about the active user.
132  virtual user::LoginStatus GetUserLoginStatus() const = 0;
133
134  // Shows UI for changing user's profile picture.
135  virtual void ChangeProfilePicture() = 0;
136
137  // Returns the domain that manages the device, if it is enterprise-enrolled.
138  virtual const std::string GetEnterpriseDomain() const = 0;
139
140  // Returns notification for enterprise enrolled devices.
141  virtual const base::string16 GetEnterpriseMessage() const = 0;
142
143  // Returns the display email of user that manages current
144  // locally managed user.
145  virtual const std::string GetLocallyManagedUserManager() const = 0;
146
147  // Returns the name of user that manages current locally managed user.
148  virtual const base::string16 GetLocallyManagedUserManagerName() const = 0;
149
150  // Returns notification for locally managed users.
151  virtual const base::string16 GetLocallyManagedUserMessage() const = 0;
152
153  // Returns whether a system upgrade is available.
154  virtual bool SystemShouldUpgrade() const = 0;
155
156  // Returns the desired hour clock type.
157  virtual base::HourClockType GetHourClockType() const = 0;
158
159  // Shows settings.
160  virtual void ShowSettings() = 0;
161
162  // Returns true if settings menu item should appear.
163  virtual bool ShouldShowSettings() = 0;
164
165  // Shows the settings related to date, timezone etc.
166  virtual void ShowDateSettings() = 0;
167
168  // Shows the dialog to set system time, date, and timezone.
169  virtual void ShowSetTimeDialog() = 0;
170
171  // Shows the settings related to network. If |service_path| is not empty,
172  // show the settings for that network.
173  virtual void ShowNetworkSettings(const std::string& service_path) = 0;
174
175  // Shows the settings related to bluetooth.
176  virtual void ShowBluetoothSettings() = 0;
177
178  // Shows settings related to multiple displays.
179  virtual void ShowDisplaySettings() = 0;
180
181  // Shows the page that lets you disable performance tracing.
182  virtual void ShowChromeSlow() = 0;
183
184  // Returns true if the notification for the display configuration change
185  // should appear.
186  virtual bool ShouldShowDisplayNotification() = 0;
187
188  // Shows settings related to Google Drive.
189  virtual void ShowDriveSettings() = 0;
190
191  // Shows settings related to input methods.
192  virtual void ShowIMESettings() = 0;
193
194  // Shows help.
195  virtual void ShowHelp() = 0;
196
197  // Show accessilibity help.
198  virtual void ShowAccessibilityHelp() = 0;
199
200  // Show the settings related to accessilibity.
201  virtual void ShowAccessibilitySettings() = 0;
202
203  // Shows more information about public account mode.
204  virtual void ShowPublicAccountInfo() = 0;
205
206  // Shows information about enterprise enrolled devices.
207  virtual void ShowEnterpriseInfo() = 0;
208
209  // Shows information about locally managed users.
210  virtual void ShowLocallyManagedUserInfo() = 0;
211
212  // Shows login UI to add other users to this session.
213  virtual void ShowUserLogin() = 0;
214
215  // Shows the spring charger replacement dialog if necessary.
216  // Returns true if the dialog is shown by the call.
217  virtual bool ShowSpringChargerReplacementDialog() = 0;
218
219  // True if the spring charger replacement dialog is visible.
220  virtual bool IsSpringChargerReplacementDialogVisible() = 0;
221
222  // True if user has confirmed using safe spring charger.
223  virtual bool HasUserConfirmedSafeSpringCharger() = 0;
224
225  // Attempts to shut down the system.
226  virtual void ShutDown() = 0;
227
228  // Attempts to sign out the user.
229  virtual void SignOut() = 0;
230
231  // Attempts to lock the screen.
232  virtual void RequestLockScreen() = 0;
233
234  // Attempts to restart the system for update.
235  virtual void RequestRestartForUpdate() = 0;
236
237  // Returns a list of available bluetooth devices.
238  virtual void GetAvailableBluetoothDevices(BluetoothDeviceList* devices) = 0;
239
240  // Requests bluetooth start discovering devices.
241  virtual void BluetoothStartDiscovering() = 0;
242
243  // Requests bluetooth stop discovering devices.
244  virtual void BluetoothStopDiscovering() = 0;
245
246  // Connect to a specific bluetooth device.
247  virtual void ConnectToBluetoothDevice(const std::string& address) = 0;
248
249  // Returns true if bluetooth adapter is discovering bluetooth devices.
250  virtual bool IsBluetoothDiscovering() = 0;
251
252  // Returns the currently selected IME.
253  virtual void GetCurrentIME(IMEInfo* info) = 0;
254
255  // Returns a list of availble IMEs.
256  virtual void GetAvailableIMEList(IMEInfoList* list) = 0;
257
258  // Returns a list of properties for the currently selected IME.
259  virtual void GetCurrentIMEProperties(IMEPropertyInfoList* list) = 0;
260
261  // Switches to the selected input method.
262  virtual void SwitchIME(const std::string& ime_id) = 0;
263
264  // Activates an IME property.
265  virtual void ActivateIMEProperty(const std::string& key) = 0;
266
267  // Cancels ongoing drive operation.
268  virtual void CancelDriveOperation(int32 operation_id) = 0;
269
270  // Returns information about the ongoing drive operations.
271  virtual void GetDriveOperationStatusList(
272      DriveOperationStatusList* list) = 0;
273
274  // Shows UI to configure or activate the network specified by |network_id|,
275  // which may include showing Payment or Portal UI when appropriate.
276  // |parent_window| is used to parent any configuration UI. If NULL a default
277  // window will be used.
278  virtual void ShowNetworkConfigure(const std::string& network_id,
279                                    gfx::NativeWindow parent_window) = 0;
280
281  // Shows UI to enroll the network specified by |network_id| if appropriate
282  // and returns true, otherwise returns false. |parent_window| is used
283  // to parent any configuration UI. If NULL a default window will be used.
284  virtual bool EnrollNetwork(const std::string& network_id,
285                             gfx::NativeWindow parent_window) = 0;
286
287  // Shows UI to manage bluetooth devices.
288  virtual void ManageBluetoothDevices() = 0;
289
290  // Toggles bluetooth.
291  virtual void ToggleBluetooth() = 0;
292
293  // Shows UI to unlock a mobile sim.
294  virtual void ShowMobileSimDialog() = 0;
295
296  // Shows UI to setup a mobile network.
297  virtual void ShowMobileSetupDialog(const std::string& service_path) = 0;
298
299  // Shows UI to connect to an unlisted network of type |type|. On Chrome OS
300  // |type| corresponds to a Shill network type.
301  virtual void ShowOtherNetworkDialog(const std::string& type) = 0;
302
303  // Returns whether bluetooth capability is available.
304  virtual bool GetBluetoothAvailable() = 0;
305
306  // Returns whether bluetooth is enabled.
307  virtual bool GetBluetoothEnabled() = 0;
308
309  // Returns whether the delegate has initiated a bluetooth discovery session.
310  virtual bool GetBluetoothDiscovering() = 0;
311
312  // Shows UI for changing proxy settings.
313  virtual void ChangeProxySettings() = 0;
314
315  // Returns VolumeControlDelegate.
316  virtual VolumeControlDelegate* GetVolumeControlDelegate() const = 0;
317
318  // Sets VolumeControlDelegate.
319  virtual void SetVolumeControlDelegate(
320      scoped_ptr<VolumeControlDelegate> delegate) = 0;
321
322  // Retrieves the session start time. Returns |false| if the time is not set.
323  virtual bool GetSessionStartTime(base::TimeTicks* session_start_time) = 0;
324
325  // Retrieves the session length limit. Returns |false| if no limit is set.
326  virtual bool GetSessionLengthLimit(base::TimeDelta* session_length_limit) = 0;
327
328  // Get the system tray menu size in pixels (dependent on the language).
329  virtual int GetSystemTrayMenuWidth() = 0;
330
331  // The active user has been changed. This will be called when the UI is ready
332  // to be switched to the new user.
333  // Note: This will happen after SessionStateObserver::ActiveUserChanged fires.
334  virtual void ActiveUserWasChanged() = 0;
335
336  // Returns true when |network| is behind captive portal.
337  virtual bool IsNetworkBehindCaptivePortal(
338      const std::string& service_path) const = 0;
339
340  // Returns true when the Search key is configured to be treated as Caps Lock.
341  virtual bool IsSearchKeyMappedToCapsLock() = 0;
342
343  // Returns accounts delegate for given user.
344  virtual tray::UserAccountsDelegate* GetUserAccountsDelegate(
345      const std::string& user_id) = 0;
346};
347
348}  // namespace ash
349
350#endif  // ASH_SYSTEM_TRAY_SYSTEM_TRAY_DELEGATE_H_
351