message_center_tray.cc revision 424c4d7b64af9d0d8fd9624f381f469654d5e3d2
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/message_center_tray.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/observer_list.h"
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/ui_strings.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/message_center/message_center.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/message_center_tray_delegate.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace message_center {
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MessageCenterTray::MessageCenterTray(
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    MessageCenterTrayDelegate* delegate,
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    message_center::MessageCenter* message_center)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : message_center_(message_center),
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      message_center_visible_(false),
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      popups_visible_(false),
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      delegate_(delegate) {
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  message_center_->AddObserver(this);
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MessageCenterTray::~MessageCenterTray() {
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  message_center_->RemoveObserver(this);
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MessageCenterTray::ShowMessageCenterBubble() {
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (message_center_visible_)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return true;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  HidePopupBubble();
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  message_center_visible_ = delegate_->ShowMessageCenter();
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  message_center_->SetMessageCenterVisible(message_center_visible_);
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return message_center_visible_;
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MessageCenterTray::HideMessageCenterBubble() {
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!message_center_visible_)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return false;
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  delegate_->HideMessageCenter();
457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  MarkMessageCenterHidden();
467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return true;
477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid MessageCenterTray::MarkMessageCenterHidden() {
507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (!message_center_visible_)
517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  message_center_visible_ = false;
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  message_center_->SetMessageCenterVisible(false);
547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Some notifications (like system ones) should appear as popups again
557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // after the message center is closed.
567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (message_center_->HasPopupNotifications())
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    ShowPopupBubble();
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NotifyMessageCenterTrayChanged();
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenterTray::ToggleMessageCenterBubble() {
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (message_center_visible_)
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    HideMessageCenterBubble();
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ShowMessageCenterBubble();
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenterTray::ShowPopupBubble() {
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (message_center_visible_)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (popups_visible_) {
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NotifyMessageCenterTrayChanged();
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!message_center_->HasPopupNotifications())
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  popups_visible_ = delegate_->ShowPopups();
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NotifyMessageCenterTrayChanged();
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MessageCenterTray::HidePopupBubble() {
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!popups_visible_)
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return false;
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  delegate_->HidePopups();
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  popups_visible_ = false;
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NotifyMessageCenterTrayChanged();
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return true;
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid MessageCenterTray::ShowNotifierSettingsBubble() {
96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (popups_visible_)
97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    HidePopupBubble();
98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  message_center_visible_ = delegate_->ShowNotifierSettings();
100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MessageCenterTray::OnNotificationAdded(
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const std::string& notification_id) {
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  OnMessageCenterChanged();
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MessageCenterTray::OnNotificationRemoved(
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const std::string& notification_id,
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    bool by_user) {
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  OnMessageCenterChanged();
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MessageCenterTray::OnNotificationUpdated(
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const std::string& notification_id) {
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  OnMessageCenterChanged();
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MessageCenterTray::OnNotificationClicked(
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const std::string& notification_id) {
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (popups_visible_)
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    OnMessageCenterChanged();
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MessageCenterTray::OnNotificationButtonClicked(
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const std::string& notification_id,
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    int button_index) {
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (popups_visible_)
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    OnMessageCenterChanged();
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MessageCenterTray::OnNotificationDisplayed(
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const std::string& notification_id) {
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NotifyMessageCenterTrayChanged();
134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
136424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void MessageCenterTray::OnQuietModeChanged(bool in_quiet_mode) {
137424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  NotifyMessageCenterTrayChanged();
138424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
139424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MessageCenterTray::OnMessageCenterChanged() {
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (message_center_visible_) {
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (message_center_->NotificationCount() == 0)
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      HideMessageCenterBubble();
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (popups_visible_ && !message_center_->HasPopupNotifications())
1477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    HidePopupBubble();
1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  else if (message_center_->HasPopupNotifications())
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ShowPopupBubble();
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NotifyMessageCenterTrayChanged();
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MessageCenterTray::NotifyMessageCenterTrayChanged() {
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  delegate_->OnMessageCenterTrayChanged();
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace message_center
159