tray_display.cc revision 868fa2fe829687343ffae624259930155e16dbd8
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/chromeos/tray_display.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/display/display_controller.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/display/display_manager.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/fixed_sized_image_view.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/system_tray.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/system_tray_delegate.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/tray_constants.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ash/system/tray/tray_notification_view.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/chromeos/chromeos_version.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/ash_resources.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/ash_strings.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/label.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/box_layout.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal { 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TrayDisplayMode GetCurrentTrayDisplayMode() { 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (display_manager->GetNumDisplays() > 1) 31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return TRAY_DISPLAY_EXTENDED; 32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (display_manager->IsMirrored()) 34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return TRAY_DISPLAY_MIRRORED; 35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int64 first_id = display_manager->first_display_id(); 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (display_manager->HasInternalDisplay() && 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) !display_manager->IsInternalDisplayId(first_id)) { 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return TRAY_DISPLAY_DOCKED; 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return TRAY_DISPLAY_SINGLE; 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Returns the name of the currently connected external display. 46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)base::string16 GetExternalDisplayName() { 47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int64 external_id = display_manager->mirrored_display().id(); 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (external_id == gfx::Display::kInvalidDisplayID) { 51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int64 internal_display_id = gfx::Display::InternalDisplayId(); 52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) for (size_t i = 0; i < display_manager->GetNumDisplays(); ++i) { 53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int64 id = display_manager->GetDisplayAt(i)->id(); 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (id != internal_display_id) { 55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) external_id = id; 56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) break; 57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (external_id != gfx::Display::kInvalidDisplayID) 61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return UTF8ToUTF16(display_manager->GetDisplayNameForId(external_id)); 62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_UNKNOWN_DISPLAY_NAME); 63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class DisplayViewBase { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DisplayViewBase(user::LoginStatus login_status) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : login_status_(login_status) { 69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) label_ = new views::Label(); 70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) label_->SetMultiLine(true); 71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 73868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual ~DisplayViewBase() { 75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 77868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) protected: 78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void OpenSettings() { 79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (login_status_ == ash::user::LOGGED_IN_USER || 80868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) login_status_ == ash::user::LOGGED_IN_OWNER || 81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) login_status_ == ash::user::LOGGED_IN_GUEST) { 82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ash::Shell::GetInstance()->system_tray_delegate()->ShowDisplaySettings(); 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool UpdateLabelText() { 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) switch (GetCurrentTrayDisplayMode()) { 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case TRAY_DISPLAY_SINGLE: 89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // TODO(oshima|mukai): Support single display mode for overscan 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // alignment. 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return false; 92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case TRAY_DISPLAY_EXTENDED: 93868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (Shell::GetInstance()->display_manager()->HasInternalDisplay()) { 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) label_->SetText(l10n_util::GetStringFUTF16( 95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetExternalDisplayName())); 96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } else { 97868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) label_->SetText(l10n_util::GetStringUTF16( 98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL)); 99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) break; 101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case TRAY_DISPLAY_MIRRORED: 102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (Shell::GetInstance()->display_manager()->HasInternalDisplay()) { 103868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) label_->SetText(l10n_util::GetStringFUTF16( 104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetExternalDisplayName())); 105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } else { 106868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) label_->SetText(l10n_util::GetStringUTF16( 107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING_NO_INTERNAL)); 108868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 109868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) break; 110868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case TRAY_DISPLAY_DOCKED: 111868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) label_->SetText(l10n_util::GetStringUTF16( 112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) IDS_ASH_STATUS_TRAY_DISPLAY_DOCKED)); 113868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) break; 114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return true; 116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 118868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) views::Label* label() { return label_; } 119868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 120868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private: 121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) user::LoginStatus login_status_; 122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) views::Label* label_; 123868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 124868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DisplayViewBase); 125868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 126868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 127868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace 128868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 129868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class DisplayView : public DisplayViewBase, 130868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public ash::internal::ActionableView { 131868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public: 132868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) explicit DisplayView(user::LoginStatus login_status) 133868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) : DisplayViewBase(login_status) { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLayoutManager(new 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::BoxLayout(views::BoxLayout::kHorizontal, 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ash::kTrayPopupPaddingHorizontal, 0, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ash::kTrayPopupPaddingBetweenItems)); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) image_ = 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ash::internal::FixedSizedImageView(0, ash::kTrayPopupItemHeight); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) image_->SetImage( 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bundle.GetImageNamed(IDR_AURA_UBER_TRAY_DISPLAY).ToImageSkia()); 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddChildView(image_); 145868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AddChildView(label()); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Update(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DisplayView() {} 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Update() { 152868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetVisible(UpdateLabelText()); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from ActionableView. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool PerformAction(const ui::Event& event) OVERRIDE { 158868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) OpenSettings(); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE { 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int label_max_width = bounds().width() - kTrayPopupPaddingHorizontal * 2 - 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kTrayPopupPaddingBetweenItems - image_->GetPreferredSize().width(); 165868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) label()->SizeToFit(label_max_width); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PreferredSizeChanged(); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::ImageView* image_; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DisplayView); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 174868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class DisplayNotificationView : public DisplayViewBase, 175868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public TrayNotificationView { 176868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public: 177868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DisplayNotificationView(user::LoginStatus login_status, 178868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TrayDisplay* tray_item) 179868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) : DisplayViewBase(login_status), 180868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TrayNotificationView(tray_item, IDR_AURA_UBER_TRAY_DISPLAY) { 181868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) InitView(label()); 182868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) StartAutoCloseTimer(kTrayPopupAutoCloseDelayForTextInSeconds); 183868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Update(); 184868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 185868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 186868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual ~DisplayNotificationView() {} 187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void Update() { 189868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (UpdateLabelText()) 190868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) RestartAutoCloseTimer(); 191868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) else 192868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) owner()->HideNotificationView(); 193868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 194868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 195868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Overridden from TrayNotificationView: 196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void OnClickAction() OVERRIDE { 197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) OpenSettings(); 198868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 199868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 200868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private: 201868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DisplayNotificationView); 202868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 203868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrayDisplay::TrayDisplay(SystemTray* system_tray) 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : SystemTrayItem(system_tray), 206868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) default_(NULL), 207868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) notification_(NULL), 208868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) current_mode_(GetCurrentTrayDisplayMode()) { 209868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Shell::GetInstance()->display_controller()->AddObserver(this); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TrayDisplay::~TrayDisplay() { 213868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Shell::GetInstance()->display_controller()->RemoveObserver(this); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::View* TrayDisplay::CreateDefaultView(user::LoginStatus status) { 217868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(default_ == NULL); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_ = new DisplayView(status); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return default_; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)views::View* TrayDisplay::CreateNotificationView(user::LoginStatus status) { 223868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(notification_ == NULL); 224868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) notification_ = new DisplayNotificationView(status, this); 225868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return notification_; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 228868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void TrayDisplay::DestroyDefaultView() { 229868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) default_ = NULL; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 232868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void TrayDisplay::DestroyNotificationView() { 233868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) notification_ = NULL; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 236868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)bool TrayDisplay::ShouldShowLauncher() const { 237868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return false; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 240868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void TrayDisplay::OnDisplayConfigurationChanged() { 241868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TrayDisplayMode new_mode = GetCurrentTrayDisplayMode(); 242868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (current_mode_ != new_mode && new_mode != TRAY_DISPLAY_SINGLE) { 243868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (notification_) 244868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) notification_->Update(); 245868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) else 246868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ShowNotificationView(); 247868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 248868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) current_mode_ = new_mode; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace internal 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ash 253