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

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

Issue 2778143002: More pre-MD cleanup (Closed)
Patch Set: update c/b Created 3 years, 8 months 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
« no previous file with comments | « ash/common/system/tray/system_tray.h ('k') | ash/common/system/tray/system_tray_delegate.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/common/system/tray/system_tray.h" 5 #include "ash/common/system/tray/system_tray.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <vector> 9 #include <vector>
10 10
11 #include "ash/common/key_event_watcher.h" 11 #include "ash/common/key_event_watcher.h"
12 #include "ash/common/login_status.h" 12 #include "ash/common/login_status.h"
13 #include "ash/common/material_design/material_design_controller.h"
14 #include "ash/common/session/session_controller.h" 13 #include "ash/common/session/session_controller.h"
15 #include "ash/common/shelf/wm_shelf.h" 14 #include "ash/common/shelf/wm_shelf.h"
16 #include "ash/common/shelf/wm_shelf_util.h" 15 #include "ash/common/shelf/wm_shelf_util.h"
17 #include "ash/common/system/chromeos/audio/tray_audio.h" 16 #include "ash/common/system/chromeos/audio/tray_audio.h"
18 #include "ash/common/system/chromeos/bluetooth/tray_bluetooth.h" 17 #include "ash/common/system/chromeos/bluetooth/tray_bluetooth.h"
19 #include "ash/common/system/chromeos/brightness/tray_brightness.h" 18 #include "ash/common/system/chromeos/brightness/tray_brightness.h"
20 #include "ash/common/system/chromeos/cast/tray_cast.h" 19 #include "ash/common/system/chromeos/cast/tray_cast.h"
21 #include "ash/common/system/chromeos/enterprise/tray_enterprise.h" 20 #include "ash/common/system/chromeos/enterprise/tray_enterprise.h"
22 #include "ash/common/system/chromeos/media_security/multi_profile_media_tray_ite m.h" 21 #include "ash/common/system/chromeos/media_security/multi_profile_media_tray_ite m.h"
23 #include "ash/common/system/chromeos/network/tray_network.h" 22 #include "ash/common/system/chromeos/network/tray_network.h"
24 #include "ash/common/system/chromeos/network/tray_vpn.h" 23 #include "ash/common/system/chromeos/network/tray_vpn.h"
25 #include "ash/common/system/chromeos/power/power_status.h" 24 #include "ash/common/system/chromeos/power/power_status.h"
26 #include "ash/common/system/chromeos/power/tray_power.h" 25 #include "ash/common/system/chromeos/power/tray_power.h"
27 #include "ash/common/system/chromeos/screen_security/screen_capture_tray_item.h" 26 #include "ash/common/system/chromeos/screen_security/screen_capture_tray_item.h"
28 #include "ash/common/system/chromeos/screen_security/screen_share_tray_item.h" 27 #include "ash/common/system/chromeos/screen_security/screen_share_tray_item.h"
29 #include "ash/common/system/chromeos/session/tray_session_length_limit.h" 28 #include "ash/common/system/chromeos/session/tray_session_length_limit.h"
30 #include "ash/common/system/chromeos/supervised/tray_supervised_user.h" 29 #include "ash/common/system/chromeos/supervised/tray_supervised_user.h"
31 #include "ash/common/system/chromeos/tray_caps_lock.h" 30 #include "ash/common/system/chromeos/tray_caps_lock.h"
32 #include "ash/common/system/chromeos/tray_tracing.h" 31 #include "ash/common/system/chromeos/tray_tracing.h"
33 #include "ash/common/system/date/tray_date.h"
34 #include "ash/common/system/date/tray_system_info.h" 32 #include "ash/common/system/date/tray_system_info.h"
35 #include "ash/common/system/ime/tray_ime_chromeos.h" 33 #include "ash/common/system/ime/tray_ime_chromeos.h"
36 #include "ash/common/system/tiles/tray_tiles.h" 34 #include "ash/common/system/tiles/tray_tiles.h"
37 #include "ash/common/system/tray/system_tray_controller.h" 35 #include "ash/common/system/tray/system_tray_controller.h"
38 #include "ash/common/system/tray/system_tray_delegate.h" 36 #include "ash/common/system/tray/system_tray_delegate.h"
39 #include "ash/common/system/tray/system_tray_item.h" 37 #include "ash/common/system/tray/system_tray_item.h"
40 #include "ash/common/system/tray/tray_bubble_wrapper.h" 38 #include "ash/common/system/tray/tray_bubble_wrapper.h"
41 #include "ash/common/system/tray/tray_constants.h" 39 #include "ash/common/system/tray/tray_constants.h"
42 #include "ash/common/system/tray_accessibility.h" 40 #include "ash/common/system/tray_accessibility.h"
43 #include "ash/common/system/update/tray_update.h" 41 #include "ash/common/system/update/tray_update.h"
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 212
215 SystemTray::SystemTray(WmShelf* wm_shelf) 213 SystemTray::SystemTray(WmShelf* wm_shelf)
216 : TrayBackgroundView(wm_shelf, true), 214 : TrayBackgroundView(wm_shelf, true),
217 web_notification_tray_(nullptr), 215 web_notification_tray_(nullptr),
218 detailed_item_(nullptr), 216 detailed_item_(nullptr),
219 default_bubble_height_(0), 217 default_bubble_height_(0),
220 full_system_tray_menu_(false), 218 full_system_tray_menu_(false),
221 tray_accessibility_(nullptr), 219 tray_accessibility_(nullptr),
222 tray_audio_(nullptr), 220 tray_audio_(nullptr),
223 tray_cast_(nullptr), 221 tray_cast_(nullptr),
224 tray_date_(nullptr),
225 tray_network_(nullptr), 222 tray_network_(nullptr),
226 tray_tiles_(nullptr), 223 tray_tiles_(nullptr),
227 tray_system_info_(nullptr), 224 tray_system_info_(nullptr),
228 tray_update_(nullptr), 225 tray_update_(nullptr),
229 screen_capture_tray_item_(nullptr), 226 screen_capture_tray_item_(nullptr),
230 screen_share_tray_item_(nullptr) { 227 screen_share_tray_item_(nullptr) {
231 if (MaterialDesignController::IsShelfMaterial()) { 228 SetInkDropMode(InkDropMode::ON);
232 SetInkDropMode(InkDropMode::ON);
233 229
234 // Since user avatar is on the right hand side of System tray of a 230 // Since user avatar is on the right hand side of System tray of a
235 // horizontal shelf and that is sufficient to indicate separation, no 231 // horizontal shelf and that is sufficient to indicate separation, no
236 // separator is required. 232 // separator is required.
237 set_separator_visibility(false); 233 set_separator_visibility(false);
238 }
239 } 234 }
240 235
241 SystemTray::~SystemTray() { 236 SystemTray::~SystemTray() {
242 // Destroy any child views that might have back pointers before ~View(). 237 // Destroy any child views that might have back pointers before ~View().
243 activation_observer_.reset(); 238 activation_observer_.reset();
244 key_event_watcher_.reset(); 239 key_event_watcher_.reset();
245 system_bubble_.reset(); 240 system_bubble_.reset();
246 for (const auto& item : items_) 241 for (const auto& item : items_)
247 item->DestroyTrayView(); 242 item->DestroyTrayView();
248 } 243 }
249 244
250 void SystemTray::InitializeTrayItems( 245 void SystemTray::InitializeTrayItems(
251 SystemTrayDelegate* delegate, 246 SystemTrayDelegate* delegate,
252 WebNotificationTray* web_notification_tray) { 247 WebNotificationTray* web_notification_tray) {
253 DCHECK(web_notification_tray); 248 DCHECK(web_notification_tray);
254 web_notification_tray_ = web_notification_tray; 249 web_notification_tray_ = web_notification_tray;
255 TrayBackgroundView::Initialize(); 250 TrayBackgroundView::Initialize();
256 CreateItems(delegate); 251 CreateItems(delegate);
257 } 252 }
258 253
259 void SystemTray::Shutdown() { 254 void SystemTray::Shutdown() {
260 DCHECK(web_notification_tray_); 255 DCHECK(web_notification_tray_);
261 web_notification_tray_ = nullptr; 256 web_notification_tray_ = nullptr;
262 } 257 }
263 258
264 void SystemTray::CreateItems(SystemTrayDelegate* delegate) { 259 void SystemTray::CreateItems(SystemTrayDelegate* delegate) {
265 const bool use_md = MaterialDesignController::IsSystemTrayMenuMaterial();
266
267 // Create user items for each possible user. 260 // Create user items for each possible user.
268 const int maximum_user_profiles = 261 const int maximum_user_profiles =
269 Shell::Get()->session_controller()->GetMaximumNumberOfLoggedInUsers(); 262 Shell::Get()->session_controller()->GetMaximumNumberOfLoggedInUsers();
270 for (int i = 0; i < maximum_user_profiles; i++) 263 for (int i = 0; i < maximum_user_profiles; i++)
271 AddTrayItem(base::MakeUnique<TrayUser>(this, i)); 264 AddTrayItem(base::MakeUnique<TrayUser>(this, i));
272 265
273 // Crucially, this trailing padding has to be inside the user item(s). 266 // Crucially, this trailing padding has to be inside the user item(s).
274 // Otherwise it could be a main axis margin on the tray's box layout. 267 // Otherwise it could be a main axis margin on the tray's box layout.
275 AddTrayItem(base::MakeUnique<PaddingTrayItem>()); 268 AddTrayItem(base::MakeUnique<PaddingTrayItem>());
276 269
277 tray_accessibility_ = new TrayAccessibility(this); 270 tray_accessibility_ = new TrayAccessibility(this);
278 if (!use_md)
279 tray_date_ = new TrayDate(this);
280 tray_update_ = new TrayUpdate(this); 271 tray_update_ = new TrayUpdate(this);
281 272
282 AddTrayItem(base::MakeUnique<TraySessionLengthLimit>(this)); 273 AddTrayItem(base::MakeUnique<TraySessionLengthLimit>(this));
283 AddTrayItem(base::MakeUnique<TrayEnterprise>(this)); 274 AddTrayItem(base::MakeUnique<TrayEnterprise>(this));
284 AddTrayItem(base::MakeUnique<TraySupervisedUser>(this)); 275 AddTrayItem(base::MakeUnique<TraySupervisedUser>(this));
285 AddTrayItem(base::MakeUnique<TrayIME>(this)); 276 AddTrayItem(base::MakeUnique<TrayIME>(this));
286 AddTrayItem(base::WrapUnique(tray_accessibility_)); 277 AddTrayItem(base::WrapUnique(tray_accessibility_));
287 AddTrayItem(base::MakeUnique<TrayTracing>(this)); 278 AddTrayItem(base::MakeUnique<TrayTracing>(this));
288 AddTrayItem( 279 AddTrayItem(
289 base::MakeUnique<TrayPower>(this, message_center::MessageCenter::Get())); 280 base::MakeUnique<TrayPower>(this, message_center::MessageCenter::Get()));
(...skipping 12 matching lines...) Expand all
302 AddTrayItem(base::WrapUnique(tray_audio_)); 293 AddTrayItem(base::WrapUnique(tray_audio_));
303 AddTrayItem(base::MakeUnique<TrayBrightness>(this)); 294 AddTrayItem(base::MakeUnique<TrayBrightness>(this));
304 AddTrayItem(base::MakeUnique<TrayCapsLock>(this)); 295 AddTrayItem(base::MakeUnique<TrayCapsLock>(this));
305 // TODO(jamescook): Remove this when mus has support for display management 296 // TODO(jamescook): Remove this when mus has support for display management
306 // and we have a DisplayManager equivalent. See http://crbug.com/548429 297 // and we have a DisplayManager equivalent. See http://crbug.com/548429
307 std::unique_ptr<SystemTrayItem> tray_rotation_lock = 298 std::unique_ptr<SystemTrayItem> tray_rotation_lock =
308 delegate->CreateRotationLockTrayItem(this); 299 delegate->CreateRotationLockTrayItem(this);
309 if (tray_rotation_lock) 300 if (tray_rotation_lock)
310 AddTrayItem(std::move(tray_rotation_lock)); 301 AddTrayItem(std::move(tray_rotation_lock));
311 AddTrayItem(base::WrapUnique(tray_update_)); 302 AddTrayItem(base::WrapUnique(tray_update_));
312 if (use_md) { 303 tray_tiles_ = new TrayTiles(this);
313 tray_tiles_ = new TrayTiles(this); 304 AddTrayItem(base::WrapUnique(tray_tiles_));
314 AddTrayItem(base::WrapUnique(tray_tiles_)); 305 tray_system_info_ = new TraySystemInfo(this);
315 tray_system_info_ = new TraySystemInfo(this); 306 AddTrayItem(base::WrapUnique(tray_system_info_));
316 AddTrayItem(base::WrapUnique(tray_system_info_)); 307 // Leading padding.
317 // Leading padding. 308 AddTrayItem(base::MakeUnique<PaddingTrayItem>());
318 AddTrayItem(base::MakeUnique<PaddingTrayItem>());
319 } else {
320 AddTrayItem(base::WrapUnique(tray_date_));
321 }
322 } 309 }
323 310
324 void SystemTray::AddTrayItem(std::unique_ptr<SystemTrayItem> item) { 311 void SystemTray::AddTrayItem(std::unique_ptr<SystemTrayItem> item) {
325 SystemTrayItem* item_ptr = item.get(); 312 SystemTrayItem* item_ptr = item.get();
326 items_.push_back(std::move(item)); 313 items_.push_back(std::move(item));
327 314
328 SystemTrayDelegate* delegate = Shell::Get()->system_tray_delegate(); 315 SystemTrayDelegate* delegate = Shell::Get()->system_tray_delegate();
329 views::View* tray_item = 316 views::View* tray_item =
330 item_ptr->CreateTrayView(delegate->GetUserLoginStatus()); 317 item_ptr->CreateTrayView(delegate->GetUserLoginStatus());
331 item_ptr->UpdateAfterShelfAlignmentChange(shelf_alignment()); 318 item_ptr->UpdateAfterShelfAlignmentChange(shelf_alignment());
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 420
434 bool SystemTray::CloseSystemBubble() const { 421 bool SystemTray::CloseSystemBubble() const {
435 if (!system_bubble_) 422 if (!system_bubble_)
436 return false; 423 return false;
437 CHECK(!activating_); 424 CHECK(!activating_);
438 system_bubble_->bubble()->Close(); 425 system_bubble_->bubble()->Close();
439 return true; 426 return true;
440 } 427 }
441 428
442 views::View* SystemTray::GetHelpButtonView() const { 429 views::View* SystemTray::GetHelpButtonView() const {
443 if (MaterialDesignController::IsSystemTrayMenuMaterial()) 430 return tray_tiles_->GetHelpButtonView();
444 return tray_tiles_->GetHelpButtonView();
445 return tray_date_->GetHelpButtonView();
446 } 431 }
447 432
448 TrayAudio* SystemTray::GetTrayAudio() const { 433 TrayAudio* SystemTray::GetTrayAudio() const {
449 return tray_audio_; 434 return tray_audio_;
450 } 435 }
451 436
452 // Private methods. 437 // Private methods.
453 438
454 bool SystemTray::HasSystemBubbleType(SystemTrayBubble::BubbleType type) { 439 bool SystemTray::HasSystemBubbleType(SystemTrayBubble::BubbleType type) {
455 return system_bubble_.get() && system_bubble_->bubble_type() == type; 440 return system_bubble_.get() && system_bubble_->bubble_type() == type;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 // destruction, leading to subtle errors/crashes such as crbug.com/545166. 485 // destruction, leading to subtle errors/crashes such as crbug.com/545166.
501 DestroySystemBubble(); 486 DestroySystemBubble();
502 487
503 // Remember if the menu is a single property (like e.g. volume) or the 488 // Remember if the menu is a single property (like e.g. volume) or the
504 // full tray menu. Note that in case of the |BUBBLE_USE_EXISTING| case 489 // full tray menu. Note that in case of the |BUBBLE_USE_EXISTING| case
505 // above, |full_system_tray_menu_| does not get changed since the fact that 490 // above, |full_system_tray_menu_| does not get changed since the fact that
506 // the menu is full (or not) doesn't change even if a "single property" 491 // the menu is full (or not) doesn't change even if a "single property"
507 // (like network) replaces most of the menu. 492 // (like network) replaces most of the menu.
508 full_system_tray_menu_ = items.size() > 1; 493 full_system_tray_menu_ = items.size() > 1;
509 494
510 // The menu width is fixed for all languages in material design. 495 TrayBubbleView::InitParams init_params(
511 int menu_width = kTrayMenuMinimumWidthMd; 496 GetAnchorAlignment(), kTrayMenuMinimumWidthMd, kTrayPopupMaxWidth);
512 if (!MaterialDesignController::IsSystemTrayMenuMaterial()) {
513 // The menu width is fixed, and it is a per language setting.
514 menu_width = std::max(
515 kTrayMenuMinimumWidth,
516 Shell::Get()->system_tray_delegate()->GetSystemTrayMenuWidth());
517 }
518
519 TrayBubbleView::InitParams init_params(GetAnchorAlignment(), menu_width,
520 kTrayPopupMaxWidth);
521 // TODO(oshima): Change TrayBubbleView itself. 497 // TODO(oshima): Change TrayBubbleView itself.
522 init_params.can_activate = false; 498 init_params.can_activate = false;
523 if (detailed) { 499 if (detailed) {
524 // This is the case where a volume control or brightness control bubble 500 // This is the case where a volume control or brightness control bubble
525 // is created. 501 // is created.
526 init_params.max_height = default_bubble_height_; 502 init_params.max_height = default_bubble_height_;
527 init_params.bg_color = kBackgroundColor; 503 init_params.bg_color = kBackgroundColor;
528 } else { 504 } else {
529 init_params.bg_color = kHeaderBackgroundColor; 505 init_params.bg_color = kHeaderBackgroundColor;
530 } 506 }
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 views::View* SystemTray::GetTrayItemViewForTest(SystemTrayItem* item) { 641 views::View* SystemTray::GetTrayItemViewForTest(SystemTrayItem* item) {
666 std::map<SystemTrayItem*, views::View*>::iterator it = 642 std::map<SystemTrayItem*, views::View*>::iterator it =
667 tray_item_map_.find(item); 643 tray_item_map_.find(item);
668 return it == tray_item_map_.end() ? NULL : it->second; 644 return it == tray_item_map_.end() ? NULL : it->second;
669 } 645 }
670 646
671 TrayCast* SystemTray::GetTrayCastForTesting() const { 647 TrayCast* SystemTray::GetTrayCastForTesting() const {
672 return tray_cast_; 648 return tray_cast_;
673 } 649 }
674 650
675 TrayDate* SystemTray::GetTrayDateForTesting() const {
676 return tray_date_;
677 }
678
679 TrayNetwork* SystemTray::GetTrayNetworkForTesting() const { 651 TrayNetwork* SystemTray::GetTrayNetworkForTesting() const {
680 return tray_network_; 652 return tray_network_;
681 } 653 }
682 654
683 TraySystemInfo* SystemTray::GetTraySystemInfoForTesting() const { 655 TraySystemInfo* SystemTray::GetTraySystemInfoForTesting() const {
684 return tray_system_info_; 656 return tray_system_info_;
685 } 657 }
686 658
687 TrayTiles* SystemTray::GetTrayTilesForTesting() const { 659 TrayTiles* SystemTray::GetTrayTilesForTesting() const {
688 return tray_tiles_; 660 return tray_tiles_;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 .work_area() 749 .work_area()
778 .height(); 750 .height();
779 if (work_area_height > 0) { 751 if (work_area_height > 0) {
780 UMA_HISTOGRAM_CUSTOM_COUNTS( 752 UMA_HISTOGRAM_CUSTOM_COUNTS(
781 "Ash.SystemMenu.PercentageOfWorkAreaHeightCoveredByMenu", 753 "Ash.SystemMenu.PercentageOfWorkAreaHeightCoveredByMenu",
782 100 * bubble_view->height() / work_area_height, 1, 300, 100); 754 100 * bubble_view->height() / work_area_height, 1, 300, 100);
783 } 755 }
784 } 756 }
785 757
786 } // namespace ash 758 } // namespace ash
OLDNEW
« no previous file with comments | « ash/common/system/tray/system_tray.h ('k') | ash/common/system/tray/system_tray_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698