tray_enterprise.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/enterprise/tray_enterprise.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/hover_highlight_view.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/system_tray_notifier.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/tray_constants.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/tray_views.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/user/login_status.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/ash_resources.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/font.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/layout/fill_layout.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ash {
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace internal {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class EnterpriseDefaultView : public views::View {
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit EnterpriseDefaultView(ViewClickListener* click_listener);
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~EnterpriseDefaultView();
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetMessage(const string16& message);
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  views::View* CreateChildView(const string16& message) const;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ViewClickListener* click_listener_;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  string16 message_;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(EnterpriseDefaultView);
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)EnterpriseDefaultView::EnterpriseDefaultView(
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ViewClickListener* click_listener)
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : click_listener_(click_listener) {
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetLayoutManager(new views::FillLayout());
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetVisible(false);
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)EnterpriseDefaultView::~EnterpriseDefaultView() {
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void EnterpriseDefaultView::SetMessage(const string16& message) {
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (message_ == message)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  message_ = message;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveAllChildViews(true);
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!message_.empty()) {
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    AddChildView(CreateChildView(message_));
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    SetVisible(true);
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } else {
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    SetVisible(false);
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)views::View* EnterpriseDefaultView::CreateChildView(
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const string16& message) const {
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const gfx::ImageSkia* icon =
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      rb.GetImageSkiaNamed(IDR_AURA_UBER_TRAY_ENTERPRISE_DARK);
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  HoverHighlightView* child = new HoverHighlightView(click_listener_);
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  child->AddIconAndLabel(*icon, message, gfx::Font::NORMAL);
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  child->text_label()->SetMultiLine(true);
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  child->text_label()->SetAllowCharacterBreak(true);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  child->set_border(views::Border::CreateEmptyBorder(0,
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      kTrayPopupPaddingHorizontal, 0, kTrayPopupPaddingHorizontal));
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  child->SetExpandable(true);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  child->SetVisible(true);
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return child;
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrayEnterprise::TrayEnterprise(SystemTray* system_tray)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : SystemTrayItem(system_tray),
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      default_view_(NULL) {
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Shell::GetInstance()->system_tray_notifier()->
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      AddEnterpriseDomainObserver(this);
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrayEnterprise::~TrayEnterprise() {
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Shell::GetInstance()->system_tray_notifier()->
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      RemoveEnterpriseDomainObserver(this);
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TrayEnterprise::UpdateEnterpriseMessage() {
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  string16 message = Shell::GetInstance()->system_tray_delegate()->
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GetEnterpriseMessage();
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (default_view_)
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    default_view_->SetMessage(message);
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)views::View* TrayEnterprise::CreateDefaultView(user::LoginStatus status) {
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CHECK(default_view_ == NULL);
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // For public accounts, enterprise ownership is indicated in the user details
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // instead.
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (status == ash::user::LOGGED_IN_PUBLIC)
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return NULL;
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  default_view_ = new EnterpriseDefaultView(this);
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UpdateEnterpriseMessage();
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return default_view_;
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TrayEnterprise::DestroyDefaultView() {
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  default_view_ = NULL;
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TrayEnterprise::OnEnterpriseDomainChanged() {
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UpdateEnterpriseMessage();
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TrayEnterprise::OnViewClicked(views::View* sender) {
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Shell::GetInstance()->system_tray_delegate()->ShowEnterpriseInfo();
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace internal
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace ash
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
120