summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
Diffstat (limited to 'ash')
-rw-r--r--ash/accelerometer/accelerometer_controller.cc42
-rw-r--r--ash/accelerometer/accelerometer_controller.h71
-rw-r--r--ash/accelerometer/accelerometer_observer.h26
-rw-r--r--ash/ash.gyp3
-rw-r--r--ash/shell.cc2
-rw-r--r--ash/shell.h7
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_;