brightness_library.cc revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
1// Copyright (c) 2010 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#include "chrome/browser/chromeos/cros/brightness_library.h" 6 7#include "base/message_loop.h" 8#include "base/observer_list.h" 9#include "chrome/browser/browser_thread.h" 10#include "chrome/browser/chromeos/brightness_bubble.h" 11#include "chrome/browser/chromeos/volume_bubble.h" 12#include "chrome/browser/chromeos/cros/cros_library.h" 13 14namespace chromeos { 15 16class BrightnessLibraryImpl : public BrightnessLibrary { 17 public: 18 BrightnessLibraryImpl() : brightness_connection_(NULL) { 19 if (CrosLibrary::Get()->EnsureLoaded()) 20 Init(); 21 } 22 23 ~BrightnessLibraryImpl() { 24 if (brightness_connection_) { 25 chromeos::DisconnectBrightness(brightness_connection_); 26 brightness_connection_ = NULL; 27 } 28 } 29 30 void AddObserver(Observer* observer) { 31 observers_.AddObserver(observer); 32 } 33 34 void RemoveObserver(Observer* observer) { 35 observers_.RemoveObserver(observer); 36 } 37 38 private: 39 static void BrightnessChangedHandler(void* object, 40 int brightness_level) { 41 BrightnessLibraryImpl* self = static_cast<BrightnessLibraryImpl*>(object); 42 self->OnBrightnessChanged(brightness_level); 43 } 44 45 void Init() { 46 DCHECK(!brightness_connection_) << "Already intialized"; 47 brightness_connection_ = 48 chromeos::MonitorBrightness(&BrightnessChangedHandler, this); 49 } 50 51 void OnBrightnessChanged(int brightness_level) { 52 // Make sure we run on the UI thread. 53 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 54 BrowserThread::PostTask( 55 BrowserThread::UI, FROM_HERE, 56 NewRunnableMethod(this, 57 &BrightnessLibraryImpl::OnBrightnessChanged, 58 brightness_level)); 59 return; 60 } 61 62 FOR_EACH_OBSERVER(Observer, 63 observers_, 64 BrightnessChanged(brightness_level)); 65 } 66 67 chromeos::BrightnessConnection brightness_connection_; 68 69 ObserverList<Observer> observers_; 70 71 DISALLOW_COPY_AND_ASSIGN(BrightnessLibraryImpl); 72}; 73 74class BrightnessLibraryStubImpl : public BrightnessLibrary { 75 public: 76 BrightnessLibraryStubImpl() {} 77 ~BrightnessLibraryStubImpl() {} 78 void AddObserver(Observer* observer) {} 79 void RemoveObserver(Observer* observer) {} 80}; 81 82// static 83BrightnessLibrary* BrightnessLibrary::GetImpl(bool stub) { 84 if (stub) 85 return new BrightnessLibraryStubImpl(); 86 else 87 return new BrightnessLibraryImpl(); 88} 89 90} // namespace chromeos 91 92// Needed for NewRunnableMethod() call above. 93DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::BrightnessLibraryImpl); 94