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.
5 #include "ash/display/display_error_observer_chromeos.h"
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"
17 using message_center::Notification
;
22 const char kDisplayErrorNotificationId
[] = "chrome://settings/display/error";
26 DisplayErrorObserver::DisplayErrorObserver() {
29 DisplayErrorObserver::~DisplayErrorObserver() {
32 void DisplayErrorObserver::OnDisplayModeChangeFailed(
33 ui::MultipleDisplayState new_state
) {
34 // Always remove the notification to make sure the notification appears
35 // as a popup in any situation.
36 message_center::MessageCenter::Get()->RemoveNotification(
37 kDisplayErrorNotificationId
, false /* by_user */);
39 int message_id
= (new_state
== ui::MULTIPLE_DISPLAY_STATE_DUAL_MIRROR
) ?
40 IDS_ASH_DISPLAY_FAILURE_ON_MIRRORING
:
41 IDS_ASH_DISPLAY_FAILURE_ON_NON_MIRRORING
;
43 ui::ResourceBundle
& bundle
= ui::ResourceBundle::GetSharedInstance();
44 scoped_ptr
<Notification
> notification(new Notification(
45 message_center::NOTIFICATION_TYPE_SIMPLE
,
46 kDisplayErrorNotificationId
,
47 l10n_util::GetStringUTF16(message_id
),
48 base::string16(), // message
49 bundle
.GetImageNamed(IDR_AURA_NOTIFICATION_DISPLAY
),
50 base::string16(), // display_source
51 message_center::NotifierId(
52 message_center::NotifierId::SYSTEM_COMPONENT
,
53 system_notifier::kNotifierDisplayError
),
54 message_center::RichNotificationData(),
56 message_center::MessageCenter::Get()->AddNotification(notification
.Pass());
59 base::string16
DisplayErrorObserver::
60 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();
69 return base::string16();