Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(462)

Side by Side Diff: ash/system/tray/system_tray.cc

Issue 11312139: Add SystemTrayObservers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "ash/system/tray/system_tray.h" 5 #include "ash/system/tray/system_tray.h"
6 6
7 #include "ash/ash_switches.h" 7 #include "ash/ash_switches.h"
8 #include "ash/shell.h" 8 #include "ash/shell.h"
9 #include "ash/shell/panel_window.h" 9 #include "ash/shell/panel_window.h"
10 #include "ash/shell_window_ids.h" 10 #include "ash/shell_window_ids.h"
11 #include "ash/system/audio/tray_volume.h" 11 #include "ash/system/audio/tray_volume.h"
12 #include "ash/system/bluetooth/tray_bluetooth.h" 12 #include "ash/system/bluetooth/tray_bluetooth.h"
13 #include "ash/system/brightness/tray_brightness.h" 13 #include "ash/system/brightness/tray_brightness.h"
14 #include "ash/system/chromeos/tray_display.h" 14 #include "ash/system/chromeos/tray_display.h"
15 #include "ash/system/date/tray_date.h" 15 #include "ash/system/date/tray_date.h"
16 #include "ash/system/drive/tray_drive.h" 16 #include "ash/system/drive/tray_drive.h"
17 #include "ash/system/ime/tray_ime.h" 17 #include "ash/system/ime/tray_ime.h"
18 #include "ash/system/locale/tray_locale.h" 18 #include "ash/system/locale/tray_locale.h"
19 #include "ash/system/monitor/tray_monitor.h" 19 #include "ash/system/monitor/tray_monitor.h"
20 #include "ash/system/power/power_status_observer.h"
21 #include "ash/system/power/power_supply_status.h" 20 #include "ash/system/power/power_supply_status.h"
22 #include "ash/system/power/tray_power.h" 21 #include "ash/system/power/tray_power.h"
23 #include "ash/system/settings/tray_settings.h" 22 #include "ash/system/settings/tray_settings.h"
24 #include "ash/system/status_area_widget.h" 23 #include "ash/system/status_area_widget.h"
25 #include "ash/system/tray/system_tray_delegate.h" 24 #include "ash/system/tray/system_tray_delegate.h"
25 #include "ash/system/tray/system_tray_observers.h"
26 #include "ash/system/tray/system_tray_item.h" 26 #include "ash/system/tray/system_tray_item.h"
27 #include "ash/system/tray/tray_bubble_wrapper.h" 27 #include "ash/system/tray/tray_bubble_wrapper.h"
28 #include "ash/system/tray/tray_constants.h" 28 #include "ash/system/tray/tray_constants.h"
29 #include "ash/system/tray_accessibility.h" 29 #include "ash/system/tray_accessibility.h"
30 #include "ash/system/tray_caps_lock.h" 30 #include "ash/system/tray_caps_lock.h"
31 #include "ash/system/tray_update.h" 31 #include "ash/system/tray_update.h"
32 #include "ash/system/user/login_status.h" 32 #include "ash/system/user/login_status.h"
33 #include "ash/system/user/tray_user.h" 33 #include "ash/system/user/tray_user.h"
34 #include "ash/wm/shelf_layout_manager.h" 34 #include "ash/wm/shelf_layout_manager.h"
35 #include "base/command_line.h" 35 #include "base/command_line.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 99
100 } // namespace internal 100 } // namespace internal
101 101
102 // SystemTray 102 // SystemTray
103 103
104 using internal::SystemTrayBubble; 104 using internal::SystemTrayBubble;
105 105
106 SystemTray::SystemTray(internal::StatusAreaWidget* status_area_widget) 106 SystemTray::SystemTray(internal::StatusAreaWidget* status_area_widget)
107 : internal::TrayBackgroundView(status_area_widget), 107 : internal::TrayBackgroundView(status_area_widget),
108 items_(), 108 items_(),
109 accessibility_observer_(NULL),
110 audio_observer_(NULL),
111 bluetooth_observer_(NULL),
112 brightness_observer_(NULL),
113 caps_lock_observer_(NULL),
114 clock_observer_(NULL),
115 drive_observer_(NULL),
116 ime_observer_(NULL),
117 locale_observer_(NULL),
118 #if defined(OS_CHROMEOS)
119 network_observer_(NULL),
120 vpn_observer_(NULL),
121 sms_observer_(NULL),
122 #endif
123 update_observer_(NULL),
124 user_observer_(NULL),
125 default_bubble_height_(0), 109 default_bubble_height_(0),
126 hide_notifications_(false) { 110 hide_notifications_(false) {
127 SetContentsBackground(); 111 SetContentsBackground();
128 } 112 }
129 113
130 SystemTray::~SystemTray() { 114 SystemTray::~SystemTray() {
131 // Destroy any child views that might have back pointers before ~View(). 115 // Destroy any child views that might have back pointers before ~View().
132 system_bubble_.reset(); 116 system_bubble_.reset();
133 notification_bubble_.reset(); 117 notification_bubble_.reset();
134 for (std::vector<SystemTrayItem*>::iterator it = items_.begin(); 118 for (std::vector<SystemTrayItem*>::iterator it = items_.begin();
135 it != items_.end(); 119 it != items_.end();
136 ++it) { 120 ++it) {
137 (*it)->DestroyTrayView(); 121 (*it)->DestroyTrayView();
138 } 122 }
139 } 123 }
140 124
141 void SystemTray::CreateItems() { 125 void SystemTray::InitializeTrayItems(SystemTrayDelegate* delegate) {
126 internal::TrayBackgroundView::Initialize();
127 CreateItems(delegate);
128 }
129
130 void SystemTray::CreateItems(SystemTrayDelegate* delegate) {
142 internal::TrayVolume* tray_volume = new internal::TrayVolume(); 131 internal::TrayVolume* tray_volume = new internal::TrayVolume();
143 internal::TrayBluetooth* tray_bluetooth = new internal::TrayBluetooth(); 132 internal::TrayBluetooth* tray_bluetooth = new internal::TrayBluetooth();
144 internal::TrayBrightness* tray_brightness = new internal::TrayBrightness(); 133 internal::TrayBrightness* tray_brightness = new internal::TrayBrightness();
145 internal::TrayDate* tray_date = new internal::TrayDate(); 134 internal::TrayDate* tray_date = new internal::TrayDate();
146 internal::TrayPower* tray_power = new internal::TrayPower(); 135 internal::TrayPower* tray_power = new internal::TrayPower();
147 internal::TrayIME* tray_ime = new internal::TrayIME; 136 internal::TrayIME* tray_ime = new internal::TrayIME();
148 internal::TrayUser* tray_user = new internal::TrayUser; 137 internal::TrayUser* tray_user = new internal::TrayUser();
149 internal::TrayAccessibility* tray_accessibility = 138 internal::TrayAccessibility* tray_accessibility =
150 new internal::TrayAccessibility; 139 new internal::TrayAccessibility();
151 internal::TrayCapsLock* tray_caps_lock = new internal::TrayCapsLock; 140 internal::TrayCapsLock* tray_caps_lock = new internal::TrayCapsLock();
152 internal::TrayDrive* tray_drive = new internal::TrayDrive; 141 internal::TrayDrive* tray_drive = new internal::TrayDrive();
153 internal::TrayLocale* tray_locale = new internal::TrayLocale; 142 internal::TrayLocale* tray_locale = new internal::TrayLocale();
154 internal::TrayUpdate* tray_update = new internal::TrayUpdate; 143 internal::TrayUpdate* tray_update = new internal::TrayUpdate();
155 internal::TraySettings* tray_settings = new internal::TraySettings(); 144 internal::TraySettings* tray_settings = new internal::TraySettings();
145 #if defined(OS_CHROMEOS)
146 internal::TrayDisplay* tray_display = new internal::TrayDisplay();
147 internal::TrayNetwork* tray_network = new internal::TrayNetwork();
148 internal::TrayVPN* tray_vpn = new internal::TrayVPN();
149 internal::TraySms* tray_sms = new internal::TraySms();
150 #endif
156 151
157 accessibility_observer_ = tray_accessibility; 152 SystemTrayObservers* observers = delegate->GetSystemTrayObservers();
158 audio_observer_ = tray_volume; 153 if (observers) {
159 bluetooth_observer_ = tray_bluetooth; 154 observers->accessibility_observers().AddObserver(tray_accessibility);
160 brightness_observer_ = tray_brightness; 155 observers->audio_observers().AddObserver(tray_volume);
161 caps_lock_observer_ = tray_caps_lock; 156 observers->bluetooth_observers().AddObserver(tray_bluetooth);
162 clock_observer_ = tray_date; 157 observers->brightness_observers().AddObserver(tray_brightness);
163 drive_observer_ = tray_drive; 158 observers->caps_lock_observers().AddObserver(tray_caps_lock);
164 ime_observer_ = tray_ime; 159 observers->clock_observers().AddObserver(tray_date);
165 locale_observer_ = tray_locale; 160 observers->drive_observers().AddObserver(tray_drive);
166 power_status_observers_.AddObserver(tray_power); 161 observers->ime_observers().AddObserver(tray_ime);
167 power_status_observers_.AddObserver(tray_settings); 162 observers->locale_observers().AddObserver(tray_locale);
168 update_observer_ = tray_update; 163 observers->power_status_observers().AddObserver(tray_power);
169 user_observer_ = tray_user; 164 observers->power_status_observers().AddObserver(tray_settings);
170 165 observers->update_observers().AddObserver(tray_update);
166 observers->user_observers().AddObserver(tray_user);
171 #if defined(OS_CHROMEOS) 167 #if defined(OS_CHROMEOS)
172 internal::TrayDisplay* tray_display = new internal::TrayDisplay; 168 observers->network_observers().AddObserver(tray_network);
173 internal::TrayNetwork* tray_network = new internal::TrayNetwork; 169 observers->vpn_observers().AddObserver(tray_vpn);
174 internal::TrayVPN* tray_vpn = new internal::TrayVPN; 170 observers->sms_observers().AddObserver(tray_sms);
175 internal::TraySms* tray_sms = new internal::TraySms();
176 network_observer_ = tray_network;
177 vpn_observer_ = tray_vpn;
178 sms_observer_ = tray_sms;
179 #endif 171 #endif
172 }
180 173
181 AddTrayItem(tray_user); 174 AddTrayItem(tray_user);
182 AddTrayItem(tray_ime); 175 AddTrayItem(tray_ime);
183 AddTrayItem(tray_power); 176 AddTrayItem(tray_power);
184 #if defined(OS_CHROMEOS) 177 #if defined(OS_CHROMEOS)
185 AddTrayItem(tray_network); 178 AddTrayItem(tray_network);
186 AddTrayItem(tray_vpn); 179 AddTrayItem(tray_vpn);
187 AddTrayItem(tray_sms); 180 AddTrayItem(tray_sms);
188 #endif 181 #endif
189 AddTrayItem(tray_bluetooth); 182 AddTrayItem(tray_bluetooth);
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 // It is possible that none of the items generated actual notifications. 478 // It is possible that none of the items generated actual notifications.
486 DestroyNotificationBubble(); 479 DestroyNotificationBubble();
487 return; 480 return;
488 } 481 }
489 if (hide_notifications_) 482 if (hide_notifications_)
490 notification_bubble->SetVisible(false); 483 notification_bubble->SetVisible(false);
491 else 484 else
492 status_area_widget()->SetHideWebNotifications(true); 485 status_area_widget()->SetHideWebNotifications(true);
493 } 486 }
494 487
495 void SystemTray::Initialize() {
496 internal::TrayBackgroundView::Initialize();
497 CreateItems();
498 }
499
500 void SystemTray::SetShelfAlignment(ShelfAlignment alignment) { 488 void SystemTray::SetShelfAlignment(ShelfAlignment alignment) {
501 if (alignment == shelf_alignment()) 489 if (alignment == shelf_alignment())
502 return; 490 return;
503 internal::TrayBackgroundView::SetShelfAlignment(alignment); 491 internal::TrayBackgroundView::SetShelfAlignment(alignment);
504 UpdateAfterShelfAlignmentChange(alignment); 492 UpdateAfterShelfAlignmentChange(alignment);
505 // Destroy any existing bubble so that it is rebuilt correctly. 493 // Destroy any existing bubble so that it is rebuilt correctly.
506 system_bubble_.reset(); 494 system_bubble_.reset();
507 // Rebuild any notification bubble. 495 // Rebuild any notification bubble.
508 if (notification_bubble_.get()) { 496 if (notification_bubble_.get()) {
509 notification_bubble_.reset(); 497 notification_bubble_.reset();
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 ConvertPointToWidget(this, &point); 581 ConvertPointToWidget(this, &point);
594 arrow_offset = point.x(); 582 arrow_offset = point.x();
595 } 583 }
596 } 584 }
597 ShowDefaultViewWithOffset(BUBBLE_CREATE_NEW, arrow_offset); 585 ShowDefaultViewWithOffset(BUBBLE_CREATE_NEW, arrow_offset);
598 } 586 }
599 return true; 587 return true;
600 } 588 }
601 589
602 } // namespace ash 590 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698