1// Copyright 2013 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_BRIGHTNESS_TRAY_BRIGHTNESS_H_
6#define ASH_SYSTEM_CHROMEOS_BRIGHTNESS_TRAY_BRIGHTNESS_H_
7
8#include "ash/system/tray/system_tray_item.h"
9#include "base/compiler_specific.h"
10#include "base/memory/weak_ptr.h"
11#include "chromeos/dbus/power_manager_client.h"
12
13namespace ash {
14namespace tray {
15class BrightnessView;
16}
17
18class ASH_EXPORT TrayBrightness
19    : public SystemTrayItem,
20      public chromeos::PowerManagerClient::Observer {
21 public:
22  explicit TrayBrightness(SystemTray* system_tray);
23  virtual ~TrayBrightness();
24
25 private:
26  friend class TrayBrightnessTest;
27
28  // Sends a request to get the current screen brightness so |current_percent_|
29  // can be initialized.
30  void GetInitialBrightness();
31
32  // Updates |current_percent_| with the initial brightness requested by
33  // GetInitialBrightness(), if we haven't seen the brightness already in the
34  // meantime.
35  void HandleInitialBrightness(double percent);
36
37  // Overridden from SystemTrayItem.
38  virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE;
39  virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE;
40  virtual views::View* CreateDetailedView(user::LoginStatus status) OVERRIDE;
41  virtual void DestroyTrayView() OVERRIDE;
42  virtual void DestroyDefaultView() OVERRIDE;
43  virtual void DestroyDetailedView() OVERRIDE;
44  virtual void UpdateAfterLoginStatusChange(user::LoginStatus status) OVERRIDE;
45  virtual bool ShouldHideArrow() const OVERRIDE;
46  virtual bool ShouldShowShelf() const OVERRIDE;
47
48  // Overriden from PowerManagerClient::Observer.
49  virtual void BrightnessChanged(int level, bool user_initiated) OVERRIDE;
50
51  void HandleBrightnessChanged(double percent, bool user_initiated);
52
53  tray::BrightnessView* brightness_view_;
54
55  // Brightness level in the range [0.0, 100.0] that we've heard about most
56  // recently.
57  double current_percent_;
58
59  // Has |current_percent_| been initialized?
60  bool got_current_percent_;
61
62  base::WeakPtrFactory<TrayBrightness> weak_ptr_factory_;
63
64  DISALLOW_COPY_AND_ASSIGN(TrayBrightness);
65};
66
67}  // namespace ash
68
69#endif  // ASH_SYSTEM_CHROMEOS_BRIGHTNESS_TRAY_BRIGHTNESS_H_
70