1// Copyright (c) 2012 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#ifndef ASH_SYSTEM_TRAY_SYSTEM_TRAY_BUBBLE_H_ 6#define ASH_SYSTEM_TRAY_SYSTEM_TRAY_BUBBLE_H_ 7 8#include "ash/system/user/login_status.h" 9#include "base/base_export.h" 10#include "base/memory/scoped_ptr.h" 11#include "base/timer/timer.h" 12#include "ui/views/bubble/tray_bubble_view.h" 13 14#include <vector> 15 16namespace ash { 17 18class SystemTray; 19class SystemTrayItem; 20 21namespace internal { 22 23class SystemTrayBubble { 24 public: 25 enum BubbleType { 26 BUBBLE_TYPE_DEFAULT, 27 BUBBLE_TYPE_DETAILED, 28 BUBBLE_TYPE_NOTIFICATION 29 }; 30 31 SystemTrayBubble(ash::SystemTray* tray, 32 const std::vector<ash::SystemTrayItem*>& items, 33 BubbleType bubble_type); 34 virtual ~SystemTrayBubble(); 35 36 // Change the items displayed in the bubble. 37 void UpdateView(const std::vector<ash::SystemTrayItem*>& items, 38 BubbleType bubble_type); 39 40 // Creates |bubble_view_| and a child views for each member of |items_|. 41 // Also creates |bubble_wrapper_|. |init_params| may be modified. 42 void InitView(views::View* anchor, 43 user::LoginStatus login_status, 44 views::TrayBubbleView::InitParams* init_params); 45 46 BubbleType bubble_type() const { return bubble_type_; } 47 views::TrayBubbleView* bubble_view() const { return bubble_view_; } 48 49 void DestroyItemViews(); 50 void BubbleViewDestroyed(); 51 void StartAutoCloseTimer(int seconds); 52 void StopAutoCloseTimer(); 53 void RestartAutoCloseTimer(); 54 void Close(); 55 void SetVisible(bool is_visible); 56 bool IsVisible(); 57 58 // Returns true if any of the SystemTrayItems return true from 59 // ShouldShowLauncher(). 60 bool ShouldShowLauncher() const; 61 62 private: 63 void CreateItemViews(user::LoginStatus login_status); 64 65 ash::SystemTray* tray_; 66 views::TrayBubbleView* bubble_view_; 67 std::vector<ash::SystemTrayItem*> items_; 68 BubbleType bubble_type_; 69 70 int autoclose_delay_; 71 base::OneShotTimer<SystemTrayBubble> autoclose_; 72 73 DISALLOW_COPY_AND_ASSIGN(SystemTrayBubble); 74}; 75 76} // namespace internal 77} // namespace ash 78 79#endif // ASH_SYSTEM_TRAY_SYSTEM_TRAY_BUBBLE_H_ 80