1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/system/chromeos/managed/tray_locally_managed_user.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ash/shell.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/system/chromeos/label_tray_view.h" 9424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "ash/system/system_notifier.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/system/tray/system_tray_notifier.h" 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ash/system/tray/tray_notification_view.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/system/user/login_status.h" 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/callback.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/logging.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "grit/ash_resources.h" 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 17ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ui/message_center/message_center.h" 18ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ui/message_center/notification.h" 19ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ui/message_center/notification_delegate.h" 20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 21ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochusing message_center::Notification; 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace ash { 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const char TrayLocallyManagedUser::kNotificationId[] = 26ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "chrome://user/locally-managed"; 27ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TrayLocallyManagedUser::TrayLocallyManagedUser(SystemTray* system_tray) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : SystemTrayItem(system_tray), 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) tray_view_(NULL), 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch status_(ash::user::LOGGED_IN_NONE) { 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TrayLocallyManagedUser::~TrayLocallyManagedUser() { 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TrayLocallyManagedUser::UpdateMessage() { 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 message = Shell::GetInstance()->system_tray_delegate()-> 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetLocallyManagedUserMessage(); 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (tray_view_) 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tray_view_->SetMessage(message); 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (message_center::MessageCenter::Get()->FindVisibleNotificationById( 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kNotificationId)) 44ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateOrUpdateNotification(message); 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)views::View* TrayLocallyManagedUser::CreateDefaultView( 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user::LoginStatus status) { 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(tray_view_ == NULL); 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (status != ash::user::LOGGED_IN_LOCALLY_MANAGED) 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return NULL; 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) tray_view_ = new LabelTrayView(this, IDR_AURA_UBER_TRAY_MANAGED_USER); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UpdateMessage(); 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return tray_view_; 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TrayLocallyManagedUser::DestroyDefaultView() { 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tray_view_ = NULL; 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TrayLocallyManagedUser::OnViewClicked(views::View* sender) { 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Shell::GetInstance()->system_tray_delegate()->ShowLocallyManagedUserInfo(); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void TrayLocallyManagedUser::UpdateAfterLoginStatusChange( 6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) user::LoginStatus status) { 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (status == status_) 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (status == ash::user::LOGGED_IN_LOCALLY_MANAGED && 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch status_ != ash::user::LOGGED_IN_LOCKED) { 72ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SystemTrayDelegate* delegate = Shell::GetInstance()->system_tray_delegate(); 73ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateOrUpdateNotification(delegate->GetLocallyManagedUserMessage()); 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch status_ = status; 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void TrayLocallyManagedUser::CreateOrUpdateNotification( 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const base::string16& new_message) { 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<Notification> notification( 82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) message_center::Notification::CreateSystemNotification( 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) kNotificationId, 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16() /* no title */, 85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) new_message, 86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bundle.GetImageNamed(IDR_AURA_UBER_TRAY_MANAGED_USER), 87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) system_notifier::kNotifierLocallyManagedUser, 88a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Closure() /* null callback */)); 893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) message_center::MessageCenter::Get()->AddNotification(notification.Pass()); 903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 92c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} // namespace ash 93