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_
10 #include "ash/ime/input_method_menu_manager.h"
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/profiles/profile.h"
26 #include "chrome/browser/supervised_user/supervised_user_service_observer.h"
27 #include "chrome/browser/ui/browser_list_observer.h"
28 #include "chromeos/audio/cras_audio_handler.h"
29 #include "chromeos/dbus/session_manager_client.h"
30 #include "chromeos/ime/input_method_manager.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"
40 namespace user_manager
{
46 class SystemTrayDelegateChromeOS
47 : public ash::ime::InputMethodMenuManager::Observer
,
48 public ash::SystemTrayDelegate
,
49 public SessionManagerClient::Observer
,
50 public content::NotificationObserver
,
51 public input_method::InputMethodManager::Observer
,
52 public chromeos::LoginState::Observer
,
53 public chromeos::CrasAudioHandler::AudioObserver
,
54 public device::BluetoothAdapter::Observer
,
55 public policy::CloudPolicyStore::Observer
,
56 public ash::SessionStateObserver
,
57 public chrome::BrowserListObserver
,
58 public extensions::AppWindowRegistry::Observer
,
59 public user_manager::UserManager::UserSessionStateObserver
,
60 public SupervisedUserServiceObserver
{
62 SystemTrayDelegateChromeOS();
64 virtual ~SystemTrayDelegateChromeOS();
66 void InitializeOnAdapterReady(
67 scoped_refptr
<device::BluetoothAdapter
> adapter
);
69 // Overridden from ash::SystemTrayDelegate:
70 virtual void Initialize() override
;
71 virtual void Shutdown() override
;
72 virtual bool GetTrayVisibilityOnStartup() override
;
73 virtual ash::user::LoginStatus
GetUserLoginStatus() const override
;
74 virtual void ChangeProfilePicture() override
;
75 virtual const std::string
GetEnterpriseDomain() const override
;
76 virtual const base::string16
GetEnterpriseMessage() const override
;
77 virtual const std::string
GetSupervisedUserManager() const override
;
78 virtual const base::string16
GetSupervisedUserManagerName() const override
;
79 virtual const base::string16
GetSupervisedUserMessage() const override
;
80 virtual bool IsUserSupervised() const override
;
81 virtual void GetSystemUpdateInfo(ash::UpdateInfo
* info
) const override
;
82 virtual base::HourClockType
GetHourClockType() const override
;
83 virtual void ShowSettings() override
;
84 virtual bool ShouldShowSettings() override
;
85 virtual void ShowDateSettings() override
;
86 virtual void ShowSetTimeDialog() override
;
87 virtual void ShowNetworkSettings(const std::string
& service_path
) override
;
88 virtual void ShowBluetoothSettings() override
;
89 virtual void ShowDisplaySettings() override
;
90 virtual void ShowChromeSlow() override
;
91 virtual bool ShouldShowDisplayNotification() override
;
92 virtual void ShowIMESettings() override
;
93 virtual void ShowHelp() override
;
94 virtual void ShowAccessibilityHelp() override
;
95 virtual void ShowAccessibilitySettings() override
;
96 virtual void ShowPublicAccountInfo() override
;
97 virtual void ShowSupervisedUserInfo() override
;
98 virtual void ShowEnterpriseInfo() override
;
99 virtual void ShowUserLogin() override
;
100 virtual bool ShowSpringChargerReplacementDialog() override
;
101 virtual bool IsSpringChargerReplacementDialogVisible() override
;
102 virtual bool HasUserConfirmedSafeSpringCharger() override
;
103 virtual void ShutDown() override
;
104 virtual void SignOut() override
;
105 virtual void RequestLockScreen() override
;
106 virtual void RequestRestartForUpdate() override
;
107 virtual void GetAvailableBluetoothDevices(ash::BluetoothDeviceList
* list
)
109 virtual void BluetoothStartDiscovering() override
;
110 virtual void BluetoothStopDiscovering() override
;
111 virtual void ConnectToBluetoothDevice(const std::string
& address
) override
;
112 virtual bool IsBluetoothDiscovering() override
;
113 virtual void GetCurrentIME(ash::IMEInfo
* info
) override
;
114 virtual void GetAvailableIMEList(ash::IMEInfoList
* list
) override
;
115 virtual void GetCurrentIMEProperties(ash::IMEPropertyInfoList
* list
) override
;
116 virtual void SwitchIME(const std::string
& ime_id
) override
;
117 virtual void ActivateIMEProperty(const std::string
& key
) override
;
118 virtual void ShowNetworkConfigure(const std::string
& network_id
) override
;
119 virtual bool EnrollNetwork(const std::string
& network_id
) override
;
120 virtual void ManageBluetoothDevices() override
;
121 virtual void ToggleBluetooth() override
;
122 virtual void ShowMobileSimDialog() override
;
123 virtual void ShowMobileSetupDialog(const std::string
& service_path
) override
;
124 virtual void ShowOtherNetworkDialog(const std::string
& type
) override
;
125 virtual bool GetBluetoothAvailable() override
;
126 virtual bool GetBluetoothEnabled() override
;
127 virtual bool GetBluetoothDiscovering() override
;
128 virtual void ChangeProxySettings() override
;
129 virtual ash::VolumeControlDelegate
* GetVolumeControlDelegate() const override
;
130 virtual void SetVolumeControlDelegate(
131 scoped_ptr
<ash::VolumeControlDelegate
> delegate
) override
;
132 virtual bool GetSessionStartTime(base::TimeTicks
* session_start_time
)
134 virtual bool GetSessionLengthLimit(base::TimeDelta
* session_length_limit
)
136 virtual int GetSystemTrayMenuWidth() override
;
137 virtual void ActiveUserWasChanged() override
;
138 virtual bool IsSearchKeyMappedToCapsLock() override
;
139 virtual ash::tray::UserAccountsDelegate
* GetUserAccountsDelegate(
140 const std::string
& user_id
) override
;
141 virtual void AddCustodianInfoTrayObserver(
142 ash::CustodianInfoTrayObserver
* observer
) override
;
143 virtual void RemoveCustodianInfoTrayObserver(
144 ash::CustodianInfoTrayObserver
* observer
) override
;
146 // Overridden from user_manager::UserManager::UserSessionStateObserver:
147 virtual void UserAddedToSession(const user_manager::User
* active_user
)
150 virtual void UserChangedSupervisedStatus(
151 user_manager::User
* user
) override
;
153 // browser tests need to call ShouldUse24HourClock().
154 bool GetShouldUse24HourClockForTesting() const;
157 // Should be the same as CrosSettings::ObserverSubscription.
158 typedef base::CallbackList
<void(void)>::Subscription
159 CrosSettingsObserverSubscription
;
161 ash::SystemTray
* GetPrimarySystemTray();
163 ash::SystemTrayNotifier
* GetSystemTrayNotifier();
165 void SetProfile(Profile
* profile
);
167 bool UnsetProfile(Profile
* profile
);
169 bool ShouldUse24HourClock() const;
171 void UpdateClockType();
173 void UpdateShowLogoutButtonInTray();
175 void UpdateLogoutDialogDuration();
177 void UpdateSessionStartTime();
179 void UpdateSessionLengthLimit();
181 void StopObservingAppWindowRegistry();
183 void StopObservingCustodianInfoChanges();
185 // Notify observers if the current user has no more open browser or app
187 void NotifyIfLastWindowClosed();
189 // LoginState::Observer overrides.
190 virtual void LoggedInStateChanged() override
;
192 // Overridden from SessionManagerClient::Observer.
193 virtual void ScreenIsLocked() override
;
194 virtual void ScreenIsUnlocked() override
;
196 gfx::NativeWindow
GetNativeWindow() const;
198 // content::NotificationObserver implementation.
199 virtual void Observe(int type
,
200 const content::NotificationSource
& source
,
201 const content::NotificationDetails
& details
) override
;
203 void OnLanguageRemapSearchKeyToChanged();
205 void OnAccessibilityModeChanged(
206 ash::AccessibilityNotificationVisibility notify
);
208 void UpdatePerformanceTracing();
210 // Overridden from InputMethodManager::Observer.
211 virtual void InputMethodChanged(input_method::InputMethodManager
* manager
,
212 bool show_message
) override
;
214 // Overridden from InputMethodMenuManager::Observer.
215 virtual void InputMethodMenuItemChanged(
216 ash::ime::InputMethodMenuManager
* manager
) override
;
218 // Overridden from CrasAudioHandler::AudioObserver.
219 virtual void OnOutputVolumeChanged() override
;
220 virtual void OnOutputMuteChanged() override
;
221 virtual void OnInputGainChanged() override
;
222 virtual void OnInputMuteChanged() override
;
223 virtual void OnAudioNodesChanged() override
;
224 virtual void OnActiveOutputNodeChanged() override
;
225 virtual void OnActiveInputNodeChanged() override
;
227 // Overridden from BluetoothAdapter::Observer.
228 virtual void AdapterPresentChanged(device::BluetoothAdapter
* adapter
,
229 bool present
) override
;
230 virtual void AdapterPoweredChanged(device::BluetoothAdapter
* adapter
,
231 bool powered
) override
;
232 virtual void AdapterDiscoveringChanged(device::BluetoothAdapter
* adapter
,
233 bool discovering
) override
;
234 virtual void DeviceAdded(device::BluetoothAdapter
* adapter
,
235 device::BluetoothDevice
* device
) override
;
236 virtual void DeviceChanged(device::BluetoothAdapter
* adapter
,
237 device::BluetoothDevice
* device
) override
;
238 virtual void DeviceRemoved(device::BluetoothAdapter
* adapter
,
239 device::BluetoothDevice
* device
) override
;
241 void OnStartBluetoothDiscoverySession(
242 scoped_ptr
<device::BluetoothDiscoverySession
> discovery_session
);
244 void UpdateEnterpriseDomain();
246 // Overridden from CloudPolicyStore::Observer
247 virtual void OnStoreLoaded(policy::CloudPolicyStore
* store
) override
;
248 virtual void OnStoreError(policy::CloudPolicyStore
* store
) override
;
250 // Overridden from ash::SessionStateObserver
251 virtual void UserAddedToSession(const std::string
& user_id
) override
;
253 // Overridden from chrome::BrowserListObserver:
254 virtual void OnBrowserRemoved(Browser
* browser
) override
;
256 // Overridden from extensions::AppWindowRegistry::Observer:
257 virtual void OnAppWindowRemoved(extensions::AppWindow
* app_window
) override
;
259 // Overridden from SupervisedUserServiceObserver:
260 virtual void OnCustodianInfoChanged() override
;
262 void OnAccessibilityStatusChanged(
263 const AccessibilityStatusEventDetails
& details
);
265 scoped_ptr
<content::NotificationRegistrar
> registrar_
;
266 scoped_ptr
<PrefChangeRegistrar
> local_state_registrar_
;
267 scoped_ptr
<PrefChangeRegistrar
> user_pref_registrar_
;
268 Profile
* user_profile_
;
269 base::HourClockType clock_type_
;
270 int search_key_mapped_to_
;
272 bool have_session_start_time_
;
273 base::TimeTicks session_start_time_
;
274 bool have_session_length_limit_
;
275 base::TimeDelta session_length_limit_
;
276 std::string enterprise_domain_
;
277 bool should_run_bluetooth_discovery_
;
278 bool session_started_
;
280 scoped_refptr
<device::BluetoothAdapter
> bluetooth_adapter_
;
281 scoped_ptr
<device::BluetoothDiscoverySession
> bluetooth_discovery_session_
;
282 scoped_ptr
<ash::VolumeControlDelegate
> volume_control_delegate_
;
283 scoped_ptr
<CrosSettingsObserverSubscription
> device_settings_observer_
;
284 scoped_ptr
<AccessibilityStatusSubscription
> accessibility_subscription_
;
285 base::ScopedPtrHashMap
<std::string
, ash::tray::UserAccountsDelegate
>
288 ObserverList
<ash::CustodianInfoTrayObserver
>
289 custodian_info_changed_observers_
;
291 base::WeakPtrFactory
<SystemTrayDelegateChromeOS
> weak_ptr_factory_
;
293 DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegateChromeOS
);
296 ash::SystemTrayDelegate
* CreateSystemTrayDelegate();
298 } // namespace chromeos
299 #endif // CHROME_BROWSER_UI_ASH_SYSTEM_TRAY_DELEGATE_CHROMEOS_H_