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 27 DisplayErrorObserver::DisplayErrorObserver() { 28 } 29 30 DisplayErrorObserver::~DisplayErrorObserver() { 31 } 32 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 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