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