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 12namespace ash { 13 14namespace tray { 15class 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. 23class 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