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.
5 #include "ash/system/chromeos/managed/tray_locally_managed_user.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"
21 using message_center::Notification
;
25 const char TrayLocallyManagedUser::kNotificationId
[] =
26 "chrome://user/locally-managed";
28 TrayLocallyManagedUser::TrayLocallyManagedUser(SystemTray
* system_tray
)
29 : SystemTrayItem(system_tray
),
31 status_(ash::user::LOGGED_IN_NONE
) {
34 TrayLocallyManagedUser::~TrayLocallyManagedUser() {
37 void TrayLocallyManagedUser::UpdateMessage() {
38 base::string16 message
= Shell::GetInstance()->system_tray_delegate()->
39 GetLocallyManagedUserMessage();
41 tray_view_
->SetMessage(message
);
42 if (message_center::MessageCenter::Get()->HasNotification(kNotificationId
))
43 CreateOrUpdateNotification(message
);
46 views::View
* TrayLocallyManagedUser::CreateDefaultView(
47 user::LoginStatus status
) {
48 CHECK(tray_view_
== NULL
);
49 if (status
!= ash::user::LOGGED_IN_LOCALLY_MANAGED
)
52 tray_view_
= new LabelTrayView(this, IDR_AURA_UBER_TRAY_MANAGED_USER
);
57 void TrayLocallyManagedUser::DestroyDefaultView() {
61 void TrayLocallyManagedUser::OnViewClicked(views::View
* sender
) {
62 Shell::GetInstance()->system_tray_delegate()->ShowLocallyManagedUserInfo();
65 void TrayLocallyManagedUser::UpdateAfterLoginStatusChange(
66 user::LoginStatus status
) {
67 if (status
== status_
)
69 if (status
== ash::user::LOGGED_IN_LOCALLY_MANAGED
&&
70 status_
!= ash::user::LOGGED_IN_LOCKED
) {
71 SystemTrayDelegate
* delegate
= Shell::GetInstance()->system_tray_delegate();
72 CreateOrUpdateNotification(delegate
->GetLocallyManagedUserMessage());
77 void TrayLocallyManagedUser::CreateOrUpdateNotification(
78 const base::string16
& new_message
) {
79 ui::ResourceBundle
& bundle
= ui::ResourceBundle::GetSharedInstance();
80 scoped_ptr
<Notification
> notification(
81 message_center::Notification::CreateSystemNotification(
83 base::string16() /* no title */,
85 bundle
.GetImageNamed(IDR_AURA_UBER_TRAY_MANAGED_USER
),
86 system_notifier::kNotifierLocallyManagedUser
,
87 base::Closure() /* null callback */));
88 message_center::MessageCenter::Get()->AddNotification(notification
.Pass());