OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/system/ash_system_tray_delegate.h" | 5 #include "chrome/browser/chromeos/system/ash_system_tray_delegate.h" |
6 | 6 |
7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
8 #include "ash/shell_window_ids.h" | 8 #include "ash/shell_window_ids.h" |
9 #include "ash/system/audio/audio_observer.h" | 9 #include "ash/system/audio/audio_observer.h" |
10 #include "ash/system/bluetooth/bluetooth_observer.h" | 10 #include "ash/system/bluetooth/bluetooth_observer.h" |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, | 201 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, |
202 content::NotificationService::AllSources()); | 202 content::NotificationService::AllSources()); |
203 if (GetUserLoginStatus() == ash::user::LOGGED_IN_NONE) { | 203 if (GetUserLoginStatus() == ash::user::LOGGED_IN_NONE) { |
204 registrar_.Add(this, | 204 registrar_.Add(this, |
205 chrome::NOTIFICATION_SESSION_STARTED, | 205 chrome::NOTIFICATION_SESSION_STARTED, |
206 content::NotificationService::AllSources()); | 206 content::NotificationService::AllSources()); |
207 } | 207 } |
208 registrar_.Add(this, | 208 registrar_.Add(this, |
209 chrome::NOTIFICATION_PROFILE_CREATED, | 209 chrome::NOTIFICATION_PROFILE_CREATED, |
210 content::NotificationService::AllSources()); | 210 content::NotificationService::AllSources()); |
| 211 registrar_.Add(this, |
| 212 chrome::NOTIFICATION_LOGIN_USER_CHANGED, |
| 213 content::NotificationService::AllSources()); |
211 | 214 |
212 accessibility_enabled_.Init(prefs::kSpokenFeedbackEnabled, | 215 accessibility_enabled_.Init(prefs::kSpokenFeedbackEnabled, |
213 g_browser_process->local_state(), this); | 216 g_browser_process->local_state(), this); |
214 | 217 |
215 network_icon_->SetResourceColorTheme(NetworkMenuIcon::COLOR_LIGHT); | 218 network_icon_->SetResourceColorTheme(NetworkMenuIcon::COLOR_LIGHT); |
216 network_icon_dark_->SetResourceColorTheme(NetworkMenuIcon::COLOR_DARK); | 219 network_icon_dark_->SetResourceColorTheme(NetworkMenuIcon::COLOR_DARK); |
217 | 220 |
218 bluetooth_adapter_ = BluetoothAdapter::DefaultAdapter(); | 221 bluetooth_adapter_ = BluetoothAdapter::DefaultAdapter(); |
219 bluetooth_adapter_->AddObserver(this); | 222 bluetooth_adapter_->AddObserver(this); |
220 } | 223 } |
221 | 224 |
222 virtual ~SystemTrayDelegate() { | 225 virtual ~SystemTrayDelegate() { |
223 AudioHandler* audiohandler = AudioHandler::GetInstance(); | 226 AudioHandler* audiohandler = AudioHandler::GetInstance(); |
224 if (audiohandler) | 227 if (audiohandler) |
225 audiohandler->RemoveVolumeObserver(this); | 228 audiohandler->RemoveVolumeObserver(this); |
226 DBusThreadManager::Get()->GetSessionManagerClient()->RemoveObserver(this); | 229 DBusThreadManager::Get()->GetSessionManagerClient()->RemoveObserver(this); |
227 DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this); | 230 DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this); |
228 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary(); | 231 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary(); |
229 if (crosnet) { | 232 if (crosnet) { |
230 crosnet->RemoveNetworkManagerObserver(this); | 233 crosnet->RemoveNetworkManagerObserver(this); |
231 crosnet->RemoveCellularDataPlanObserver(this); | 234 crosnet->RemoveCellularDataPlanObserver(this); |
232 } | 235 } |
233 input_method::InputMethodManager::GetInstance()->RemoveObserver(this); | 236 input_method::InputMethodManager::GetInstance()->RemoveObserver(this); |
234 system::TimezoneSettings::GetInstance()->RemoveObserver(this); | 237 system::TimezoneSettings::GetInstance()->RemoveObserver(this); |
235 if (SystemKeyEventListener::GetInstance()) | 238 if (SystemKeyEventListener::GetInstance()) |
236 SystemKeyEventListener::GetInstance()->RemoveCapsLockObserver(this); | 239 SystemKeyEventListener::GetInstance()->RemoveCapsLockObserver(this); |
237 bluetooth_adapter_->RemoveObserver(this); | 240 bluetooth_adapter_->RemoveObserver(this); |
238 | 241 |
239 // Stop observing gdata operations. | 242 // Stop observing gdata operations. |
240 Profile* profile = ProfileManager::GetDefaultProfile(); | 243 GDataSystemService* system_service = FindGDataSystemService(); |
241 if (gdata::util::IsGDataAvailable(profile)) { | 244 if (system_service) { |
242 GDataSystemService* system_service = | 245 system_service->docs_service()->operation_registry()-> |
243 GDataSystemServiceFactory::FindForProfile(profile); | 246 RemoveObserver(this); |
244 if (system_service) { | |
245 system_service->docs_service()->operation_registry()-> | |
246 RemoveObserver(this); | |
247 } | |
248 } | 247 } |
249 } | 248 } |
250 | 249 |
251 // Overridden from ash::SystemTrayDelegate: | 250 // Overridden from ash::SystemTrayDelegate: |
252 virtual bool GetTrayVisibilityOnStartup() OVERRIDE { | 251 virtual bool GetTrayVisibilityOnStartup() OVERRIDE { |
253 // In case of OOBE / sign in screen tray will be shown later. | 252 // In case of OOBE / sign in screen tray will be shown later. |
254 return UserManager::Get()->IsUserLoggedIn(); | 253 return UserManager::Get()->IsUserLoggedIn(); |
255 } | 254 } |
256 | 255 |
257 virtual const string16 GetUserDisplayName() const OVERRIDE { | 256 virtual const string16 GetUserDisplayName() const OVERRIDE { |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 virtual void SwitchIME(const std::string& ime_id) OVERRIDE { | 443 virtual void SwitchIME(const std::string& ime_id) OVERRIDE { |
445 input_method::InputMethodManager::GetInstance()->ChangeInputMethod(ime_id); | 444 input_method::InputMethodManager::GetInstance()->ChangeInputMethod(ime_id); |
446 } | 445 } |
447 | 446 |
448 virtual void ActivateIMEProperty(const std::string& key) OVERRIDE { | 447 virtual void ActivateIMEProperty(const std::string& key) OVERRIDE { |
449 input_method::InputMethodManager::GetInstance()-> | 448 input_method::InputMethodManager::GetInstance()-> |
450 ActivateInputMethodProperty(key); | 449 ActivateInputMethodProperty(key); |
451 } | 450 } |
452 | 451 |
453 virtual void CancelDriveOperation(const FilePath& file_path) OVERRIDE { | 452 virtual void CancelDriveOperation(const FilePath& file_path) OVERRIDE { |
454 Profile* profile = ProfileManager::GetDefaultProfile(); | 453 GDataSystemService* system_service = FindGDataSystemService(); |
455 if (!gdata::util::IsGDataAvailable(profile)) | |
456 return; | |
457 | |
458 GDataSystemService* system_service = | |
459 GDataSystemServiceFactory::FindForProfile(profile); | |
460 if (!system_service) | 454 if (!system_service) |
461 return; | 455 return; |
462 | 456 |
463 system_service->docs_service()->operation_registry()->CancelForFilePath( | 457 system_service->docs_service()->operation_registry()->CancelForFilePath( |
464 file_path); | 458 file_path); |
465 } | 459 } |
466 | 460 |
467 virtual void GetDriveOperationStatusList( | 461 virtual void GetDriveOperationStatusList( |
468 ash::DriveOperationStatusList* list) OVERRIDE { | 462 ash::DriveOperationStatusList* list) OVERRIDE { |
469 Profile* profile = ProfileManager::GetDefaultProfile(); | 463 GDataSystemService* system_service = FindGDataSystemService(); |
470 if (!gdata::util::IsGDataAvailable(profile)) | |
471 return; | |
472 | |
473 GDataSystemService* system_service = | |
474 GDataSystemServiceFactory::FindForProfile(profile); | |
475 if (!system_service) | 464 if (!system_service) |
476 return; | 465 return; |
477 | 466 |
478 *list = GetDriveStatusList( | 467 *list = GetDriveStatusList( |
479 system_service->docs_service()->operation_registry()-> | 468 system_service->docs_service()->operation_registry()-> |
480 GetProgressStatusList()); | 469 GetProgressStatusList()); |
481 } | 470 } |
482 | 471 |
483 | 472 |
484 virtual void GetMostRelevantNetworkIcon(ash::NetworkIconInfo* info, | 473 virtual void GetMostRelevantNetworkIcon(ash::NetworkIconInfo* info, |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
727 } | 716 } |
728 | 717 |
729 void SetProfile(Profile* profile) { | 718 void SetProfile(Profile* profile) { |
730 pref_registrar_.reset(new PrefChangeRegistrar); | 719 pref_registrar_.reset(new PrefChangeRegistrar); |
731 pref_registrar_->Init(profile->GetPrefs()); | 720 pref_registrar_->Init(profile->GetPrefs()); |
732 pref_registrar_->Add(prefs::kUse24HourClock, this); | 721 pref_registrar_->Add(prefs::kUse24HourClock, this); |
733 pref_registrar_->Add(prefs::kLanguageXkbRemapSearchKeyTo, this); | 722 pref_registrar_->Add(prefs::kLanguageXkbRemapSearchKeyTo, this); |
734 UpdateClockType(profile->GetPrefs()); | 723 UpdateClockType(profile->GetPrefs()); |
735 search_key_mapped_to_ = | 724 search_key_mapped_to_ = |
736 profile->GetPrefs()->GetInteger(prefs::kLanguageXkbRemapSearchKeyTo); | 725 profile->GetPrefs()->GetInteger(prefs::kLanguageXkbRemapSearchKeyTo); |
| 726 } |
737 | 727 |
738 if (gdata::util::IsGDataAvailable(profile)) { | 728 void ObserveGDataUpdates() { |
739 GDataSystemService* system_service = | 729 GDataSystemService* system_service = FindGDataSystemService(); |
740 GDataSystemServiceFactory::FindForProfile(profile); | 730 if (!system_service) |
741 if (!system_service) | 731 return; |
742 return; | |
743 | 732 |
744 system_service->docs_service()->operation_registry()->AddObserver(this); | 733 system_service->docs_service()->operation_registry()->AddObserver(this); |
745 } | |
746 } | 734 } |
747 | 735 |
748 void UpdateClockType(PrefService* service) { | 736 void UpdateClockType(PrefService* service) { |
749 clock_type_ = service->GetBoolean(prefs::kUse24HourClock) ? | 737 clock_type_ = service->GetBoolean(prefs::kUse24HourClock) ? |
750 base::k24HourClock : base::k12HourClock; | 738 base::k24HourClock : base::k12HourClock; |
751 ash::ClockObserver* observer = tray_->clock_observer(); | 739 ash::ClockObserver* observer = tray_->clock_observer(); |
752 if (observer) | 740 if (observer) |
753 observer->OnDateFormatChanged(); | 741 observer->OnDateFormatChanged(); |
754 } | 742 } |
755 | 743 |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1030 case chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED: { | 1018 case chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED: { |
1031 // This notification is also sent on login screen when user avatar | 1019 // This notification is also sent on login screen when user avatar |
1032 // is loaded from file. | 1020 // is loaded from file. |
1033 if (GetUserLoginStatus() != ash::user::LOGGED_IN_NONE) { | 1021 if (GetUserLoginStatus() != ash::user::LOGGED_IN_NONE) { |
1034 ash::UserObserver* observer = tray_->user_observer(); | 1022 ash::UserObserver* observer = tray_->user_observer(); |
1035 if (observer) | 1023 if (observer) |
1036 observer->OnUserUpdate(); | 1024 observer->OnUserUpdate(); |
1037 } | 1025 } |
1038 break; | 1026 break; |
1039 } | 1027 } |
| 1028 case chrome::NOTIFICATION_LOGIN_USER_CHANGED: { |
| 1029 // GData system service exists by the time if enabled. |
| 1030 ObserveGDataUpdates(); |
| 1031 break; |
| 1032 } |
1040 case chrome::NOTIFICATION_PREF_CHANGED: { | 1033 case chrome::NOTIFICATION_PREF_CHANGED: { |
1041 std::string pref = *content::Details<std::string>(details).ptr(); | 1034 std::string pref = *content::Details<std::string>(details).ptr(); |
1042 PrefService* service = content::Source<PrefService>(source).ptr(); | 1035 PrefService* service = content::Source<PrefService>(source).ptr(); |
1043 if (pref == prefs::kUse24HourClock) { | 1036 if (pref == prefs::kUse24HourClock) { |
1044 UpdateClockType(service); | 1037 UpdateClockType(service); |
1045 } else if (pref == prefs::kLanguageXkbRemapSearchKeyTo) { | 1038 } else if (pref == prefs::kLanguageXkbRemapSearchKeyTo) { |
1046 search_key_mapped_to_ = | 1039 search_key_mapped_to_ = |
1047 service->GetInteger(prefs::kLanguageXkbRemapSearchKeyTo); | 1040 service->GetInteger(prefs::kLanguageXkbRemapSearchKeyTo); |
1048 } else if (pref == prefs::kSpokenFeedbackEnabled) { | 1041 } else if (pref == prefs::kSpokenFeedbackEnabled) { |
1049 ash::AccessibilityObserver* observer = | 1042 ash::AccessibilityObserver* observer = |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1121 } | 1114 } |
1122 } | 1115 } |
1123 | 1116 |
1124 } | 1117 } |
1125 | 1118 |
1126 // Pulls the list of ongoing drive operations and initiates status update. | 1119 // Pulls the list of ongoing drive operations and initiates status update. |
1127 // This method is needed to ensure delayed cleanup of the latest reported | 1120 // This method is needed to ensure delayed cleanup of the latest reported |
1128 // status in UI in cases when there are no new changes coming (i.e. when the | 1121 // status in UI in cases when there are no new changes coming (i.e. when the |
1129 // last set of transfer operations completed). | 1122 // last set of transfer operations completed). |
1130 void RecheckGDataOperations() { | 1123 void RecheckGDataOperations() { |
1131 Profile* profile = ProfileManager::GetDefaultProfile(); | 1124 GDataSystemService* system_service = FindGDataSystemService(); |
1132 if (!gdata::util::IsGDataAvailable(profile)) | |
1133 return; | |
1134 | |
1135 GDataSystemService* system_service = | |
1136 GDataSystemServiceFactory::FindForProfile(profile); | |
1137 if (!system_service) | 1125 if (!system_service) |
1138 return; | 1126 return; |
1139 | 1127 |
1140 OnProgressUpdate(system_service->docs_service()->operation_registry()-> | 1128 OnProgressUpdate(system_service->docs_service()->operation_registry()-> |
1141 GetProgressStatusList()); | 1129 GetProgressStatusList()); |
1142 } | 1130 } |
1143 | 1131 |
| 1132 GDataSystemService* FindGDataSystemService() { |
| 1133 Profile* profile = ProfileManager::GetDefaultProfile(); |
| 1134 if (!gdata::util::IsGDataAvailable(profile)) |
| 1135 return NULL; |
| 1136 return GDataSystemServiceFactory::FindForProfile(profile); |
| 1137 } |
| 1138 |
1144 // Overridden from system::TimezoneSettings::Observer. | 1139 // Overridden from system::TimezoneSettings::Observer. |
1145 virtual void TimezoneChanged(const icu::TimeZone& timezone) OVERRIDE { | 1140 virtual void TimezoneChanged(const icu::TimeZone& timezone) OVERRIDE { |
1146 NotifyRefreshClock(); | 1141 NotifyRefreshClock(); |
1147 } | 1142 } |
1148 | 1143 |
1149 // Overridden from BluetoothAdapter::Observer. | 1144 // Overridden from BluetoothAdapter::Observer. |
1150 virtual void AdapterPresentChanged(BluetoothAdapter* adapter, | 1145 virtual void AdapterPresentChanged(BluetoothAdapter* adapter, |
1151 bool present) OVERRIDE { | 1146 bool present) OVERRIDE { |
1152 NotifyRefreshBluetooth(); | 1147 NotifyRefreshBluetooth(); |
1153 } | 1148 } |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1252 DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegate); | 1247 DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegate); |
1253 }; | 1248 }; |
1254 | 1249 |
1255 } // namespace | 1250 } // namespace |
1256 | 1251 |
1257 ash::SystemTrayDelegate* CreateSystemTrayDelegate(ash::SystemTray* tray) { | 1252 ash::SystemTrayDelegate* CreateSystemTrayDelegate(ash::SystemTray* tray) { |
1258 return new chromeos::SystemTrayDelegate(tray); | 1253 return new chromeos::SystemTrayDelegate(tray); |
1259 } | 1254 } |
1260 | 1255 |
1261 } // namespace chromeos | 1256 } // namespace chromeos |
OLD | NEW |