diff options
Diffstat (limited to 'src/plugins/sensors/android')
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); |