summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensors/android/src
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/sensors/android/src')
-rw-r--r--src/plugins/sensors/android/src/androidaccelerometer.cpp38
-rw-r--r--src/plugins/sensors/android/src/androidaccelerometer.h7
-rw-r--r--src/plugins/sensors/android/src/androidcommonsensor.h2
-rw-r--r--src/plugins/sensors/android/src/main.cpp5
4 files changed, 49 insertions, 3 deletions
diff --git a/src/plugins/sensors/android/src/androidaccelerometer.cpp b/src/plugins/sensors/android/src/androidaccelerometer.cpp
index 36ce08e3..5a42d0cb 100644
--- a/src/plugins/sensors/android/src/androidaccelerometer.cpp
+++ b/src/plugins/sensors/android/src/androidaccelerometer.cpp
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2013 BogDan Vatra <bogdan@kde.org>
+** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtSensors module of the Qt Toolkit.
@@ -43,7 +44,13 @@
AndroidAccelerometer::AndroidAccelerometer(AndroidSensors::AndroidSensorType type, QSensor *sensor)
: AndroidCommonSensor<QAccelerometerReading>(type, sensor)
-{}
+{
+ QAccelerometer * const accelerometer = qobject_cast<QAccelerometer *>(sensor);
+ if (accelerometer) {
+ connect(accelerometer, SIGNAL(accelerationModeChanged(AccelerationMode)),
+ this, SLOT(applyAccelerationMode()));
+ }
+}
void AndroidAccelerometer::onSensorChanged(jlong timestamp, const jfloat *values, uint size)
{
@@ -61,3 +68,32 @@ void AndroidAccelerometer::onAccuracyChanged(jint accuracy)
{
Q_UNUSED(accuracy)
}
+
+void AndroidAccelerometer::applyAccelerationMode()
+{
+ const QAccelerometer * const accelerometer = qobject_cast<QAccelerometer *>(sensor());
+ if (accelerometer) {
+ stop(); //Stop previous sensor and start new one
+ m_type = modeToSensor(accelerometer->accelerationMode());
+ start();
+ }
+}
+AndroidSensors::AndroidSensorType AndroidAccelerometer::modeToSensor(QAccelerometer::AccelerationMode mode)
+{
+ AndroidSensors::AndroidSensorType type;
+
+ switch (mode) {
+ case QAccelerometer::Gravity:
+ type = AndroidSensors::TYPE_GRAVITY;
+ break;
+ case QAccelerometer::User:
+ type = AndroidSensors::TYPE_LINEAR_ACCELERATION;
+ break;
+ default:
+ case QAccelerometer::Combined:
+ type = AndroidSensors::TYPE_ACCELEROMETER;
+ break;
+ }
+
+ return type;
+}
diff --git a/src/plugins/sensors/android/src/androidaccelerometer.h b/src/plugins/sensors/android/src/androidaccelerometer.h
index 31363014..4eb7471e 100644
--- a/src/plugins/sensors/android/src/androidaccelerometer.h
+++ b/src/plugins/sensors/android/src/androidaccelerometer.h
@@ -47,13 +47,18 @@
class AndroidAccelerometer : public AndroidCommonSensor<QAccelerometerReading>
{
+ Q_OBJECT
+
public:
AndroidAccelerometer(AndroidSensors::AndroidSensorType type, QSensor *sensor);
-
+ static AndroidSensors::AndroidSensorType modeToSensor(QAccelerometer::AccelerationMode mode);
private:
void onAccuracyChanged(jint accuracy) Q_DECL_OVERRIDE;
void onSensorChanged(jlong timestamp, const jfloat *values, uint size) Q_DECL_OVERRIDE;
+private Q_SLOTS:
+ void applyAccelerationMode();
+
};
#endif // ANDROIDACCELEROMETER_H
diff --git a/src/plugins/sensors/android/src/androidcommonsensor.h b/src/plugins/sensors/android/src/androidcommonsensor.h
index 396f4105..134c2b75 100644
--- a/src/plugins/sensors/android/src/androidcommonsensor.h
+++ b/src/plugins/sensors/android/src/androidcommonsensor.h
@@ -79,9 +79,9 @@ public:
protected:
ReaderType m_reader;
+ AndroidSensors::AndroidSensorType m_type;
private:
- AndroidSensors::AndroidSensorType m_type;
bool m_isStarted;
};
diff --git a/src/plugins/sensors/android/src/main.cpp b/src/plugins/sensors/android/src/main.cpp
index 17d499ef..3326208b 100644
--- a/src/plugins/sensors/android/src/main.cpp
+++ b/src/plugins/sensors/android/src/main.cpp
@@ -43,6 +43,7 @@
#include <qsensorplugin.h>
#include <qsensorbackend.h>
#include <qsensormanager.h>
+#include <qaccelerometer.h>
#include "androidaccelerometer.h"
#include "androidgyroscope.h"
#include "androidlight.h"
@@ -112,7 +113,11 @@ public:
AndroidSensorType type = static_cast<AndroidSensorType>(sensor->identifier().toInt());
switch (type) {
case TYPE_ACCELEROMETER:
+ {
+ QAccelerometer * const accelerometer = qobject_cast<QAccelerometer *>(sensor);
+ AndroidSensors::AndroidSensorType type = AndroidAccelerometer::modeToSensor(accelerometer->accelerationMode());
return new AndroidAccelerometer(type, sensor);
+ }
case TYPE_AMBIENT_TEMPERATURE:
case TYPE_TEMPERATURE:
return new AndroidTemperature(type, sensor);