15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 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) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ash/system/chromeos/supervised/tray_supervised_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" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ash/system/tray/system_tray_delegate.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/system/tray/system_tray_notifier.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ash/system/tray/tray_notification_view.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/system/user/login_status.h" 14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/callback.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/logging.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "grit/ash_resources.h" 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 18ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ui/message_center/message_center.h" 19ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ui/message_center/notification.h" 20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ui/message_center/notification_delegate.h" 21ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 22ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochusing message_center::Notification; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace ash { 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const char TraySupervisedUser::kNotificationId[] = 27ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "chrome://user/locally-managed"; 28ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TraySupervisedUser::TraySupervisedUser(SystemTray* system_tray) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : SystemTrayItem(system_tray), 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) tray_view_(NULL), 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci status_(ash::user::LOGGED_IN_NONE), 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci is_user_supervised_(false) { 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TraySupervisedUser::~TraySupervisedUser() { 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void TraySupervisedUser::UpdateMessage() { 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 message = Shell::GetInstance()->system_tray_delegate()-> 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetSupervisedUserMessage(); 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (tray_view_) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tray_view_->SetMessage(message); 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (message_center::MessageCenter::Get()->FindVisibleNotificationById( 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kNotificationId)) 46ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateOrUpdateNotification(message); 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)views::View* TraySupervisedUser::CreateDefaultView( 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user::LoginStatus status) { 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(tray_view_ == NULL); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SystemTrayDelegate* delegate = Shell::GetInstance()->system_tray_delegate(); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!delegate->IsUserSupervised()) 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return NULL; 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tray_view_ = new LabelTrayView(this, IDR_AURA_UBER_TRAY_SUPERVISED_USER); 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UpdateMessage(); 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return tray_view_; 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void TraySupervisedUser::DestroyDefaultView() { 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tray_view_ = NULL; 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void TraySupervisedUser::OnViewClicked(views::View* sender) { 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Shell::GetInstance()->system_tray_delegate()->ShowSupervisedUserInfo(); 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void TraySupervisedUser::UpdateAfterLoginStatusChange( 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) user::LoginStatus status) { 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SystemTrayDelegate* delegate = Shell::GetInstance()->system_tray_delegate(); 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool is_user_supervised = delegate->IsUserSupervised(); 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (status == status_ && is_user_supervised == is_user_supervised_) 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (is_user_supervised && 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch status_ != ash::user::LOGGED_IN_LOCKED) { 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CreateOrUpdateNotification(delegate->GetSupervisedUserMessage()); 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch status_ = status; 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci is_user_supervised_ = is_user_supervised; 8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void TraySupervisedUser::CreateOrUpdateNotification( 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const base::string16& new_message) { 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 88a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<Notification> notification( 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) message_center::Notification::CreateSystemNotification( 90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) kNotificationId, 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16() /* no title */, 92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) new_message, 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bundle.GetImageNamed(IDR_AURA_UBER_TRAY_SUPERVISED_USER), 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) system_notifier::kNotifierSupervisedUser, 95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Closure() /* null callback */)); 963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) message_center::MessageCenter::Get()->AddNotification(notification.Pass()); 973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 99c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} // namespace ash 100