Home | History | Annotate | Download | only in session_length_limit
      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