Upstream version 7.35.144.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 // static
13 bool SensorProvider::initialized_ = false;
14
15 SensorProvider* SensorProvider::GetInstance() {
16   if (!initialized_) {
17     instance_.reset(new TizenPlatformSensor());
18     if (!instance_->Initialize())
19       instance_.reset();
20   }
21   return instance_.get();
22 }
23
24 SensorProvider::SensorProvider()
25     : last_rotation_(gfx::Display::ROTATE_0) {
26 }
27
28 SensorProvider::~SensorProvider() {
29   Finish();
30 }
31
32 void SensorProvider::AddObserver(Observer* observer) {
33   observers_.insert(observer);
34 }
35
36 void SensorProvider::RemoveObserver(Observer* observer) {
37   observers_.erase(observer);
38 }
39
40 void SensorProvider::OnRotationChanged(gfx::Display::Rotation rotation) {
41   last_rotation_ = rotation;
42
43   std::set<Observer*>::iterator it;
44   for (it = observers_.begin(); it != observers_.end(); ++it)
45     (*it)->OnRotationChanged(rotation);
46 }
47
48 void SensorProvider::OnOrientationChanged(float alpha,
49                                           float beta,
50                                           float gamma) {
51   std::set<Observer*>::iterator it;
52   for (it = observers_.begin(); it != observers_.end(); ++it)
53     (*it)->OnOrientationChanged(alpha, beta, gamma);
54 }
55
56 void SensorProvider::OnAccelerationChanged(
57     float raw_x, float raw_y, float raw_z,
58     float x, float y, float z) {
59   std::set<Observer*>::iterator it;
60   for (it = observers_.begin(); it != observers_.end(); ++it)
61     (*it)->OnAccelerationChanged(raw_x, raw_y, raw_z, x, y, z);
62 }
63
64 void SensorProvider::OnRotationRateChanged(float alpha,
65                                            float beta,
66                                            float gamma) {
67   std::set<Observer*>::iterator it;
68   for (it = observers_.begin(); it != observers_.end(); ++it)
69     (*it)->OnRotationRateChanged(alpha, beta, gamma);
70 }
71
72 scoped_ptr<SensorProvider> SensorProvider::instance_;
73
74 }  // namespace xwalk