• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "ash/system/chromeos/managed/tray_locally_managed_user.h"
6 
7 #include "ash/shell.h"
8 #include "ash/system/chromeos/label_tray_view.h"
9 #include "ash/system/system_notifier.h"
10 #include "ash/system/tray/system_tray_notifier.h"
11 #include "ash/system/tray/tray_notification_view.h"
12 #include "ash/system/user/login_status.h"
13 #include "base/callback.h"
14 #include "base/logging.h"
15 #include "grit/ash_resources.h"
16 #include "ui/base/resource/resource_bundle.h"
17 #include "ui/message_center/message_center.h"
18 #include "ui/message_center/notification.h"
19 #include "ui/message_center/notification_delegate.h"
20 
21 using message_center::Notification;
22 
23 namespace ash {
24 
25 const char TrayLocallyManagedUser::kNotificationId[] =
26     "chrome://user/locally-managed";
27 
TrayLocallyManagedUser(SystemTray * system_tray)28 TrayLocallyManagedUser::TrayLocallyManagedUser(SystemTray* system_tray)
29     : SystemTrayItem(system_tray),
30       tray_view_(NULL),
31       status_(ash::user::LOGGED_IN_NONE) {
32 }
33 
~TrayLocallyManagedUser()34 TrayLocallyManagedUser::~TrayLocallyManagedUser() {
35 }
36 
UpdateMessage()37 void TrayLocallyManagedUser::UpdateMessage() {
38   base::string16 message = Shell::GetInstance()->system_tray_delegate()->
39       GetLocallyManagedUserMessage();
40   if (tray_view_)
41     tray_view_->SetMessage(message);
42   if (message_center::MessageCenter::Get()->FindVisibleNotificationById(
43       kNotificationId))
44     CreateOrUpdateNotification(message);
45 }
46 
CreateDefaultView(user::LoginStatus status)47 views::View* TrayLocallyManagedUser::CreateDefaultView(
48     user::LoginStatus status) {
49   CHECK(tray_view_ == NULL);
50   if (status != ash::user::LOGGED_IN_LOCALLY_MANAGED)
51     return NULL;
52 
53   tray_view_ = new LabelTrayView(this, IDR_AURA_UBER_TRAY_MANAGED_USER);
54   UpdateMessage();
55   return tray_view_;
56 }
57 
DestroyDefaultView()58 void TrayLocallyManagedUser::DestroyDefaultView() {
59   tray_view_ = NULL;
60 }
61 
OnViewClicked(views::View * sender)62 void TrayLocallyManagedUser::OnViewClicked(views::View* sender) {
63   Shell::GetInstance()->system_tray_delegate()->ShowLocallyManagedUserInfo();
64 }
65 
UpdateAfterLoginStatusChange(user::LoginStatus status)66 void TrayLocallyManagedUser::UpdateAfterLoginStatusChange(
67     user::LoginStatus status) {
68   if (status == status_)
69     return;
70   if (status == ash::user::LOGGED_IN_LOCALLY_MANAGED &&
71       status_ != ash::user::LOGGED_IN_LOCKED) {
72     SystemTrayDelegate* delegate = Shell::GetInstance()->system_tray_delegate();
73     CreateOrUpdateNotification(delegate->GetLocallyManagedUserMessage());
74   }
75   status_ = status;
76 }
77 
CreateOrUpdateNotification(const base::string16 & new_message)78 void TrayLocallyManagedUser::CreateOrUpdateNotification(
79     const base::string16& new_message) {
80   ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
81   scoped_ptr<Notification> notification(
82       message_center::Notification::CreateSystemNotification(
83           kNotificationId,
84           base::string16() /* no title */,
85           new_message,
86           bundle.GetImageNamed(IDR_AURA_UBER_TRAY_MANAGED_USER),
87           system_notifier::kNotifierLocallyManagedUser,
88           base::Closure() /* null callback */));
89   message_center::MessageCenter::Get()->AddNotification(notification.Pass());
90 }
91 
92 }  // namespace ash
93