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