Home | History | Annotate | Download | only in display
      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