14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef ASH_SYSTEM_CHROMEOS_BRIGHTNESS_TRAY_BRIGHTNESS_H_
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define ASH_SYSTEM_CHROMEOS_BRIGHTNESS_TRAY_BRIGHTNESS_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/system_tray_item.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/dbus/power_manager_client.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace tray {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrightnessView;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class ASH_EXPORT TrayBrightness
1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    : public SystemTrayItem,
2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      public chromeos::PowerManagerClient::Observer {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit TrayBrightness(SystemTray* system_tray);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~TrayBrightness();
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  friend class TrayBrightnessTest;
2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sends a request to get the current screen brightness so |current_percent_|
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // can be initialized.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void GetInitialBrightness();
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates |current_percent_| with the initial brightness requested by
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // GetInitialBrightness(), if we haven't seen the brightness already in the
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // meantime.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void HandleInitialBrightness(double percent);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from SystemTrayItem.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::View* CreateDetailedView(user::LoginStatus status) OVERRIDE;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DestroyTrayView() OVERRIDE;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DestroyDefaultView() OVERRIDE;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DestroyDetailedView() OVERRIDE;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateAfterLoginStatusChange(user::LoginStatus status) OVERRIDE;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool ShouldHideArrow() const OVERRIDE;
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool ShouldShowShelf() const OVERRIDE;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Overriden from PowerManagerClient::Observer.
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void BrightnessChanged(int level, bool user_initiated) OVERRIDE;
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  void HandleBrightnessChanged(double percent, bool user_initiated);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tray::BrightnessView* brightness_view_;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Brightness level in the range [0.0, 100.0] that we've heard about most
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // recently.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double current_percent_;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Has |current_percent_| been initialized?
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool got_current_percent_;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::WeakPtrFactory<TrayBrightness> weak_ptr_factory_;
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TrayBrightness);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ash
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif  // ASH_SYSTEM_CHROMEOS_BRIGHTNESS_TRAY_BRIGHTNESS_H_
70