Home | History | Annotate | Download | only in rotation
      1 // Copyright 2014 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_CHROMEOS_ROTATION_TRAY_ROTATION_LOCK_H_
      6 #define ASH_SYSTEM_CHROMEOS_ROTATION_TRAY_ROTATION_LOCK_H_
      7 
      8 #include "ash/shell_observer.h"
      9 #include "ash/system/tray/tray_image_item.h"
     10 #include "ash/wm/maximize_mode/maximize_mode_controller.h"
     11 
     12 namespace ash {
     13 
     14 namespace tray {
     15 class RotationLockDefaultView;
     16 }  // namespace tray
     17 
     18 // TrayRotationLock is a provider of views for the SystemTray. Both a tray view
     19 // and a default view are provided. Each view indicates the current state of
     20 // the rotation lock for the display which it appears on. The default view can
     21 // be interacted with, it toggles the state of the rotation lock.
     22 // TrayRotationLock is only available on the primary display.
     23 class ASH_EXPORT TrayRotationLock : public TrayImageItem,
     24                                     public MaximizeModeController::Observer,
     25                                     public ShellObserver {
     26  public:
     27   explicit TrayRotationLock(SystemTray* system_tray);
     28   virtual ~TrayRotationLock();
     29 
     30   // MaximizeModeController::Observer:
     31   virtual void OnRotationLockChanged(bool rotation_locked) OVERRIDE;
     32 
     33   // SystemTrayItem:
     34   virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE;
     35 
     36   // ShellObserver:
     37   virtual void OnMaximizeModeStarted() OVERRIDE;
     38   virtual void OnMaximizeModeEnded() OVERRIDE;
     39 
     40  protected:
     41   // TrayImageItem:
     42   virtual bool GetInitialVisibility() OVERRIDE;
     43 
     44  private:
     45   friend class TrayRotationLockTest;
     46 
     47   // True if |on_primary_display_|, maximize mode is enabled, and rotation is
     48   // locked.
     49   bool ShouldBeVisible();
     50 
     51   // True if this has been created by a SystemTray on the primary display.
     52   bool on_primary_display_;
     53 
     54   DISALLOW_COPY_AND_ASSIGN(TrayRotationLock);
     55 };
     56 
     57 }  // namespace ash
     58 
     59 #endif  // ASH_SYSTEM_CHROMEOS_ROTATION_TRAY_ROTATION_LOCK_H_
     60