Index: ash/common/system/web_notification/web_notification_tray.cc |
diff --git a/ash/common/system/web_notification/web_notification_tray.cc b/ash/common/system/web_notification/web_notification_tray.cc |
deleted file mode 100644 |
index 59bded4c2c3d09fe6d824dfa65cd96a1c41831f8..0000000000000000000000000000000000000000 |
--- a/ash/common/system/web_notification/web_notification_tray.cc |
+++ /dev/null |
@@ -1,662 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "ash/common/system/web_notification/web_notification_tray.h" |
- |
-#include "ash/common/material_design/material_design_controller.h" |
-#include "ash/common/session/session_state_delegate.h" |
-#include "ash/common/shelf/shelf_constants.h" |
-#include "ash/common/shelf/wm_shelf.h" |
-#include "ash/common/shelf/wm_shelf_util.h" |
-#include "ash/common/system/status_area_widget.h" |
-#include "ash/common/system/tray/system_tray.h" |
-#include "ash/common/system/tray/system_tray_delegate.h" |
-#include "ash/common/system/tray/tray_bubble_wrapper.h" |
-#include "ash/common/system/tray/tray_constants.h" |
-#include "ash/common/system/tray/tray_utils.h" |
-#include "ash/common/system/web_notification/ash_popup_alignment_delegate.h" |
-#include "ash/common/wm_shell.h" |
-#include "ash/common/wm_window.h" |
-#include "ash/public/cpp/shell_window_ids.h" |
-#include "ash/resources/vector_icons/vector_icons.h" |
-#include "ash/root_window_controller.h" |
-#include "ash/strings/grit/ash_strings.h" |
-#include "base/auto_reset.h" |
-#include "base/i18n/number_formatting.h" |
-#include "base/i18n/rtl.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/threading/thread_task_runner_handle.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "ui/display/display.h" |
-#include "ui/display/screen.h" |
-#include "ui/gfx/paint_vector_icon.h" |
-#include "ui/gfx/vector_icons_public.h" |
-#include "ui/message_center/message_center_style.h" |
-#include "ui/message_center/message_center_tray_delegate.h" |
-#include "ui/message_center/views/message_bubble_base.h" |
-#include "ui/message_center/views/message_center_bubble.h" |
-#include "ui/message_center/views/message_popup_collection.h" |
-#include "ui/strings/grit/ui_strings.h" |
-#include "ui/views/bubble/tray_bubble_view.h" |
-#include "ui/views/controls/image_view.h" |
-#include "ui/views/controls/label.h" |
-#include "ui/views/controls/menu/menu_runner.h" |
-#include "ui/views/layout/fill_layout.h" |
- |
-namespace message_center { |
- |
-MessageCenterTrayDelegate* CreateMessageCenterTray() { |
- // On non-CrOS, the Tray will not be hosted in ash::Shell. |
- NOTREACHED(); |
- return nullptr; |
-} |
- |
-} // namespace message_center |
- |
-namespace ash { |
-namespace { |
- |
-// Menu commands |
-constexpr int kToggleQuietMode = 0; |
-constexpr int kEnableQuietModeDay = 2; |
- |
-constexpr int kMaximumSmallIconCount = 3; |
- |
-constexpr gfx::Size kTrayItemInnerIconSize(16, 16); |
-constexpr gfx::Size kTrayItemInnerBellIconSizeNonMd(18, 18); |
-constexpr gfx::Size kTrayItemOuterSize(26, 26); |
-constexpr int kTrayMainAxisInset = 3; |
-constexpr int kTrayCrossAxisInset = 0; |
- |
-constexpr int kTrayItemAnimationDurationMS = 200; |
- |
-constexpr size_t kMaximumNotificationNumber = 99; |
- |
-// Flag to disable animation. Only for testing. |
-bool disable_animations_for_test = false; |
-} |
- |
-namespace { |
- |
-const SkColor kWebNotificationColorNoUnread = |
- SkColorSetARGB(128, 255, 255, 255); |
-const SkColor kWebNotificationColorWithUnread = SK_ColorWHITE; |
-const int kNoUnreadIconSize = 18; |
- |
-} // namespace |
- |
-// Class to initialize and manage the WebNotificationBubble and |
-// TrayBubbleWrapper instances for a bubble. |
-class WebNotificationBubbleWrapper { |
- public: |
- // Takes ownership of |bubble| and creates |bubble_wrapper_|. |
- WebNotificationBubbleWrapper(WebNotificationTray* tray, |
- TrayBackgroundView* anchor_tray, |
- message_center::MessageBubbleBase* bubble) { |
- bubble_.reset(bubble); |
- views::TrayBubbleView::AnchorAlignment anchor_alignment = |
- tray->GetAnchorAlignment(); |
- views::TrayBubbleView::InitParams init_params = |
- bubble->GetInitParams(anchor_alignment); |
- views::TrayBubbleView* bubble_view = views::TrayBubbleView::Create( |
- anchor_tray->GetBubbleAnchor(), tray, &init_params); |
- bubble_view->set_anchor_view_insets(anchor_tray->GetBubbleAnchorInsets()); |
- bubble_wrapper_.reset(new TrayBubbleWrapper(tray, bubble_view)); |
- bubble->InitializeContents(bubble_view); |
- } |
- |
- message_center::MessageBubbleBase* bubble() const { return bubble_.get(); } |
- |
- // Convenience accessors. |
- views::TrayBubbleView* bubble_view() const { return bubble_->bubble_view(); } |
- |
- private: |
- std::unique_ptr<message_center::MessageBubbleBase> bubble_; |
- std::unique_ptr<TrayBubbleWrapper> bubble_wrapper_; |
- |
- DISALLOW_COPY_AND_ASSIGN(WebNotificationBubbleWrapper); |
-}; |
- |
-class WebNotificationItem : public views::View, public gfx::AnimationDelegate { |
- public: |
- WebNotificationItem(gfx::AnimationContainer* container, |
- WebNotificationTray* tray) |
- : tray_(tray) { |
- SetPaintToLayer(); |
- layer()->SetFillsBoundsOpaquely(false); |
- views::View::SetVisible(false); |
- set_owned_by_client(); |
- |
- SetLayoutManager(new views::FillLayout); |
- |
- animation_.reset(new gfx::SlideAnimation(this)); |
- animation_->SetContainer(container); |
- animation_->SetSlideDuration(kTrayItemAnimationDurationMS); |
- animation_->SetTweenType(gfx::Tween::LINEAR); |
- } |
- |
- void SetVisible(bool set_visible) override { |
- if (!GetWidget() || disable_animations_for_test) { |
- views::View::SetVisible(set_visible); |
- return; |
- } |
- |
- if (!set_visible) { |
- animation_->Hide(); |
- AnimationProgressed(animation_.get()); |
- } else { |
- animation_->Show(); |
- AnimationProgressed(animation_.get()); |
- views::View::SetVisible(true); |
- } |
- } |
- |
- void HideAndDelete() { |
- SetVisible(false); |
- |
- if (!visible() && !animation_->is_animating()) { |
- if (parent()) |
- parent()->RemoveChildView(this); |
- base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this); |
- } else { |
- delete_after_animation_ = true; |
- } |
- } |
- |
- protected: |
- // Overridden from views::View: |
- gfx::Size GetPreferredSize() const override { |
- if (!animation_.get() || !animation_->is_animating()) |
- return kTrayItemOuterSize; |
- |
- // Animate the width (or height) when this item shows (or hides) so that |
- // the icons on the left are shifted with the animation. |
- // Note that TrayItemView does the same thing. |
- gfx::Size size = kTrayItemOuterSize; |
- if (IsHorizontalLayout()) { |
- size.set_width(std::max( |
- 1, gfx::ToRoundedInt(size.width() * animation_->GetCurrentValue()))); |
- } else { |
- size.set_height(std::max( |
- 1, gfx::ToRoundedInt(size.height() * animation_->GetCurrentValue()))); |
- } |
- return size; |
- } |
- |
- int GetHeightForWidth(int width) const override { |
- return GetPreferredSize().height(); |
- } |
- |
- bool IsHorizontalLayout() const { |
- return IsHorizontalAlignment(tray_->shelf_alignment()); |
- } |
- |
- private: |
- // gfx::AnimationDelegate: |
- void AnimationProgressed(const gfx::Animation* animation) override { |
- gfx::Transform transform; |
- if (IsHorizontalLayout()) { |
- transform.Translate(0, animation->CurrentValueBetween( |
- static_cast<double>(height()) / 2., 0.)); |
- } else { |
- transform.Translate( |
- animation->CurrentValueBetween(static_cast<double>(width() / 2.), 0.), |
- 0); |
- } |
- transform.Scale(animation->GetCurrentValue(), animation->GetCurrentValue()); |
- layer()->SetTransform(transform); |
- PreferredSizeChanged(); |
- } |
- void AnimationEnded(const gfx::Animation* animation) override { |
- if (animation->GetCurrentValue() < 0.1) |
- views::View::SetVisible(false); |
- |
- if (delete_after_animation_) { |
- if (parent()) |
- parent()->RemoveChildView(this); |
- base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this); |
- } |
- } |
- void AnimationCanceled(const gfx::Animation* animation) override { |
- AnimationEnded(animation); |
- } |
- |
- std::unique_ptr<gfx::SlideAnimation> animation_; |
- bool delete_after_animation_ = false; |
- WebNotificationTray* tray_; |
- |
- DISALLOW_COPY_AND_ASSIGN(WebNotificationItem); |
-}; |
- |
-class WebNotificationImage : public WebNotificationItem { |
- public: |
- WebNotificationImage(const gfx::ImageSkia& image, |
- const gfx::Size& size, |
- gfx::AnimationContainer* container, |
- WebNotificationTray* tray) |
- : WebNotificationItem(container, tray) { |
- view_ = new views::ImageView(); |
- view_->SetImage(image); |
- view_->SetImageSize(size); |
- AddChildView(view_); |
- } |
- |
- private: |
- views::ImageView* view_; |
- |
- DISALLOW_COPY_AND_ASSIGN(WebNotificationImage); |
-}; |
- |
-class WebNotificationLabel : public WebNotificationItem { |
- public: |
- WebNotificationLabel(gfx::AnimationContainer* container, |
- WebNotificationTray* tray) |
- : WebNotificationItem(container, tray) { |
- view_ = new views::Label(); |
- SetupLabelForTray(view_); |
- AddChildView(view_); |
- } |
- |
- void SetNotificationCount(bool small_icons_exist, size_t notification_count) { |
- notification_count = std::min(notification_count, |
- kMaximumNotificationNumber); // cap with 99 |
- |
- // TODO(yoshiki): Use a string for "99" and "+99". |
- |
- base::string16 str = base::FormatNumber(notification_count); |
- if (small_icons_exist) { |
- if (!base::i18n::IsRTL()) |
- str = base::ASCIIToUTF16("+") + str; |
- else |
- str = str + base::ASCIIToUTF16("+"); |
- } |
- |
- view_->SetText(str); |
- view_->SetEnabledColor(kWebNotificationColorWithUnread); |
- SchedulePaint(); |
- } |
- |
- private: |
- views::Label* view_; |
- |
- DISALLOW_COPY_AND_ASSIGN(WebNotificationLabel); |
-}; |
- |
-WebNotificationTray::WebNotificationTray(WmShelf* shelf, |
- WmWindow* status_area_window, |
- SystemTray* system_tray) |
- : TrayBackgroundView(shelf), |
- status_area_window_(status_area_window), |
- system_tray_(system_tray), |
- show_message_center_on_unlock_(false), |
- should_update_tray_content_(false), |
- should_block_shelf_auto_hide_(false) { |
- DCHECK(shelf); |
- DCHECK(status_area_window_); |
- DCHECK(system_tray_); |
- |
- if (MaterialDesignController::IsShelfMaterial()) { |
- SetInkDropMode(InkDropMode::ON); |
- SetContentsBackground(false); |
- gfx::ImageSkia bell_image = |
- CreateVectorIcon(kShelfNotificationsIcon, kShelfIconColor); |
- const gfx::Size bell_icon_size = kTrayItemInnerIconSize; |
- bell_icon_.reset(new WebNotificationImage( |
- bell_image, bell_icon_size, animation_container_.get(), this)); |
- } else { |
- SetContentsBackground(true); |
- gfx::ImageSkia bell_image = |
- CreateVectorIcon(gfx::VectorIconId::NOTIFICATIONS, kNoUnreadIconSize, |
- kWebNotificationColorNoUnread); |
- const gfx::Size bell_icon_size = kTrayItemInnerBellIconSizeNonMd; |
- bell_icon_.reset(new WebNotificationImage( |
- bell_image, bell_icon_size, animation_container_.get(), this)); |
- } |
- tray_container()->AddChildView(bell_icon_.get()); |
- |
- counter_.reset(new WebNotificationLabel(animation_container_.get(), this)); |
- tray_container()->AddChildView(counter_.get()); |
- |
- message_center_tray_.reset(new message_center::MessageCenterTray( |
- this, message_center::MessageCenter::Get())); |
- popup_alignment_delegate_.reset(new AshPopupAlignmentDelegate(shelf)); |
- popup_collection_.reset(new message_center::MessagePopupCollection( |
- message_center(), message_center_tray_.get(), |
- popup_alignment_delegate_.get())); |
- const display::Display& display = |
- status_area_window_->GetDisplayNearestWindow(); |
- popup_alignment_delegate_->StartObserving(display::Screen::GetScreen(), |
- display); |
- OnMessageCenterTrayChanged(); |
- |
- tray_container()->SetMargin(kTrayMainAxisInset, kTrayCrossAxisInset); |
-} |
- |
-WebNotificationTray::~WebNotificationTray() { |
- // Release any child views that might have back pointers before ~View(). |
- message_center_bubble_.reset(); |
- popup_alignment_delegate_.reset(); |
- popup_collection_.reset(); |
-} |
- |
-// static |
-void WebNotificationTray::DisableAnimationsForTest(bool disable) { |
- disable_animations_for_test = disable; |
-} |
- |
-// Public methods. |
- |
-bool WebNotificationTray::ShowMessageCenterInternal(bool show_settings) { |
- if (!ShouldShowMessageCenter()) |
- return false; |
- |
- should_block_shelf_auto_hide_ = true; |
- message_center::MessageCenterBubble* message_center_bubble = |
- new message_center::MessageCenterBubble(message_center(), |
- message_center_tray_.get()); |
- |
- // In the horizontal case, message center starts from the top of the shelf. |
- // In the vertical case, it starts from the bottom of WebNotificationTray. |
- const int max_height = IsHorizontalAlignment(shelf_alignment()) |
- ? shelf()->GetIdealBounds().y() |
- : GetBoundsInScreen().bottom(); |
- message_center_bubble->SetMaxHeight(max_height); |
- |
- if (show_settings) |
- message_center_bubble->SetSettingsVisible(); |
- |
- // For vertical shelf alignments, anchor to the WebNotificationTray, but for |
- // horizontal (i.e. bottom) shelves, anchor to the system tray. |
- TrayBackgroundView* anchor_tray = this; |
- if (IsHorizontalAlignment(shelf_alignment())) { |
- anchor_tray = WmShelf::ForWindow(status_area_window_) |
- ->GetStatusAreaWidget() |
- ->system_tray(); |
- } |
- |
- message_center_bubble_.reset(new WebNotificationBubbleWrapper( |
- this, anchor_tray, message_center_bubble)); |
- |
- shelf()->UpdateAutoHideState(); |
- SetIsActive(true); |
- return true; |
-} |
- |
-bool WebNotificationTray::ShowMessageCenter() { |
- return ShowMessageCenterInternal(false /* show_settings */); |
-} |
- |
-void WebNotificationTray::HideMessageCenter() { |
- if (!message_center_bubble()) |
- return; |
- SetIsActive(false); |
- message_center_bubble_.reset(); |
- should_block_shelf_auto_hide_ = false; |
- show_message_center_on_unlock_ = false; |
- shelf()->UpdateAutoHideState(); |
-} |
- |
-void WebNotificationTray::SetTrayBubbleHeight(int height) { |
- popup_alignment_delegate_->SetTrayBubbleHeight(height); |
-} |
- |
-int WebNotificationTray::tray_bubble_height_for_test() const { |
- return popup_alignment_delegate_->tray_bubble_height_for_test(); |
-} |
- |
-bool WebNotificationTray::ShowPopups() { |
- if (message_center_bubble()) |
- return false; |
- |
- popup_collection_->DoUpdateIfPossible(); |
- return true; |
-} |
- |
-void WebNotificationTray::HidePopups() { |
- DCHECK(popup_collection_.get()); |
- popup_collection_->MarkAllPopupsShown(); |
-} |
- |
-// Private methods. |
- |
-bool WebNotificationTray::ShouldShowMessageCenter() { |
- return WmShell::Get()->system_tray_delegate()->ShouldShowNotificationTray(); |
-} |
- |
-bool WebNotificationTray::ShouldBlockShelfAutoHide() const { |
- return should_block_shelf_auto_hide_; |
-} |
- |
-bool WebNotificationTray::IsMessageCenterBubbleVisible() const { |
- return (message_center_bubble() && |
- message_center_bubble()->bubble()->IsVisible()); |
-} |
- |
-void WebNotificationTray::ShowMessageCenterBubble() { |
- if (!IsMessageCenterBubbleVisible()) |
- message_center_tray_->ShowMessageCenterBubble(); |
-} |
- |
-void WebNotificationTray::UpdateAfterLoginStatusChange( |
- LoginStatus login_status) { |
- message_center()->SetLockedState(login_status == LoginStatus::LOCKED); |
- OnMessageCenterTrayChanged(); |
-} |
- |
-void WebNotificationTray::SetShelfAlignment(ShelfAlignment alignment) { |
- if (alignment == shelf_alignment()) |
- return; |
- TrayBackgroundView::SetShelfAlignment(alignment); |
- // Destroy any existing bubble so that it will be rebuilt correctly. |
- message_center_tray_->HideMessageCenterBubble(); |
- message_center_tray_->HidePopupBubble(); |
-} |
- |
-void WebNotificationTray::AnchorUpdated() { |
- if (message_center_bubble()) { |
- message_center_bubble()->bubble_view()->UpdateBubble(); |
- UpdateBubbleViewArrow(message_center_bubble()->bubble_view()); |
- } |
-} |
- |
-base::string16 WebNotificationTray::GetAccessibleNameForTray() { |
- return l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_ACCESSIBLE_NAME); |
-} |
- |
-void WebNotificationTray::HideBubbleWithView( |
- const views::TrayBubbleView* bubble_view) { |
- if (message_center_bubble() && |
- bubble_view == message_center_bubble()->bubble_view()) { |
- message_center_tray_->HideMessageCenterBubble(); |
- } else if (popup_collection_.get()) { |
- message_center_tray_->HidePopupBubble(); |
- } |
-} |
- |
-bool WebNotificationTray::PerformAction(const ui::Event& event) { |
- if (message_center_bubble()) |
- message_center_tray_->HideMessageCenterBubble(); |
- else |
- message_center_tray_->ShowMessageCenterBubble(); |
- return true; |
-} |
- |
-void WebNotificationTray::BubbleViewDestroyed() { |
- if (message_center_bubble()) |
- message_center_bubble()->bubble()->BubbleViewDestroyed(); |
-} |
- |
-void WebNotificationTray::OnMouseEnteredView() {} |
- |
-void WebNotificationTray::OnMouseExitedView() {} |
- |
-base::string16 WebNotificationTray::GetAccessibleNameForBubble() { |
- return GetAccessibleNameForTray(); |
-} |
- |
-void WebNotificationTray::OnBeforeBubbleWidgetInit( |
- views::Widget* anchor_widget, |
- views::Widget* bubble_widget, |
- views::Widget::InitParams* params) const { |
- // Place the bubble in the same root window as |anchor_widget|. |
- WmWindow::Get(anchor_widget->GetNativeWindow()) |
- ->GetRootWindowController() |
- ->ConfigureWidgetInitParamsForContainer( |
- bubble_widget, kShellWindowId_SettingBubbleContainer, params); |
-} |
- |
-void WebNotificationTray::HideBubble(const views::TrayBubbleView* bubble_view) { |
- HideBubbleWithView(bubble_view); |
-} |
- |
-bool WebNotificationTray::ShowNotifierSettings() { |
- if (message_center_bubble()) { |
- static_cast<message_center::MessageCenterBubble*>( |
- message_center_bubble()->bubble()) |
- ->SetSettingsVisible(); |
- return true; |
- } |
- return ShowMessageCenterInternal(true /* show_settings */); |
-} |
- |
-bool WebNotificationTray::IsContextMenuEnabled() const { |
- return IsLoggedIn(); |
-} |
- |
-message_center::MessageCenterTray* WebNotificationTray::GetMessageCenterTray() { |
- return message_center_tray_.get(); |
-} |
- |
-bool WebNotificationTray::IsCommandIdChecked(int command_id) const { |
- if (command_id != kToggleQuietMode) |
- return false; |
- return message_center()->IsQuietMode(); |
-} |
- |
-bool WebNotificationTray::IsCommandIdEnabled(int command_id) const { |
- return true; |
-} |
- |
-void WebNotificationTray::ExecuteCommand(int command_id, int event_flags) { |
- if (command_id == kToggleQuietMode) { |
- bool in_quiet_mode = message_center()->IsQuietMode(); |
- message_center()->SetQuietMode(!in_quiet_mode); |
- return; |
- } |
- base::TimeDelta expires_in = command_id == kEnableQuietModeDay |
- ? base::TimeDelta::FromDays(1) |
- : base::TimeDelta::FromHours(1); |
- message_center()->EnterQuietModeWithExpire(expires_in); |
-} |
- |
-void WebNotificationTray::OnMessageCenterTrayChanged() { |
- // Do not update the tray contents directly. Multiple change events can happen |
- // consecutively, and calling Update in the middle of those events will show |
- // intermediate unread counts for a moment. |
- should_update_tray_content_ = true; |
- base::ThreadTaskRunnerHandle::Get()->PostTask( |
- FROM_HERE, |
- base::Bind(&WebNotificationTray::UpdateTrayContent, AsWeakPtr())); |
-} |
- |
-void WebNotificationTray::UpdateTrayContent() { |
- if (!should_update_tray_content_) |
- return; |
- should_update_tray_content_ = false; |
- |
- std::unordered_set<std::string> notification_ids; |
- for (auto pair : visible_small_icons_) |
- notification_ids.insert(pair.first); |
- |
- // Add small icons (up to kMaximumSmallIconCount = 3). |
- message_center::MessageCenter* message_center = |
- message_center_tray_->message_center(); |
- size_t visible_small_icon_count = 0; |
- for (const auto* notification : message_center->GetVisibleNotifications()) { |
- gfx::Image image = notification->small_image(); |
- if (image.IsEmpty()) |
- continue; |
- |
- if (visible_small_icon_count >= kMaximumSmallIconCount) |
- break; |
- visible_small_icon_count++; |
- |
- notification_ids.erase(notification->id()); |
- if (visible_small_icons_.count(notification->id()) != 0) |
- continue; |
- |
- auto* item = |
- new WebNotificationImage(image.AsImageSkia(), kTrayItemInnerIconSize, |
- animation_container_.get(), this); |
- visible_small_icons_.insert(std::make_pair(notification->id(), item)); |
- |
- tray_container()->AddChildViewAt(item, 0); |
- item->SetVisible(true); |
- } |
- |
- // Remove unnecessary icons. |
- for (const std::string& id : notification_ids) { |
- WebNotificationImage* item = visible_small_icons_[id]; |
- visible_small_icons_.erase(id); |
- item->HideAndDelete(); |
- } |
- |
- // Show or hide the bell icon. |
- size_t visible_notification_count = message_center->NotificationCount(); |
- bell_icon_->SetVisible(visible_notification_count == 0); |
- |
- // Show or hide the counter. |
- size_t hidden_icon_count = |
- visible_notification_count - visible_small_icon_count; |
- if (hidden_icon_count != 0) { |
- counter_->SetVisible(true); |
- counter_->SetNotificationCount( |
- (visible_small_icon_count != 0), // small_icons_exist |
- hidden_icon_count); |
- } else { |
- counter_->SetVisible(false); |
- } |
- |
- SetVisible(IsLoggedIn() && ShouldShowMessageCenter()); |
- PreferredSizeChanged(); |
- Layout(); |
- SchedulePaint(); |
- if (IsLoggedIn()) |
- system_tray_->SetNextFocusableView(this); |
-} |
- |
-void WebNotificationTray::ClickedOutsideBubble() { |
- // Only hide the message center |
- if (!message_center_bubble()) |
- return; |
- |
- message_center_tray_->HideMessageCenterBubble(); |
-} |
- |
-message_center::MessageCenter* WebNotificationTray::message_center() const { |
- return message_center_tray_->message_center(); |
-} |
- |
-bool WebNotificationTray::IsLoggedIn() const { |
- WmShell* shell = WmShell::Get(); |
- return shell->system_tray_delegate()->GetUserLoginStatus() != |
- LoginStatus::NOT_LOGGED_IN && |
- !shell->GetSessionStateDelegate()->IsInSecondaryLoginScreen(); |
-} |
- |
-// Methods for testing |
- |
-bool WebNotificationTray::IsPopupVisible() const { |
- return message_center_tray_->popups_visible(); |
-} |
- |
-message_center::MessageCenterBubble* |
-WebNotificationTray::GetMessageCenterBubbleForTest() { |
- if (!message_center_bubble()) |
- return nullptr; |
- return static_cast<message_center::MessageCenterBubble*>( |
- message_center_bubble()->bubble()); |
-} |
- |
-} // namespace ash |