ozone: evdev: Sync caps lock LED state to evdev
[chromium-blink-merge.git] / chrome / browser / ui / ash / system_tray_delegate_chromeos.h
blob31d1ca4ab3ca93769e6896a06a1658a7628505aa
1 // Copyright 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.
5 #ifndef CHROME_BROWSER_UI_ASH_SYSTEM_TRAY_DELEGATE_CHROMEOS_H_
6 #define CHROME_BROWSER_UI_ASH_SYSTEM_TRAY_DELEGATE_CHROMEOS_H_
8 #include <string>
9 #include <vector>
11 #include "ash/session/session_state_observer.h"
12 #include "ash/system/chromeos/supervised/custodian_info_tray_observer.h"
13 #include "ash/system/tray/system_tray.h"
14 #include "ash/system/tray/system_tray_delegate.h"
15 #include "ash/system/tray/system_tray_notifier.h"
16 #include "base/callback_forward.h"
17 #include "base/callback_list.h"
18 #include "base/compiler_specific.h"
19 #include "base/containers/scoped_ptr_hash_map.h"
20 #include "base/memory/ref_counted.h"
21 #include "base/memory/weak_ptr.h"
22 #include "base/observer_list.h"
23 #include "base/prefs/pref_change_registrar.h"
24 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
25 #include "chrome/browser/chromeos/settings/shutdown_policy_handler.h"
26 #include "chrome/browser/profiles/profile.h"
27 #include "chrome/browser/supervised_user/supervised_user_service_observer.h"
28 #include "chrome/browser/ui/browser_list_observer.h"
29 #include "chromeos/audio/cras_audio_handler.h"
30 #include "chromeos/dbus/session_manager_client.h"
31 #include "chromeos/login/login_state.h"
32 #include "components/policy/core/common/cloud/cloud_policy_store.h"
33 #include "components/user_manager/user_manager.h"
34 #include "content/public/browser/notification_observer.h"
35 #include "content/public/browser/notification_registrar.h"
36 #include "device/bluetooth/bluetooth_adapter.h"
37 #include "device/bluetooth/bluetooth_discovery_session.h"
38 #include "extensions/browser/app_window/app_window_registry.h"
39 #include "ui/base/ime/chromeos/input_method_manager.h"
40 #include "ui/chromeos/ime/input_method_menu_manager.h"
42 namespace user_manager {
43 class User;
46 namespace chromeos {
48 class SystemTrayDelegateChromeOS
49 : public ui::ime::InputMethodMenuManager::Observer,
50 public ash::SystemTrayDelegate,
51 public SessionManagerClient::Observer,
52 public content::NotificationObserver,
53 public input_method::InputMethodManager::Observer,
54 public chromeos::LoginState::Observer,
55 public chromeos::CrasAudioHandler::AudioObserver,
56 public device::BluetoothAdapter::Observer,
57 public policy::CloudPolicyStore::Observer,
58 public ash::SessionStateObserver,
59 public chrome::BrowserListObserver,
60 public extensions::AppWindowRegistry::Observer,
61 public user_manager::UserManager::UserSessionStateObserver,
62 public SupervisedUserServiceObserver,
63 public ShutdownPolicyHandler::Delegate {
64 public:
65 SystemTrayDelegateChromeOS();
67 ~SystemTrayDelegateChromeOS() override;
69 void InitializeOnAdapterReady(
70 scoped_refptr<device::BluetoothAdapter> adapter);
72 // Overridden from ash::SystemTrayDelegate:
73 void Initialize() override;
74 void Shutdown() override;
75 bool GetTrayVisibilityOnStartup() override;
76 ash::user::LoginStatus GetUserLoginStatus() const override;
77 void ChangeProfilePicture() override;
78 const std::string GetEnterpriseDomain() const override;
79 const base::string16 GetEnterpriseMessage() const override;
80 const std::string GetSupervisedUserManager() const override;
81 const base::string16 GetSupervisedUserManagerName() const override;
82 const base::string16 GetSupervisedUserMessage() const override;
83 bool IsUserSupervised() const override;
84 bool IsUserChild() const override;
85 void GetSystemUpdateInfo(ash::UpdateInfo* info) const override;
86 base::HourClockType GetHourClockType() const override;
87 void ShowSettings() override;
88 bool ShouldShowSettings() override;
89 void ShowDateSettings() override;
90 void ShowSetTimeDialog() override;
91 void ShowNetworkSettings(const std::string& service_path) override;
92 void ShowBluetoothSettings() override;
93 void ShowDisplaySettings() override;
94 void ShowChromeSlow() override;
95 bool ShouldShowDisplayNotification() override;
96 void ShowIMESettings() override;
97 void ShowHelp() override;
98 void ShowAccessibilityHelp() override;
99 void ShowAccessibilitySettings() override;
100 void ShowPublicAccountInfo() override;
101 void ShowSupervisedUserInfo() override;
102 void ShowEnterpriseInfo() override;
103 void ShowUserLogin() override;
104 void SignOut() override;
105 void RequestLockScreen() override;
106 void RequestRestartForUpdate() override;
107 void GetAvailableBluetoothDevices(ash::BluetoothDeviceList* list) override;
108 void BluetoothStartDiscovering() override;
109 void BluetoothStopDiscovering() override;
110 void ConnectToBluetoothDevice(const std::string& address) override;
111 bool IsBluetoothDiscovering() override;
112 void GetCurrentIME(ash::IMEInfo* info) override;
113 void GetAvailableIMEList(ash::IMEInfoList* list) override;
114 void GetCurrentIMEProperties(ash::IMEPropertyInfoList* list) override;
115 void SwitchIME(const std::string& ime_id) override;
116 void ActivateIMEProperty(const std::string& key) override;
117 void ManageBluetoothDevices() override;
118 void ToggleBluetooth() override;
119 void ShowOtherNetworkDialog(const std::string& type) override;
120 bool GetBluetoothAvailable() override;
121 bool GetBluetoothEnabled() override;
122 bool GetBluetoothDiscovering() override;
123 void ChangeProxySettings() override;
124 ash::NetworkingConfigDelegate* GetNetworkingConfigDelegate() const override;
125 ash::VolumeControlDelegate* GetVolumeControlDelegate() const override;
126 void SetVolumeControlDelegate(
127 scoped_ptr<ash::VolumeControlDelegate> delegate) override;
128 bool GetSessionStartTime(base::TimeTicks* session_start_time) override;
129 bool GetSessionLengthLimit(base::TimeDelta* session_length_limit) override;
130 int GetSystemTrayMenuWidth() override;
131 void ActiveUserWasChanged() override;
132 bool IsSearchKeyMappedToCapsLock() override;
133 ash::tray::UserAccountsDelegate* GetUserAccountsDelegate(
134 const std::string& user_id) override;
135 void AddCustodianInfoTrayObserver(
136 ash::CustodianInfoTrayObserver* observer) override;
137 void RemoveCustodianInfoTrayObserver(
138 ash::CustodianInfoTrayObserver* observer) override;
139 void AddShutdownPolicyObserver(
140 ash::ShutdownPolicyObserver* observer) override;
141 void RemoveShutdownPolicyObserver(
142 ash::ShutdownPolicyObserver* observer) override;
143 void ShouldRebootOnShutdown(
144 const ash::RebootOnShutdownCallback& callback) override;
146 // Overridden from user_manager::UserManager::UserSessionStateObserver:
147 void UserAddedToSession(const user_manager::User* active_user) override;
148 void ActiveUserChanged(const user_manager::User* active_user) override;
150 void UserChangedChildStatus(user_manager::User* user) override;
152 // browser tests need to call ShouldUse24HourClock().
153 bool GetShouldUse24HourClockForTesting() const;
155 private:
156 // Should be the same as CrosSettings::ObserverSubscription.
157 typedef base::CallbackList<void(void)>::Subscription
158 CrosSettingsObserverSubscription;
160 ash::SystemTray* GetPrimarySystemTray();
162 ash::SystemTrayNotifier* GetSystemTrayNotifier();
164 void SetProfile(Profile* profile);
166 bool UnsetProfile(Profile* profile);
168 bool ShouldUse24HourClock() const;
170 void UpdateClockType();
172 void UpdateShowLogoutButtonInTray();
174 void UpdateLogoutDialogDuration();
176 void UpdateSessionStartTime();
178 void UpdateSessionLengthLimit();
180 void StopObservingAppWindowRegistry();
182 void StopObservingCustodianInfoChanges();
184 // Notify observers if the current user has no more open browser or app
185 // windows.
186 void NotifyIfLastWindowClosed();
188 // LoginState::Observer overrides.
189 void LoggedInStateChanged() override;
191 // Overridden from SessionManagerClient::Observer.
192 void ScreenIsLocked() override;
193 void ScreenIsUnlocked() override;
195 gfx::NativeWindow GetNativeWindow() const;
197 // content::NotificationObserver implementation.
198 void Observe(int type,
199 const content::NotificationSource& source,
200 const content::NotificationDetails& details) override;
202 void OnLanguageRemapSearchKeyToChanged();
204 void OnAccessibilityModeChanged(
205 ui::AccessibilityNotificationVisibility notify);
207 void UpdatePerformanceTracing();
209 // Overridden from InputMethodManager::Observer.
210 void InputMethodChanged(input_method::InputMethodManager* manager,
211 bool show_message) override;
213 // Overridden from InputMethodMenuManager::Observer.
214 void InputMethodMenuItemChanged(
215 ui::ime::InputMethodMenuManager* manager) override;
217 // Overridden from CrasAudioHandler::AudioObserver.
218 void OnOutputVolumeChanged() override;
219 void OnOutputMuteChanged() override;
220 void OnInputGainChanged() override;
221 void OnInputMuteChanged() override;
222 void OnAudioNodesChanged() override;
223 void OnActiveOutputNodeChanged() override;
224 void OnActiveInputNodeChanged() override;
226 // Overridden from BluetoothAdapter::Observer.
227 void AdapterPresentChanged(device::BluetoothAdapter* adapter,
228 bool present) override;
229 void AdapterPoweredChanged(device::BluetoothAdapter* adapter,
230 bool powered) override;
231 void AdapterDiscoveringChanged(device::BluetoothAdapter* adapter,
232 bool discovering) override;
233 void DeviceAdded(device::BluetoothAdapter* adapter,
234 device::BluetoothDevice* device) override;
235 void DeviceChanged(device::BluetoothAdapter* adapter,
236 device::BluetoothDevice* device) override;
237 void DeviceRemoved(device::BluetoothAdapter* adapter,
238 device::BluetoothDevice* device) override;
240 void OnStartBluetoothDiscoverySession(
241 scoped_ptr<device::BluetoothDiscoverySession> discovery_session);
243 void UpdateEnterpriseDomain();
245 // Overridden from CloudPolicyStore::Observer
246 void OnStoreLoaded(policy::CloudPolicyStore* store) override;
247 void OnStoreError(policy::CloudPolicyStore* store) override;
249 // Overridden from ash::SessionStateObserver
250 void UserAddedToSession(const std::string& user_id) override;
251 void ActiveUserChanged(const std::string& user_id) override;
253 // Overridden from chrome::BrowserListObserver:
254 void OnBrowserRemoved(Browser* browser) override;
256 // Overridden from extensions::AppWindowRegistry::Observer:
257 void OnAppWindowRemoved(extensions::AppWindow* app_window) override;
259 // Overridden from SupervisedUserServiceObserver:
260 void OnCustodianInfoChanged() override;
262 void OnAccessibilityStatusChanged(
263 const AccessibilityStatusEventDetails& details);
265 // Overridden from ShutdownPolicyObserver::Delegate.
266 void OnShutdownPolicyChanged(bool reboot_on_shutdown) override;
268 // helper methods used by GetSupervisedUserMessage.
269 const base::string16 GetLegacySupervisedUserMessage() const;
270 const base::string16 GetChildUserMessage() const;
272 scoped_ptr<content::NotificationRegistrar> registrar_;
273 scoped_ptr<PrefChangeRegistrar> local_state_registrar_;
274 scoped_ptr<PrefChangeRegistrar> user_pref_registrar_;
275 Profile* user_profile_;
276 base::HourClockType clock_type_;
277 int search_key_mapped_to_;
278 bool screen_locked_;
279 bool have_session_start_time_;
280 base::TimeTicks session_start_time_;
281 bool have_session_length_limit_;
282 base::TimeDelta session_length_limit_;
283 std::string enterprise_domain_;
284 bool should_run_bluetooth_discovery_;
285 bool session_started_;
287 scoped_refptr<device::BluetoothAdapter> bluetooth_adapter_;
288 scoped_ptr<device::BluetoothDiscoverySession> bluetooth_discovery_session_;
289 scoped_ptr<ash::NetworkingConfigDelegate> networking_config_delegate_;
290 scoped_ptr<ash::VolumeControlDelegate> volume_control_delegate_;
291 scoped_ptr<CrosSettingsObserverSubscription> device_settings_observer_;
292 scoped_ptr<AccessibilityStatusSubscription> accessibility_subscription_;
293 base::ScopedPtrHashMap<std::string, ash::tray::UserAccountsDelegate>
294 accounts_delegates_;
295 scoped_ptr<ShutdownPolicyHandler> shutdown_policy_handler_;
297 ObserverList<ash::CustodianInfoTrayObserver>
298 custodian_info_changed_observers_;
300 ObserverList<ash::ShutdownPolicyObserver> shutdown_policy_observers_;
302 base::WeakPtrFactory<SystemTrayDelegateChromeOS> weak_ptr_factory_;
304 DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegateChromeOS);
307 ash::SystemTrayDelegate* CreateSystemTrayDelegate();
309 } // namespace chromeos
310 #endif // CHROME_BROWSER_UI_ASH_SYSTEM_TRAY_DELEGATE_CHROMEOS_H_