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