Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / xwalk / tizen / mobile / sensor / sensor_provider.cc
1 // Copyright (c) 2013 Intel Corporation. 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 "xwalk/tizen/mobile/sensor/sensor_provider.h"
6
7 #include "base/logging.h"
8 #include "xwalk/tizen/mobile/sensor/tizen_platform_sensor.h"
9
10 namespace xwalk {
11
12 SensorProvider* SensorProvider::GetInstance() {
13   if (instance_.get() == NULL) {
14     instance_.reset(new TizenPlatformSensor());
15     instance_->Initialize();
16   }
17   return instance_.get();
18 }
19
20 SensorProvider::SensorProvider()
21     : last_orientation_(blink::WebScreenOrientationUndefined),
22       connected_(false) {
23 }
24
25 SensorProvider::~SensorProvider() {
26   Finish();
27 }
28
29 // Whether the platform sensors are connected.
30 bool SensorProvider::connected() const {
31   base::AutoLock lock(lock_);
32   return connected_;
33 }
34
35 void SensorProvider::AddObserver(Observer* observer) {
36   observers_.insert(observer);
37 }
38
39 void SensorProvider::RemoveObserver(Observer* observer) {
40   observers_.erase(observer);
41 }
42
43 void SensorProvider::OnScreenOrientationChanged(
44     blink::WebScreenOrientationType orientation) {
45   last_orientation_ = orientation;
46
47   std::set<Observer*>::iterator it;
48   for (it = observers_.begin(); it != observers_.end(); ++it)
49     (*it)->OnScreenOrientationChanged(orientation);
50 }
51
52 void SensorProvider::OnOrientationChanged(float alpha,
53                                           float beta,
54                                           float gamma) {
55   std::set<Observer*>::iterator it;
56   for (it = observers_.begin(); it != observers_.end(); ++it)
57     (*it)->OnOrientationChanged(alpha, beta, gamma);
58 }
59
60 void SensorProvider::OnAccelerationChanged(
61     float raw_x, float raw_y, float raw_z,
62     float x, float y, float z) {
63   std::set<Observer*>::iterator it;
64   for (it = observers_.begin(); it != observers_.end(); ++it)
65     (*it)->OnAccelerationChanged(raw_x, raw_y, raw_z, x, y, z);
66 }
67
68 void SensorProvider::OnRotationRateChanged(float alpha,
69                                            float beta,
70                                            float gamma) {
71   std::set<Observer*>::iterator it;
72   for (it = observers_.begin(); it != observers_.end(); ++it)
73     (*it)->OnRotationRateChanged(alpha, beta, gamma);
74 }
75
76 void SensorProvider::OnSensorConnected() {
77   for (auto observer : observers_)
78     observer->OnSensorConnected();
79 }
80
81 scoped_ptr<SensorProvider> SensorProvider::instance_;
82 }  // namespace xwalk