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_DRIVE_TRAY_DRIVE_H_ 6 #define ASH_SYSTEM_DRIVE_TRAY_DRIVE_H_ 7 8 #include "ash/system/drive/drive_observer.h" 9 #include "ash/system/tray/tray_image_item.h" 10 #include "base/timer/timer.h" 11 12 namespace views { 13 class Label; 14 } 15 16 namespace ash { 17 namespace internal { 18 19 namespace tray { 20 class DriveTrayView; 21 class DriveDefaultView; 22 class DriveDetailedView; 23 } 24 25 class TrayDrive : public TrayImageItem, 26 public DriveObserver { 27 public: 28 explicit TrayDrive(SystemTray* system_tray); 29 virtual ~TrayDrive(); 30 31 private: 32 // Overridden from TrayImageItem. 33 virtual bool GetInitialVisibility() OVERRIDE; 34 35 // Overridden from SystemTrayItem. 36 virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE; 37 virtual views::View* CreateDetailedView(user::LoginStatus status) OVERRIDE; 38 virtual void DestroyDefaultView() OVERRIDE; 39 virtual void DestroyDetailedView() OVERRIDE; 40 virtual void UpdateAfterLoginStatusChange(user::LoginStatus status) OVERRIDE; 41 42 // Overridden from DriveObserver. 43 virtual void OnDriveJobUpdated(const DriveOperationStatus& status) OVERRIDE; 44 45 // Delayed hiding of the tray item after encountering an empty operation list. 46 void HideIfNoOperations(); 47 48 tray::DriveDefaultView* default_; 49 tray::DriveDetailedView* detailed_; 50 base::OneShotTimer<TrayDrive> hide_timer_; 51 52 DISALLOW_COPY_AND_ASSIGN(TrayDrive); 53 }; 54 55 } // namespace internal 56 } // namespace ash 57 58 #endif // ASH_SYSTEM_DRIVE_TRAY_DRIVE_H_ 59