summaryrefslogtreecommitdiffstats
path: root/ash/system
diff options
context:
space:
mode:
authorstevenjb@chromium.org <stevenjb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-14 01:11:00 +0000
committerstevenjb@chromium.org <stevenjb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-14 01:11:00 +0000
commit83b2b84c1e4bc8434630f58e88bcf1a93b33ded6 (patch)
treee6612ff5286a73ed99df758ee600f331396e51d6 /ash/system
parentd8f1004bcf08a2c0d629198a3695808b3a400487 (diff)
downloadchromium_src-83b2b84c1e4bc8434630f58e88bcf1a93b33ded6.zip
chromium_src-83b2b84c1e4bc8434630f58e88bcf1a93b33ded6.tar.gz
chromium_src-83b2b84c1e4bc8434630f58e88bcf1a93b33ded6.tar.bz2
Add SystemTrayObservers
Once there is more than one SystemTray instance, we will need to support observer lists so that multiple tray items can be notified. Hosting the observer lists in a separate class owned by ass::SystemTrayDelegate seemed like the most forward approach. BUG=159543 For ash.gyp: TBR=sky@chromium.org Review URL: https://chromiumcodereview.appspot.com/11312139 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@167548 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/system')
-rw-r--r--ash/system/status_area_widget.cc9
-rw-r--r--ash/system/tray/system_tray.cc91
-rw-r--r--ash/system/tray/system_tray.h81
-rw-r--r--ash/system/tray/system_tray_notifier.cc237
-rw-r--r--ash/system/tray/system_tray_notifier.h117
5 files changed, 404 insertions, 131 deletions
diff --git a/ash/system/status_area_widget.cc b/ash/system/status_area_widget.cc
index b487de5..c1b165f 100644
--- a/ash/system/status_area_widget.cc
+++ b/ash/system/status_area_widget.cc
@@ -46,13 +46,14 @@ StatusAreaWidget::~StatusAreaWidget() {
void StatusAreaWidget::CreateTrayViews() {
AddSystemTray();
AddWebNotificationTray();
- // Initialize() must be called after all trays have been created.
+ SystemTrayDelegate* delegate = ash::Shell::GetInstance()->tray_delegate();
+ DCHECK(delegate);
+ // Initialize after all trays have been created.
if (system_tray_)
- system_tray_->Initialize();
+ system_tray_->InitializeTrayItems(delegate);
if (web_notification_tray_)
web_notification_tray_->Initialize();
- UpdateAfterLoginStatusChange(
- ash::Shell::GetInstance()->tray_delegate()->GetUserLoginStatus());
+ UpdateAfterLoginStatusChange(delegate->GetUserLoginStatus());
}
void StatusAreaWidget::Shutdown() {
diff --git a/ash/system/tray/system_tray.cc b/ash/system/tray/system_tray.cc
index e7d8385..9ba7800 100644
--- a/ash/system/tray/system_tray.cc
+++ b/ash/system/tray/system_tray.cc
@@ -18,12 +18,12 @@
#include "ash/system/locale/tray_locale.h"
#include "ash/system/logout_button/tray_logout_button.h"
#include "ash/system/monitor/tray_monitor.h"
-#include "ash/system/power/power_status_observer.h"
#include "ash/system/power/power_supply_status.h"
#include "ash/system/power/tray_power.h"
#include "ash/system/settings/tray_settings.h"
#include "ash/system/status_area_widget.h"
#include "ash/system/tray/system_tray_delegate.h"
+#include "ash/system/tray/system_tray_notifier.h"
#include "ash/system/tray/system_tray_item.h"
#include "ash/system/tray/tray_bubble_wrapper.h"
#include "ash/system/tray/tray_constants.h"
@@ -107,23 +107,6 @@ using internal::SystemTrayBubble;
SystemTray::SystemTray(internal::StatusAreaWidget* status_area_widget)
: internal::TrayBackgroundView(status_area_widget),
items_(),
- accessibility_observer_(NULL),
- audio_observer_(NULL),
- bluetooth_observer_(NULL),
- brightness_observer_(NULL),
- caps_lock_observer_(NULL),
- clock_observer_(NULL),
- drive_observer_(NULL),
- ime_observer_(NULL),
- locale_observer_(NULL),
- logout_button_observer_(NULL),
-#if defined(OS_CHROMEOS)
- network_observer_(NULL),
- vpn_observer_(NULL),
- sms_observer_(NULL),
-#endif
- update_observer_(NULL),
- user_observer_(NULL),
default_bubble_height_(0),
hide_notifications_(false) {
SetContentsBackground();
@@ -140,47 +123,54 @@ SystemTray::~SystemTray() {
}
}
-void SystemTray::CreateItems() {
+void SystemTray::InitializeTrayItems(SystemTrayDelegate* delegate) {
+ internal::TrayBackgroundView::Initialize();
+ CreateItems(delegate);
+}
+
+void SystemTray::CreateItems(SystemTrayDelegate* delegate) {
internal::TrayVolume* tray_volume = new internal::TrayVolume();
internal::TrayBluetooth* tray_bluetooth = new internal::TrayBluetooth();
internal::TrayBrightness* tray_brightness = new internal::TrayBrightness();
internal::TrayDate* tray_date = new internal::TrayDate();
internal::TrayPower* tray_power = new internal::TrayPower();
- internal::TrayIME* tray_ime = new internal::TrayIME;
- internal::TrayUser* tray_user = new internal::TrayUser;
+ internal::TrayIME* tray_ime = new internal::TrayIME();
+ internal::TrayUser* tray_user = new internal::TrayUser();
internal::TrayAccessibility* tray_accessibility =
- new internal::TrayAccessibility;
- internal::TrayCapsLock* tray_caps_lock = new internal::TrayCapsLock;
- internal::TrayDrive* tray_drive = new internal::TrayDrive;
- internal::TrayLocale* tray_locale = new internal::TrayLocale;
+ new internal::TrayAccessibility();
+ internal::TrayCapsLock* tray_caps_lock = new internal::TrayCapsLock();
+ internal::TrayDrive* tray_drive = new internal::TrayDrive();
+ internal::TrayLocale* tray_locale = new internal::TrayLocale();
internal::TrayLogoutButton* tray_logout_button =
new internal::TrayLogoutButton();
- internal::TrayUpdate* tray_update = new internal::TrayUpdate;
+ internal::TrayUpdate* tray_update = new internal::TrayUpdate();
internal::TraySettings* tray_settings = new internal::TraySettings();
-
- accessibility_observer_ = tray_accessibility;
- audio_observer_ = tray_volume;
- bluetooth_observer_ = tray_bluetooth;
- brightness_observer_ = tray_brightness;
- caps_lock_observer_ = tray_caps_lock;
- clock_observer_ = tray_date;
- drive_observer_ = tray_drive;
- ime_observer_ = tray_ime;
- locale_observer_ = tray_locale;
- logout_button_observer_ = tray_logout_button;
- power_status_observers_.AddObserver(tray_power);
- power_status_observers_.AddObserver(tray_settings);
- update_observer_ = tray_update;
- user_observer_ = tray_user;
-
#if defined(OS_CHROMEOS)
- internal::TrayDisplay* tray_display = new internal::TrayDisplay;
- internal::TrayNetwork* tray_network = new internal::TrayNetwork;
- internal::TrayVPN* tray_vpn = new internal::TrayVPN;
+ internal::TrayDisplay* tray_display = new internal::TrayDisplay();
+ internal::TrayNetwork* tray_network = new internal::TrayNetwork();
+ internal::TrayVPN* tray_vpn = new internal::TrayVPN();
internal::TraySms* tray_sms = new internal::TraySms();
- network_observer_ = tray_network;
- vpn_observer_ = tray_vpn;
- sms_observer_ = tray_sms;
+#endif
+
+ SystemTrayNotifier* notifier = Shell::GetInstance()->system_tray_notifier();
+ notifier->AddAccessibilityObserver(tray_accessibility);
+ notifier->AddAudioObserver(tray_volume);
+ notifier->AddBluetoothObserver(tray_bluetooth);
+ notifier->AddBrightnessObserver(tray_brightness);
+ notifier->AddCapsLockObserver(tray_caps_lock);
+ notifier->AddClockObserver(tray_date);
+ notifier->AddDriveObserver(tray_drive);
+ notifier->AddIMEObserver(tray_ime);
+ notifier->AddLocaleObserver(tray_locale);
+ notifier->AddLogoutButtonObserver(tray_logout_button);
+ notifier->AddPowerStatusObserver(tray_power);
+ notifier->AddPowerStatusObserver(tray_settings);
+ notifier->AddUpdateObserver(tray_update);
+ notifier->AddUserObserver(tray_user);
+#if defined(OS_CHROMEOS)
+ notifier->AddNetworkObserver(tray_network);
+ notifier->AddVpnObserver(tray_vpn);
+ notifier->AddSmsObserver(tray_sms);
#endif
AddTrayItem(tray_logout_button);
@@ -498,11 +488,6 @@ void SystemTray::UpdateNotificationBubble() {
status_area_widget()->SetHideWebNotifications(true);
}
-void SystemTray::Initialize() {
- internal::TrayBackgroundView::Initialize();
- CreateItems();
-}
-
void SystemTray::SetShelfAlignment(ShelfAlignment alignment) {
if (alignment == shelf_alignment())
return;
diff --git a/ash/system/tray/system_tray.h b/ash/system/tray/system_tray.h
index a42632f..57cc2e7 100644
--- a/ash/system/tray/system_tray.h
+++ b/ash/system/tray/system_tray.h
@@ -34,6 +34,7 @@ class IMEObserver;
class LocaleObserver;
class LogoutButtonObserver;
class PowerStatusObserver;
+class SystemTrayDelegate;
class UpdateObserver;
class UserObserver;
#if defined(OS_CHROMEOS)
@@ -61,8 +62,9 @@ class ASH_EXPORT SystemTray : public internal::TrayBackgroundView,
explicit SystemTray(internal::StatusAreaWidget* status_area_widget);
virtual ~SystemTray();
- // Creates the default set of items for the sytem tray.
- void CreateItems();
+ // Calls TrayBackgroundView::Initialize(), creates the tray items, and
+ // adds them to SystemTrayNotifier.
+ void InitializeTrayItems(SystemTrayDelegate* delegate);
// Adds a new item in the tray.
void AddTrayItem(SystemTrayItem* item);
@@ -118,64 +120,12 @@ class ASH_EXPORT SystemTray : public internal::TrayBackgroundView,
// Returns true if the mouse is inside the notification bubble.
bool IsMouseInNotificationBubble() const;
- AccessibilityObserver* accessibility_observer() {
- return accessibility_observer_;
- }
- AudioObserver* audio_observer() {
- return audio_observer_;
- }
- BluetoothObserver* bluetooth_observer() {
- return bluetooth_observer_;
- }
- BrightnessObserver* brightness_observer() {
- return brightness_observer_;
- }
- CapsLockObserver* caps_lock_observer() {
- return caps_lock_observer_;
- }
- ClockObserver* clock_observer() {
- return clock_observer_;
- }
- DriveObserver* drive_observer() {
- return drive_observer_;
- }
- IMEObserver* ime_observer() {
- return ime_observer_;
- }
- LocaleObserver* locale_observer() {
- return locale_observer_;
- }
- LogoutButtonObserver* logout_button_observer() {
- return logout_button_observer_;
- }
-#if defined(OS_CHROMEOS)
- NetworkObserver* network_observer() {
- return network_observer_;
- }
- NetworkObserver* vpn_observer() {
- return vpn_observer_;
- }
- SmsObserver* sms_observer() {
- return sms_observer_;
- }
-#endif
- ObserverList<PowerStatusObserver>& power_status_observers() {
- return power_status_observers_;
- }
- UpdateObserver* update_observer() {
- return update_observer_;
- }
- UserObserver* user_observer() {
- return user_observer_;
- }
-
// Accessors for testing.
// Returns true if the bubble exists.
bool CloseBubbleForTest() const;
// Overridden from TrayBackgroundView.
- virtual void Initialize() OVERRIDE;
virtual void SetShelfAlignment(ShelfAlignment alignment) OVERRIDE;
virtual void AnchorUpdated() OVERRIDE;
virtual string16 GetAccessibleNameForTray() OVERRIDE;
@@ -194,6 +144,9 @@ class ASH_EXPORT SystemTray : public internal::TrayBackgroundView,
virtual void HideBubble(const views::TrayBubbleView* bubble_view) OVERRIDE;
private:
+ // Creates the default set of items for the sytem tray.
+ void CreateItems(SystemTrayDelegate* delegate);
+
// Returns true if the system_bubble_ exists and is of type |type|.
bool HasSystemBubbleType(internal::SystemTrayBubble::BubbleType type);
@@ -237,26 +190,6 @@ class ASH_EXPORT SystemTray : public internal::TrayBackgroundView,
// Mappings of system tray item and it's view in the tray.
std::map<SystemTrayItem*, views::View*> tray_item_map_;
- // These observers are not owned by the tray.
- AccessibilityObserver* accessibility_observer_;
- AudioObserver* audio_observer_;
- BluetoothObserver* bluetooth_observer_;
- BrightnessObserver* brightness_observer_;
- CapsLockObserver* caps_lock_observer_;
- ClockObserver* clock_observer_;
- DriveObserver* drive_observer_;
- IMEObserver* ime_observer_;
- LocaleObserver* locale_observer_;
- LogoutButtonObserver* logout_button_observer_;
-#if defined(OS_CHROMEOS)
- NetworkObserver* network_observer_;
- NetworkObserver* vpn_observer_;
- SmsObserver* sms_observer_;
-#endif
- ObserverList<PowerStatusObserver> power_status_observers_;
- UpdateObserver* update_observer_;
- UserObserver* user_observer_;
-
// Bubble for default and detailed views.
scoped_ptr<internal::SystemBubbleWrapper> system_bubble_;
diff --git a/ash/system/tray/system_tray_notifier.cc b/ash/system/tray/system_tray_notifier.cc
new file mode 100644
index 0000000..66d490d
--- /dev/null
+++ b/ash/system/tray/system_tray_notifier.cc
@@ -0,0 +1,237 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/system/tray/system_tray_notifier.h"
+
+namespace ash {
+
+SystemTrayNotifier::SystemTrayNotifier() {
+}
+
+SystemTrayNotifier::~SystemTrayNotifier() {
+}
+
+void SystemTrayNotifier::AddAccessibilityObserver(
+ AccessibilityObserver* observer) {
+ accessibility_observers_.AddObserver(observer);
+}
+
+void SystemTrayNotifier::AddAudioObserver(AudioObserver* observer) {
+ audio_observers_.AddObserver(observer);
+}
+
+void SystemTrayNotifier::AddBluetoothObserver(BluetoothObserver* observer) {
+ bluetooth_observers_.AddObserver(observer);
+}
+
+void SystemTrayNotifier::AddBrightnessObserver(BrightnessObserver* observer) {
+ brightness_observers_.AddObserver(observer);
+}
+
+void SystemTrayNotifier::AddCapsLockObserver(CapsLockObserver* observer) {
+ caps_lock_observers_.AddObserver(observer);
+}
+
+void SystemTrayNotifier::AddClockObserver(ClockObserver* observer) {
+ clock_observers_.AddObserver(observer);
+}
+
+void SystemTrayNotifier::AddDriveObserver(DriveObserver* observer) {
+ drive_observers_.AddObserver(observer);
+}
+
+void SystemTrayNotifier::AddIMEObserver(IMEObserver* observer) {
+ ime_observers_.AddObserver(observer);
+}
+
+void SystemTrayNotifier::AddLocaleObserver(LocaleObserver* observer) {
+ locale_observers_.AddObserver(observer);
+}
+
+void SystemTrayNotifier::AddLogoutButtonObserver(
+ LogoutButtonObserver* observer) {
+ logout_button_observers_.AddObserver(observer);
+}
+
+void SystemTrayNotifier::AddPowerStatusObserver(
+ PowerStatusObserver* observer) {
+ power_status_observers_.AddObserver(observer);
+}
+
+void SystemTrayNotifier::AddUpdateObserver(UpdateObserver* observer) {
+ update_observers_.AddObserver(observer);
+}
+
+void SystemTrayNotifier::AddUserObserver(UserObserver* observer) {
+ user_observers_.AddObserver(observer);
+}
+
+#if defined(OS_CHROMEOS)
+void SystemTrayNotifier::AddNetworkObserver(NetworkObserver* observer) {
+ network_observers_.AddObserver(observer);
+}
+
+void SystemTrayNotifier::AddVpnObserver(NetworkObserver* observer) {
+ vpn_observers_.AddObserver(observer);
+}
+
+void SystemTrayNotifier::AddSmsObserver(SmsObserver* observer) {
+ sms_observers_.AddObserver(observer);
+}
+#endif
+
+void SystemTrayNotifier::NotifyAccessibilityModeChanged(
+ bool spoken_feedback_enabled) {
+ FOR_EACH_OBSERVER(
+ AccessibilityObserver,
+ accessibility_observers_,
+ OnAccessibilityModeChanged(spoken_feedback_enabled));
+}
+
+void SystemTrayNotifier::NotifyVolumeChanged(float level) {
+ FOR_EACH_OBSERVER(AudioObserver,
+ audio_observers_,
+ OnVolumeChanged(level));
+}
+
+void SystemTrayNotifier::NotifyMuteToggled() {
+ FOR_EACH_OBSERVER(AudioObserver,
+ audio_observers_,
+ OnMuteToggled());
+}
+
+void SystemTrayNotifier::NotifyRefreshBluetooth() {
+ FOR_EACH_OBSERVER(BluetoothObserver,
+ bluetooth_observers_,
+ OnBluetoothRefresh());
+}
+
+void SystemTrayNotifier::NotifyBluetoothDiscoveringChanged() {
+ FOR_EACH_OBSERVER(BluetoothObserver,
+ bluetooth_observers_,
+ OnBluetoothDiscoveringChanged());
+}
+
+void SystemTrayNotifier::NotifyBrightnessChanged(double level,
+ bool user_initiated) {
+ FOR_EACH_OBSERVER(
+ BrightnessObserver,
+ brightness_observers_,
+ OnBrightnessChanged(level, user_initiated));
+}
+
+void SystemTrayNotifier::NotifyCapsLockChanged(
+ bool enabled,
+ bool search_mapped_to_caps_lock) {
+ FOR_EACH_OBSERVER(CapsLockObserver,
+ caps_lock_observers_,
+ OnCapsLockChanged(enabled, search_mapped_to_caps_lock));
+}
+
+void SystemTrayNotifier::NotifyRefreshClock() {
+ FOR_EACH_OBSERVER(ClockObserver, clock_observers_, Refresh());
+}
+
+void SystemTrayNotifier::NotifyDateFormatChanged() {
+ FOR_EACH_OBSERVER(ClockObserver,
+ clock_observers_,
+ OnDateFormatChanged());
+}
+
+void SystemTrayNotifier::NotifyRefreshDrive(DriveOperationStatusList& list) {
+ FOR_EACH_OBSERVER(DriveObserver,
+ drive_observers_,
+ OnDriveRefresh(list));
+}
+
+void SystemTrayNotifier::NotifyRefreshIME(bool show_message) {
+ FOR_EACH_OBSERVER(IMEObserver,
+ ime_observers_,
+ OnIMERefresh(show_message));
+}
+
+void SystemTrayNotifier::NotifyShowLoginButtonChanged(bool show_login_button) {
+ FOR_EACH_OBSERVER(LogoutButtonObserver,
+ logout_button_observers_,
+ OnShowLogoutButtonInTrayChanged(show_login_button));
+}
+
+void SystemTrayNotifier::NotifyLocaleChanged(
+ LocaleObserver::Delegate* delegate,
+ const std::string& cur_locale,
+ const std::string& from_locale,
+ const std::string& to_locale) {
+ FOR_EACH_OBSERVER(
+ LocaleObserver,
+ locale_observers_,
+ OnLocaleChanged(delegate, cur_locale, from_locale, to_locale));
+}
+
+void SystemTrayNotifier::NotifyPowerStatusChanged(
+ const PowerSupplyStatus& power_status) {
+ FOR_EACH_OBSERVER(PowerStatusObserver,
+ power_status_observers_,
+ OnPowerStatusChanged(power_status));
+}
+
+void SystemTrayNotifier::NotifyUpdateRecommended(
+ UpdateObserver::UpdateSeverity severity) {
+ FOR_EACH_OBSERVER(UpdateObserver,
+ update_observers_,
+ OnUpdateRecommended(severity));
+}
+
+void SystemTrayNotifier::NotifyUserUpdate() {
+ FOR_EACH_OBSERVER(UserObserver,
+ user_observers_,
+ OnUserUpdate());
+}
+
+#if defined(OS_CHROMEOS)
+
+void SystemTrayNotifier::NotifyRefreshNetwork(const NetworkIconInfo &info) {
+ FOR_EACH_OBSERVER(NetworkObserver,
+ network_observers_,
+ OnNetworkRefresh(info));
+}
+
+void SystemTrayNotifier::NotifySetNetworkMessage(
+ NetworkTrayDelegate* delegate,
+ NetworkObserver::MessageType message_type,
+ const string16& title,
+ const string16& message,
+ const std::vector<string16>& links) {
+ FOR_EACH_OBSERVER(NetworkObserver,
+ network_observers_,
+ SetNetworkMessage(
+ delegate, message_type, title, message, links));
+}
+
+void SystemTrayNotifier::NotifyClearNetworkMessage(
+ NetworkObserver::MessageType message_type) {
+ FOR_EACH_OBSERVER(NetworkObserver,
+ network_observers_,
+ ClearNetworkMessage(message_type));
+}
+
+void SystemTrayNotifier::NotifyVpnRefreshNetwork(const NetworkIconInfo &info) {
+ FOR_EACH_OBSERVER(NetworkObserver,
+ vpn_observers_,
+ OnNetworkRefresh(info));
+}
+
+void SystemTrayNotifier::NotifyWillToggleWifi() {
+ FOR_EACH_OBSERVER(NetworkObserver,
+ network_observers_,
+ OnWillToggleWifi());
+}
+
+void SystemTrayNotifier::NotifyAddSmsMessage(
+ const base::DictionaryValue& message) {
+ FOR_EACH_OBSERVER(SmsObserver, sms_observers_, AddMessage(message));
+}
+
+#endif // OS_CHROMEOS
+
+} // namespace ash
diff --git a/ash/system/tray/system_tray_notifier.h b/ash/system/tray/system_tray_notifier.h
new file mode 100644
index 0000000..b755167
--- /dev/null
+++ b/ash/system/tray/system_tray_notifier.h
@@ -0,0 +1,117 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ASH_SYSTEM_TRAY_SYSTEM_TRAY_NOTIFIER_H_
+#define ASH_SYSTEM_TRAY_SYSTEM_TRAY_NOTIFIER_H_
+
+#include <string>
+#include <vector>
+
+#include "ash/ash_export.h"
+#include "ash/system/audio/audio_observer.h"
+#include "ash/system/bluetooth/bluetooth_observer.h"
+#include "ash/system/brightness/brightness_observer.h"
+#include "ash/system/chromeos/network/network_observer.h"
+#include "ash/system/chromeos/network/sms_observer.h"
+#include "ash/system/date/clock_observer.h"
+#include "ash/system/drive/drive_observer.h"
+#include "ash/system/ime/ime_observer.h"
+#include "ash/system/locale/locale_observer.h"
+#include "ash/system/logout_button/logout_button_observer.h"
+#include "ash/system/power/power_status_observer.h"
+#include "ash/system/tray_accessibility.h"
+#include "ash/system/tray_caps_lock.h"
+#include "ash/system/user/update_observer.h"
+#include "ash/system/user/user_observer.h"
+#include "base/observer_list.h"
+
+#if defined(OS_CHROMEOS)
+#include "ash/system/chromeos/network/network_observer.h"
+#include "ash/system/chromeos/network/sms_observer.h"
+#endif
+
+namespace ash {
+
+class ASH_EXPORT SystemTrayNotifier {
+public:
+ SystemTrayNotifier();
+ ~SystemTrayNotifier();
+
+ void AddAccessibilityObserver(AccessibilityObserver* observer);
+ void AddAudioObserver(AudioObserver* observer);
+ void AddBluetoothObserver(BluetoothObserver* observer);
+ void AddBrightnessObserver(BrightnessObserver* observer);
+ void AddCapsLockObserver(CapsLockObserver* observer);
+ void AddClockObserver(ClockObserver* observer);
+ void AddDriveObserver(DriveObserver* observer);
+ void AddIMEObserver(IMEObserver* observer);
+ void AddLocaleObserver(LocaleObserver* observer);
+ void AddLogoutButtonObserver(LogoutButtonObserver* observer);
+ void AddPowerStatusObserver(PowerStatusObserver* observer);
+ void AddUpdateObserver(UpdateObserver* observer);
+ void AddUserObserver(UserObserver* observer);
+#if defined(OS_CHROMEOS)
+ void AddNetworkObserver(NetworkObserver* observer);
+ void AddVpnObserver(NetworkObserver* observer);
+ void AddSmsObserver(SmsObserver* observer);
+#endif
+
+ void NotifyAccessibilityModeChanged(bool spoken_feedback_enabled);
+ void NotifyVolumeChanged(float level);
+ void NotifyMuteToggled();
+ void NotifyRefreshBluetooth();
+ void NotifyBluetoothDiscoveringChanged();
+ void NotifyBrightnessChanged(double level, bool user_initialted);
+ void NotifyCapsLockChanged(bool enabled, bool search_mapped_to_caps_lock);
+ void NotifyRefreshClock();
+ void NotifyDateFormatChanged();
+ void NotifyRefreshDrive(DriveOperationStatusList& list);
+ void NotifyRefreshIME(bool show_message);
+ void NotifyShowLoginButtonChanged(bool show_login_button);
+ void NotifyLocaleChanged(LocaleObserver::Delegate* delegate,
+ const std::string& cur_locale,
+ const std::string& from_locale,
+ const std::string& to_locale);
+ void NotifyPowerStatusChanged(const PowerSupplyStatus& power_status);
+ void NotifyUpdateRecommended(UpdateObserver::UpdateSeverity severity);
+ void NotifyUserUpdate();
+#if defined(OS_CHROMEOS)
+ void NotifyRefreshNetwork(const NetworkIconInfo &info);
+ void NotifySetNetworkMessage(NetworkTrayDelegate* delegate,
+ NetworkObserver::MessageType message_type,
+ const string16& title,
+ const string16& message,
+ const std::vector<string16>& links);
+ void NotifyClearNetworkMessage(NetworkObserver::MessageType message_type);
+ void NotifyVpnRefreshNetwork(const NetworkIconInfo &info);
+ void NotifyWillToggleWifi();
+ void NotifyAddSmsMessage(const base::DictionaryValue& message);
+#endif
+
+ private:
+ ObserverList<AccessibilityObserver> accessibility_observers_;
+ ObserverList<AudioObserver> audio_observers_;
+ ObserverList<BluetoothObserver> bluetooth_observers_;
+ ObserverList<BrightnessObserver> brightness_observers_;
+ ObserverList<CapsLockObserver> caps_lock_observers_;
+ ObserverList<ClockObserver> clock_observers_;
+ ObserverList<DriveObserver> drive_observers_;
+ ObserverList<IMEObserver> ime_observers_;
+ ObserverList<LocaleObserver> locale_observers_;
+ ObserverList<LogoutButtonObserver> logout_button_observers_;
+ ObserverList<PowerStatusObserver> power_status_observers_;
+ ObserverList<UpdateObserver> update_observers_;
+ ObserverList<UserObserver> user_observers_;
+#if defined(OS_CHROMEOS)
+ ObserverList<NetworkObserver> network_observers_;
+ ObserverList<NetworkObserver> vpn_observers_;
+ ObserverList<SmsObserver> sms_observers_;
+#endif
+
+ DISALLOW_COPY_AND_ASSIGN(SystemTrayNotifier);
+};
+
+} // namespace ash
+
+#endif // ASH_SYSTEM_TRAY_SYSTEM_TRAY_NOTIFIER_H_