summaryrefslogtreecommitdiffstats
path: root/content/browser/sensors
diff options
context:
space:
mode:
authorcwolfe@chromium.org <cwolfe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-26 22:03:57 +0000
committercwolfe@chromium.org <cwolfe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-26 22:03:57 +0000
commit62007fca07eac8193c72e118479926160f3843fd (patch)
tree2f71af61f30d274a6d45c2d40fd88946d006a2be /content/browser/sensors
parent15e8d0f1bca4ae074671265b91fef11d3a2bea84 (diff)
downloadchromium_src-62007fca07eac8193c72e118479926160f3843fd.zip
chromium_src-62007fca07eac8193c72e118479926160f3843fd.tar.gz
chromium_src-62007fca07eac8193c72e118479926160f3843fd.tar.bz2
Initial sensor event provider for testing views screen rotation
The sensors API will unify various types of sensor data into a set of channels, each of which provides change events and periodic updates. This version of the API is intended only to support the experimental screen rotation code and is not for general use. In particular, the final listener will declare generic |OnSensorChanged| and |OnSensorUpdated| methods, rather than the special-purpose |OnScreenOrientationChanged|. BUG=none TEST=manual with http://codereview.chromium.org/7273073/ Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=93094 Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=93480 Review URL: http://codereview.chromium.org/7366011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@94181 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/sensors')
-rw-r--r--content/browser/sensors/sensors_provider.cc21
-rw-r--r--content/browser/sensors/sensors_provider.h57
-rw-r--r--content/browser/sensors/sensors_provider_impl.cc35
-rw-r--r--content/browser/sensors/sensors_provider_impl.h42
4 files changed, 155 insertions, 0 deletions
diff --git a/content/browser/sensors/sensors_provider.cc b/content/browser/sensors/sensors_provider.cc
new file mode 100644
index 0000000..a3c3dce
--- /dev/null
+++ b/content/browser/sensors/sensors_provider.cc
@@ -0,0 +1,21 @@
+// Copyright (c) 2011 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 "content/browser/sensors/sensors_provider.h"
+
+#include "content/browser/sensors/sensors_provider_impl.h"
+
+namespace sensors {
+
+Provider* Provider::GetInstance() {
+ return ProviderImpl::GetInstance();
+}
+
+Provider::Provider() {
+}
+
+Provider::~Provider() {
+}
+
+} // namespace sensors
diff --git a/content/browser/sensors/sensors_provider.h b/content/browser/sensors/sensors_provider.h
new file mode 100644
index 0000000..72bc15f
--- /dev/null
+++ b/content/browser/sensors/sensors_provider.h
@@ -0,0 +1,57 @@
+// Copyright (c) 2011 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 CONTENT_BROWSER_SENSORS_PROVIDER_H_
+#define CONTENT_BROWSER_SENSORS_PROVIDER_H_
+#pragma once
+
+#include "base/basictypes.h"
+#include "content/common/sensors_listener.h"
+
+// The sensors API will unify various types of sensor data into a set of
+// channels, each of which provides change events and periodic updates.
+//
+// This version of the API is intended only to support the experimental screen
+// rotation code and is not for general use. In particular, the final listener
+// will declare generic |OnSensorChanged| and |OnSensorUpdated| methods, rather
+// than the special-purpose |OnScreenOrientationChanged|.
+
+namespace sensors {
+
+// TODO(cwolfe): Finish defining the initial set of channels and replace this
+// with the generic sensor provider.
+//
+class Provider {
+ public:
+ static Provider* GetInstance();
+
+ // Adds a sensor listener. The listener will receive callbacks to indicate
+ // sensor changes and updates until it is removed.
+ //
+ // This method may be called in any thread. Callbacks on a listener will
+ // always be executed in the thread which added that listener.
+ virtual void AddListener(Listener* listener) = 0;
+
+ // Removes a sensor listener.
+ //
+ // This method must be called in the same thread which added the listener.
+ // If the listener is not currently subscribed, this method may be called in
+ // any thread.
+ virtual void RemoveListener(Listener* listener) = 0;
+
+ // Broadcasts a change to the coarse screen orientation.
+ //
+ // This method may be called in any thread.
+ virtual void ScreenOrientationChanged(const ScreenOrientation& change) = 0;
+
+ protected:
+ Provider();
+ virtual ~Provider();
+
+ DISALLOW_COPY_AND_ASSIGN(Provider);
+};
+
+} // namespace sensors
+
+#endif // CONTENT_BROWSER_SENSORS_PROVIDER_H_
diff --git a/content/browser/sensors/sensors_provider_impl.cc b/content/browser/sensors/sensors_provider_impl.cc
new file mode 100644
index 0000000..9c151f7
--- /dev/null
+++ b/content/browser/sensors/sensors_provider_impl.cc
@@ -0,0 +1,35 @@
+// Copyright (c) 2011 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 "content/browser/sensors/sensors_provider_impl.h"
+
+#include "base/memory/singleton.h"
+
+namespace sensors {
+
+ProviderImpl* ProviderImpl::GetInstance() {
+ return Singleton<ProviderImpl>::get();
+}
+
+ProviderImpl::ProviderImpl()
+ : listeners_(new ListenerList()) {
+}
+
+ProviderImpl::~ProviderImpl() {
+}
+
+void ProviderImpl::AddListener(Listener* listener) {
+ listeners_->AddObserver(listener);
+}
+
+void ProviderImpl::RemoveListener(Listener* listener) {
+ listeners_->RemoveObserver(listener);
+}
+
+void ProviderImpl::ScreenOrientationChanged(
+ const ScreenOrientation& change) {
+ listeners_->Notify(&Listener::OnScreenOrientationChanged, change);
+}
+
+} // namespace sensors
diff --git a/content/browser/sensors/sensors_provider_impl.h b/content/browser/sensors/sensors_provider_impl.h
new file mode 100644
index 0000000..a4a6b04
--- /dev/null
+++ b/content/browser/sensors/sensors_provider_impl.h
@@ -0,0 +1,42 @@
+// Copyright (c) 2011 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 CONTENT_BROWSER_SENSORS_PROVIDER_IMPL_H_
+#define CONTENT_BROWSER_SENSORS_PROVIDER_IMPL_H_
+#pragma once
+
+#include "base/compiler_specific.h"
+#include "base/memory/ref_counted.h"
+#include "base/observer_list_threadsafe.h"
+#include "content/browser/sensors/sensors_provider.h"
+
+template <typename T> struct DefaultSingletonTraits;
+
+namespace sensors {
+
+class ProviderImpl : public Provider {
+ public:
+ static ProviderImpl* GetInstance();
+
+ // Provider implementation
+ virtual void AddListener(Listener* listener) OVERRIDE;
+ virtual void RemoveListener(Listener* listener) OVERRIDE;
+ virtual void ScreenOrientationChanged(
+ const ScreenOrientation& change) OVERRIDE;
+
+ private:
+ friend struct DefaultSingletonTraits<ProviderImpl>;
+
+ ProviderImpl();
+ virtual ~ProviderImpl();
+
+ typedef ObserverListThreadSafe<Listener> ListenerList;
+ scoped_refptr<ListenerList> listeners_;
+
+ DISALLOW_COPY_AND_ASSIGN(ProviderImpl);
+};
+
+} // namespace sensors
+
+#endif // CONTENT_BROWSER_SENSORS_PROVIDER_IMPL_H_