display_error_observer_chromeos.cc revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
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
17using message_center::Notification;
18
19namespace ash {
20namespace internal {
21namespace {
22
23const char kDisplayErrorNotificationId[] = "chrome://settings/display/error";
24
25}  // namespace
26
27DisplayErrorObserver::DisplayErrorObserver() {
28}
29
30DisplayErrorObserver::~DisplayErrorObserver() {
31}
32
33void 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(system_notifier::NOTIFIER_DISPLAY_ERROR),
53      message_center::RichNotificationData(),
54      NULL));
55  message_center::MessageCenter::Get()->AddNotification(notification.Pass());
56}
57
58string16 DisplayErrorObserver::GetTitleOfDisplayErrorNotificationForTest() {
59  message_center::NotificationList::Notifications notifications =
60      message_center::MessageCenter::Get()->GetVisibleNotifications();
61  for (message_center::NotificationList::Notifications::const_iterator iter =
62           notifications.begin(); iter != notifications.end(); ++iter) {
63    if ((*iter)->id() == kDisplayErrorNotificationId)
64      return (*iter)->title();
65  }
66
67  return base::string16();
68}
69
70}  // namespace internal
71}  // namespace ash
72