tray_enterprise.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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 3// found in the LICENSE file. 4 5#include "ash/system/chromeos/enterprise/tray_enterprise.h" 6 7#include "ash/system/tray/hover_highlight_view.h" 8#include "ash/system/tray/system_tray_notifier.h" 9#include "ash/system/tray/tray_constants.h" 10#include "ash/system/tray/tray_views.h" 11#include "ash/system/user/login_status.h" 12#include "base/logging.h" 13#include "grit/ash_resources.h" 14#include "ui/base/resource/resource_bundle.h" 15#include "ui/gfx/font.h" 16#include "ui/views/layout/fill_layout.h" 17 18namespace ash { 19namespace internal { 20 21class EnterpriseDefaultView : public views::View { 22 public: 23 explicit EnterpriseDefaultView(ViewClickListener* click_listener); 24 virtual ~EnterpriseDefaultView(); 25 void SetMessage(const string16& message); 26 private: 27 views::View* CreateChildView(const string16& message) const; 28 29 ViewClickListener* click_listener_; 30 string16 message_; 31 32 DISALLOW_COPY_AND_ASSIGN(EnterpriseDefaultView); 33}; 34 35EnterpriseDefaultView::EnterpriseDefaultView( 36 ViewClickListener* click_listener) 37 : click_listener_(click_listener) { 38 SetLayoutManager(new views::FillLayout()); 39 SetVisible(false); 40} 41 42EnterpriseDefaultView::~EnterpriseDefaultView() { 43} 44 45void EnterpriseDefaultView::SetMessage(const string16& message) { 46 if (message_ == message) 47 return; 48 49 message_ = message; 50 RemoveAllChildViews(true); 51 if (!message_.empty()) { 52 AddChildView(CreateChildView(message_)); 53 SetVisible(true); 54 } else { 55 SetVisible(false); 56 } 57} 58 59views::View* EnterpriseDefaultView::CreateChildView( 60 const string16& message) const { 61 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 62 const gfx::ImageSkia* icon = 63 rb.GetImageSkiaNamed(IDR_AURA_UBER_TRAY_ENTERPRISE_DARK); 64 HoverHighlightView* child = new HoverHighlightView(click_listener_); 65 child->AddIconAndLabel(*icon, message, gfx::Font::NORMAL); 66 child->text_label()->SetMultiLine(true); 67 child->text_label()->SetAllowCharacterBreak(true); 68 child->set_border(views::Border::CreateEmptyBorder(0, 69 kTrayPopupPaddingHorizontal, 0, kTrayPopupPaddingHorizontal)); 70 child->SetExpandable(true); 71 child->SetVisible(true); 72 return child; 73} 74 75TrayEnterprise::TrayEnterprise(SystemTray* system_tray) 76 : SystemTrayItem(system_tray), 77 default_view_(NULL) { 78 Shell::GetInstance()->system_tray_notifier()-> 79 AddEnterpriseDomainObserver(this); 80} 81 82TrayEnterprise::~TrayEnterprise() { 83 Shell::GetInstance()->system_tray_notifier()-> 84 RemoveEnterpriseDomainObserver(this); 85} 86 87void TrayEnterprise::UpdateEnterpriseMessage() { 88 string16 message = Shell::GetInstance()->system_tray_delegate()-> 89 GetEnterpriseMessage(); 90 if (default_view_) 91 default_view_->SetMessage(message); 92} 93 94views::View* TrayEnterprise::CreateDefaultView(user::LoginStatus status) { 95 CHECK(default_view_ == NULL); 96 // For public accounts, enterprise ownership is indicated in the user details 97 // instead. 98 if (status == ash::user::LOGGED_IN_PUBLIC) 99 return NULL; 100 default_view_ = new EnterpriseDefaultView(this); 101 UpdateEnterpriseMessage(); 102 return default_view_; 103} 104 105void TrayEnterprise::DestroyDefaultView() { 106 default_view_ = NULL; 107} 108 109void TrayEnterprise::OnEnterpriseDomainChanged() { 110 UpdateEnterpriseMessage(); 111} 112 113void TrayEnterprise::OnViewClicked(views::View* sender) { 114 Shell::GetInstance()->system_tray_delegate()->ShowEnterpriseInfo(); 115} 116 117} // namespace internal 118} // namespace ash 119 120