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_SESSION_LENGTH_LIMIT_TRAY_SESSION_LENGTH_LIMIT_H_ 6 #define ASH_SYSTEM_SESSION_LENGTH_LIMIT_TRAY_SESSION_LENGTH_LIMIT_H_ 7 8 #include "ash/system/session_length_limit/session_length_limit_observer.h" 9 #include "ash/system/tray/system_tray_item.h" 10 #include "base/basictypes.h" 11 #include "base/compiler_specific.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "base/time/time.h" 14 #include "base/timer/timer.h" 15 16 namespace ash { 17 namespace internal { 18 19 namespace tray { 20 class RemainingSessionTimeNotificationView; 21 class RemainingSessionTimeTrayView; 22 } 23 24 // Adds a countdown timer to the system tray if the session length is limited. 25 class TraySessionLengthLimit : public SystemTrayItem, 26 public SessionLengthLimitObserver { 27 public: 28 enum LimitState { 29 LIMIT_NONE, 30 LIMIT_SET, 31 LIMIT_EXPIRING_SOON 32 }; 33 34 explicit TraySessionLengthLimit(SystemTray* system_tray); 35 virtual ~TraySessionLengthLimit(); 36 37 // SystemTrayItem: 38 virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE; 39 virtual views::View* CreateNotificationView( 40 user::LoginStatus status) OVERRIDE; 41 virtual void DestroyTrayView() OVERRIDE; 42 virtual void DestroyNotificationView() OVERRIDE; 43 virtual void UpdateAfterShelfAlignmentChange( 44 ShelfAlignment alignment) OVERRIDE; 45 46 // SessionLengthLimitObserver: 47 virtual void OnSessionStartTimeChanged() OVERRIDE; 48 virtual void OnSessionLengthLimitChanged() OVERRIDE; 49 50 LimitState GetLimitState() const; 51 base::TimeDelta GetRemainingSessionTime() const; 52 53 private: 54 void ShowAndSpeakNotification(); 55 void Update(); 56 57 tray::RemainingSessionTimeTrayView* tray_view_; 58 tray::RemainingSessionTimeNotificationView* notification_view_; 59 60 LimitState limit_state_; 61 base::TimeTicks session_start_time_; 62 base::TimeDelta limit_; 63 base::TimeDelta remaining_session_time_; 64 scoped_ptr<base::RepeatingTimer<TraySessionLengthLimit> > timer_; 65 66 DISALLOW_COPY_AND_ASSIGN(TraySessionLengthLimit); 67 }; 68 69 } // namespace internal 70 } // namespace ash 71 72 #endif // ASH_SYSTEM_SESSION_LENGTH_LIMIT_TRAY_SESSION_LENGTH_LIMIT_H_ 73