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