diff options
Diffstat (limited to 'ash')
-rw-r--r-- | ash/accelerometer/accelerometer_controller.cc | 42 | ||||
-rw-r--r-- | ash/accelerometer/accelerometer_controller.h | 71 | ||||
-rw-r--r-- | ash/accelerometer/accelerometer_observer.h | 26 | ||||
-rw-r--r-- | ash/ash.gyp | 3 | ||||
-rw-r--r-- | ash/shell.cc | 2 | ||||
-rw-r--r-- | ash/shell.h | 7 |
6 files changed, 151 insertions, 0 deletions
diff --git a/ash/accelerometer/accelerometer_controller.cc b/ash/accelerometer/accelerometer_controller.cc new file mode 100644 index 0000000..a8de559 --- /dev/null +++ b/ash/accelerometer/accelerometer_controller.cc @@ -0,0 +1,42 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/accelerometer/accelerometer_controller.h" + +#include "ash/accelerometer/accelerometer_observer.h" +#include "ui/gfx/geometry/vector3d_f.h" + +namespace ash { + +AccelerometerController::AccelerometerController() { +} + +AccelerometerController::~AccelerometerController() { +} + +void AccelerometerController::Initialize( + scoped_refptr<base::TaskRunner> blocking_task_runner) { +#if defined(OS_CHROMEOS) + reader_.reset(new chromeos::AccelerometerReader(blocking_task_runner, this)); +#endif +} + +void AccelerometerController::AddObserver(AccelerometerObserver* observer) { + observers_.AddObserver(observer); +} + +void AccelerometerController::RemoveObserver(AccelerometerObserver* observer) { + observers_.RemoveObserver(observer); +} + +#if defined(OS_CHROMEOS) +void AccelerometerController::HandleAccelerometerReading( + const gfx::Vector3dF& base, + const gfx::Vector3dF& lid) { + FOR_EACH_OBSERVER(AccelerometerObserver, observers_, + OnAccelerometerUpdated(base, lid)); +} +#endif + +} // namespace ash diff --git a/ash/accelerometer/accelerometer_controller.h b/ash/accelerometer/accelerometer_controller.h new file mode 100644 index 0000000..ffe9c55 --- /dev/null +++ b/ash/accelerometer/accelerometer_controller.h @@ -0,0 +1,71 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_ACCELEROMETER_ACCELEROMETER_CONTROLLER_H_ +#define ASH_ACCELEROMETER_ACCELEROMETER_CONTROLLER_H_ + +#include "ash/ash_export.h" +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" +#include "base/observer_list.h" + +#if defined(OS_CHROMEOS) +#include "chromeos/accelerometer/accelerometer_reader.h" +#endif + +namespace base { +class TaskRunner; +} + +namespace gfx { +class Vector3dF; +} + +namespace ash { + +class AccelerometerObserver; + +// This class owns the communication interface for talking to the accelerometer +// on supporting devices. Observers will be delivered OnAccelerometerRead +// notifications if an accelerometer was detected. +class ASH_EXPORT AccelerometerController +#if defined(OS_CHROMEOS) + : public chromeos::AccelerometerReader::Delegate { +#else + { +#endif + public: + AccelerometerController(); + virtual ~AccelerometerController(); + + // Initialize the accelerometer reader. + void Initialize(scoped_refptr<base::TaskRunner> blocking_task_runner); + + // Add/remove observer. + void AddObserver(AccelerometerObserver* observer); + void RemoveObserver(AccelerometerObserver* observer); + +#if defined(OS_CHROMEOS) + // This needs to be CHROMEOS only as on other platforms it does not actually + // override a method. + // chromeos::AccelerometerReader::Delegate: + virtual void HandleAccelerometerReading(const gfx::Vector3dF& base, + const gfx::Vector3dF& lid) OVERRIDE; +#endif + + private: +#if defined(OS_CHROMEOS) + // The AccelerometerReader which directly triggers and reads from the + // accelerometer device. + scoped_ptr<chromeos::AccelerometerReader> reader_; +#endif + + ObserverList<AccelerometerObserver, true> observers_; + + DISALLOW_COPY_AND_ASSIGN(AccelerometerController); +}; + +} // namespace ash + +#endif // ASH_ACCELEROMETER_ACCELEROMETER_CONTROLLER_H_ diff --git a/ash/accelerometer/accelerometer_observer.h b/ash/accelerometer/accelerometer_observer.h new file mode 100644 index 0000000..3d70a42 --- /dev/null +++ b/ash/accelerometer/accelerometer_observer.h @@ -0,0 +1,26 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_ACCELEROMETER_ACCELEROMETER_OBSERVER_H_ +#define ASH_ACCELEROMETER_ACCELEROMETER_OBSERVER_H_ + +namespace gfx { +class Vector3dF; +} + +namespace ash { + +// The interface for classes which observe accelerometer updates. +class AccelerometerObserver { + public: + virtual void OnAccelerometerUpdated(const gfx::Vector3dF& base, + const gfx::Vector3dF& lid) = 0; + + protected: + virtual ~AccelerometerObserver() {} +}; + +} // namespace ash + +#endif // ASH_ACCELEROMETER_ACCELEROMETER_OBSERVER_H_ diff --git a/ash/ash.gyp b/ash/ash.gyp index ebb6e60..5ec38e7 100644 --- a/ash/ash.gyp +++ b/ash/ash.gyp @@ -75,6 +75,9 @@ 'accelerators/nested_dispatcher_controller.h', 'accelerators/spoken_feedback_toggler.cc', 'accelerators/spoken_feedback_toggler.h', + 'accelerometer/accelerometer_controller.cc', + 'accelerometer/accelerometer_controller.h', + 'accelerometer/accelerometer_observer.h', 'accessibility_delegate.h', 'audio/sounds.cc', 'audio/sounds.h', diff --git a/ash/shell.cc b/ash/shell.cc index 003053e8..ad9b92c 100644 --- a/ash/shell.cc +++ b/ash/shell.cc @@ -11,6 +11,7 @@ #include "ash/accelerators/accelerator_filter.h" #include "ash/accelerators/focus_manager_factory.h" #include "ash/accelerators/nested_dispatcher_controller.h" +#include "ash/accelerometer/accelerometer_controller.h" #include "ash/ash_switches.h" #include "ash/autoclick/autoclick_controller.h" #include "ash/desktop_background/desktop_background_controller.h" @@ -606,6 +607,7 @@ Shell::Shell(ShellDelegate* delegate) delegate_(delegate), window_positioner_(new WindowPositioner), activation_client_(NULL), + accelerometer_controller_(new AccelerometerController()), #if defined(OS_CHROMEOS) output_configurator_(new ui::OutputConfigurator()), #endif // defined(OS_CHROMEOS) diff --git a/ash/shell.h b/ash/shell.h index 1f511db..b096e51 100644 --- a/ash/shell.h +++ b/ash/shell.h @@ -74,6 +74,7 @@ class WindowModalityController; namespace ash { class AcceleratorController; +class AccelerometerController; class AccessibilityDelegate; class AshNativeCursorManager; class AutoclickController; @@ -500,6 +501,10 @@ class ASH_EXPORT Shell // Starts the animation that occurs on first login. void DoInitialWorkspaceAnimation(); + AccelerometerController* accelerometer_controller() { + return accelerometer_controller_.get(); + } + #if defined(OS_CHROMEOS) // TODO(oshima): Move these objects to DisplayController. ui::OutputConfigurator* output_configurator() { @@ -697,6 +702,8 @@ class ASH_EXPORT Shell // The maximized window manager (if enabled). scoped_ptr<internal::MaximizeModeWindowManager> maximize_mode_window_manager_; + scoped_ptr<AccelerometerController> accelerometer_controller_; + #if defined(OS_CHROMEOS) scoped_ptr<internal::PowerEventObserver> power_event_observer_; scoped_ptr<internal::UserActivityNotifier> user_activity_notifier_; |