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.
5 #include "ash/system/chromeos/enterprise/tray_enterprise.h"
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/controls/label.h"
17 #include "ui/views/layout/fill_layout.h"
22 class EnterpriseDefaultView
: public views::View
{
24 explicit EnterpriseDefaultView(ViewClickListener
* click_listener
);
25 virtual ~EnterpriseDefaultView();
26 void SetMessage(const string16
& message
);
28 views::View
* CreateChildView(const string16
& message
) const;
30 ViewClickListener
* click_listener_
;
33 DISALLOW_COPY_AND_ASSIGN(EnterpriseDefaultView
);
36 EnterpriseDefaultView::EnterpriseDefaultView(
37 ViewClickListener
* click_listener
)
38 : click_listener_(click_listener
) {
39 SetLayoutManager(new views::FillLayout());
43 EnterpriseDefaultView::~EnterpriseDefaultView() {
46 void EnterpriseDefaultView::SetMessage(const string16
& message
) {
47 if (message_
== message
)
51 RemoveAllChildViews(true);
52 if (!message_
.empty()) {
53 AddChildView(CreateChildView(message_
));
60 views::View
* EnterpriseDefaultView::CreateChildView(
61 const string16
& message
) const {
62 ui::ResourceBundle
& rb
= ui::ResourceBundle::GetSharedInstance();
63 const gfx::ImageSkia
* icon
=
64 rb
.GetImageSkiaNamed(IDR_AURA_UBER_TRAY_ENTERPRISE_DARK
);
65 HoverHighlightView
* child
= new HoverHighlightView(click_listener_
);
66 child
->AddIconAndLabel(*icon
, message
, gfx::Font::NORMAL
);
67 child
->text_label()->SetMultiLine(true);
68 child
->text_label()->SetAllowCharacterBreak(true);
69 child
->set_border(views::Border::CreateEmptyBorder(0,
70 kTrayPopupPaddingHorizontal
, 0, kTrayPopupPaddingHorizontal
));
71 child
->SetExpandable(true);
72 child
->SetVisible(true);
76 TrayEnterprise::TrayEnterprise(SystemTray
* system_tray
)
77 : SystemTrayItem(system_tray
),
79 Shell::GetInstance()->system_tray_notifier()->
80 AddEnterpriseDomainObserver(this);
83 TrayEnterprise::~TrayEnterprise() {
84 Shell::GetInstance()->system_tray_notifier()->
85 RemoveEnterpriseDomainObserver(this);
88 void TrayEnterprise::UpdateEnterpriseMessage() {
89 string16 message
= Shell::GetInstance()->system_tray_delegate()->
90 GetEnterpriseMessage();
92 default_view_
->SetMessage(message
);
95 views::View
* TrayEnterprise::CreateDefaultView(user::LoginStatus status
) {
96 CHECK(default_view_
== NULL
);
97 // For public accounts, enterprise ownership is indicated in the user details
99 if (status
== ash::user::LOGGED_IN_PUBLIC
)
101 default_view_
= new EnterpriseDefaultView(this);
102 UpdateEnterpriseMessage();
103 return default_view_
;
106 void TrayEnterprise::DestroyDefaultView() {
107 default_view_
= NULL
;
110 void TrayEnterprise::OnEnterpriseDomainChanged() {
111 UpdateEnterpriseMessage();
114 void TrayEnterprise::OnViewClicked(views::View
* sender
) {
115 Shell::GetInstance()->system_tray_delegate()->ShowEnterpriseInfo();
118 } // namespace internal