1 // Copyright 2013 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/display/display_error_observer_chromeos.h"
6
7 #include "ash/system/system_notifier.h"
8 #include "grit/ash_resources.h"
9 #include "grit/ash_strings.h"
10 #include "ui/base/l10n/l10n_util.h"
11 #include "ui/base/resource/resource_bundle.h"
12 #include "ui/message_center/message_center.h"
13 #include "ui/message_center/notification.h"
14 #include "ui/message_center/notification_delegate.h"
15 #include "ui/message_center/notification_list.h"
16
17 using message_center::Notification;
18
19 namespace ash {
20 namespace internal {
21 namespace {
22
23 const char kDisplayErrorNotificationId[] = "chrome://settings/display/error";
24
25 } // namespace
26
DisplayErrorObserver()27 DisplayErrorObserver::DisplayErrorObserver() {
28 }
29
~DisplayErrorObserver()30 DisplayErrorObserver::~DisplayErrorObserver() {
31 }
32
OnDisplayModeChangeFailed(chromeos::OutputState new_state)33 void DisplayErrorObserver::OnDisplayModeChangeFailed(
34 chromeos::OutputState new_state) {
35 // Always remove the notification to make sure the notification appears
36 // as a popup in any situation.
37 message_center::MessageCenter::Get()->RemoveNotification(
38 kDisplayErrorNotificationId, false /* by_user */);
39
40 int message_id = (new_state == chromeos::STATE_DUAL_MIRROR) ?
41 IDS_ASH_DISPLAY_FAILURE_ON_MIRRORING :
42 IDS_ASH_DISPLAY_FAILURE_ON_NON_MIRRORING;
43
44 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
45 scoped_ptr<Notification> notification(new Notification(
46 message_center::NOTIFICATION_TYPE_SIMPLE,
47 kDisplayErrorNotificationId,
48 l10n_util::GetStringUTF16(message_id),
49 base::string16(), // message
50 bundle.GetImageNamed(IDR_AURA_UBER_TRAY_DISPLAY),
51 base::string16(), // display_source
52 message_center::NotifierId(
53 message_center::NotifierId::SYSTEM_COMPONENT,
54 system_notifier::kNotifierDisplayError),
55 message_center::RichNotificationData(),
56 NULL));
57 message_center::MessageCenter::Get()->AddNotification(notification.Pass());
58 }
59
GetTitleOfDisplayErrorNotificationForTest()60 string16 DisplayErrorObserver::GetTitleOfDisplayErrorNotificationForTest() {
61 message_center::NotificationList::Notifications notifications =
62 message_center::MessageCenter::Get()->GetVisibleNotifications();
63 for (message_center::NotificationList::Notifications::const_iterator iter =
64 notifications.begin(); iter != notifications.end(); ++iter) {
65 if ((*iter)->id() == kDisplayErrorNotificationId)
66 return (*iter)->title();
67 }
68
69 return base::string16();
70 }
71
72 } // namespace internal
73 } // namespace ash
74