diff options
author | cwolfe@chromium.org <cwolfe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-26 22:03:57 +0000 |
---|---|---|
committer | cwolfe@chromium.org <cwolfe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-26 22:03:57 +0000 |
commit | 62007fca07eac8193c72e118479926160f3843fd (patch) | |
tree | 2f71af61f30d274a6d45c2d40fd88946d006a2be /content/browser/sensors | |
parent | 15e8d0f1bca4ae074671265b91fef11d3a2bea84 (diff) | |
download | chromium_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.cc | 21 | ||||
-rw-r--r-- | content/browser/sensors/sensors_provider.h | 57 | ||||
-rw-r--r-- | content/browser/sensors/sensors_provider_impl.cc | 35 | ||||
-rw-r--r-- | content/browser/sensors/sensors_provider_impl.h | 42 |
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_ |