summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens.qnx@kdab.com>2012-04-30 17:20:24 +0200
committerQt by Nokia <qt-info@nokia.com>2012-05-03 01:36:02 +0200
commitbf3dde61cc7d611b1e5f2a18e533c535c4cd7ff8 (patch)
treece3dd02d357b374c48c125f6f6c8ca05579f9c7e /src
parent78eb8007edde7f9403e148b8d4a3a65e57155427 (diff)
Pause/resume sensor on application (de)activation
Each sensor now installs itself as an event filter of the application object waiting to (de)activation events. When an ApplicationDeactivate event arrives sensors are paused, they get resumed on ApplicationActivate. This behavior is inhibited by the alwaysOn property. Change-Id: I559239f279d9412d8836efad08e6688019504b16 Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com> Reviewed-by: Tennessee Carmel-Veilleux <tcarmelveilleux@rim.com> Reviewed-by: Lincoln Ramsay <lincoln.ramsay@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/sensors/blackberry/bbsensorbackend.cpp40
-rw-r--r--src/plugins/sensors/blackberry/bbsensorbackend.h3
-rw-r--r--src/plugins/sensors/blackberry/blackberry.pro2
3 files changed, 44 insertions, 1 deletions
diff --git a/src/plugins/sensors/blackberry/bbsensorbackend.cpp b/src/plugins/sensors/blackberry/bbsensorbackend.cpp
index d39f6e4a..7a8a2933 100644
--- a/src/plugins/sensors/blackberry/bbsensorbackend.cpp
+++ b/src/plugins/sensors/blackberry/bbsensorbackend.cpp
@@ -41,6 +41,7 @@
#include "bbsensorbackend.h"
#include <QtCore/QDebug>
+#include <QtGui/QGuiApplication>
#include <fcntl.h>
static const int microSecondsPerSecond = 1000 * 1000;
@@ -59,6 +60,7 @@ BbSensorBackendBase::BbSensorBackendBase(const QString &devicePath, sensor_type_
QSensor *sensor)
: QSensorBackend(sensor), m_deviceFile(devicePath), m_sensorType(sensorType)
{
+ QCoreApplication::instance()->installEventFilter(this);
connect(sensor, SIGNAL(alwaysOnChanged()), this, SLOT(applyAlwaysOnProperty()));
}
@@ -114,6 +116,25 @@ qreal BbSensorBackendBase::convertValue(float bbValue)
return bbValue;
}
+bool BbSensorBackendBase::eventFilter(QObject *object, QEvent *event)
+{
+ if (object == QCoreApplication::instance()) {
+ switch (event->type()) {
+ case QEvent::ApplicationActivate:
+ setPaused(false);
+ break;
+ case QEvent::ApplicationDeactivate:
+ if (!sensor()->isAlwaysOn())
+ setPaused(true);
+ break;
+ default:
+ break;
+ }
+ }
+
+ return QSensorBackend::eventFilter(object, event);
+}
+
void BbSensorBackendBase::start()
{
if (!m_deviceFile.open(QFile::ReadOnly | QFile::Unbuffered)) {
@@ -190,4 +211,23 @@ void BbSensorBackendBase::applyAlwaysOnProperty()
perror(QString::fromLatin1("Setting sensor always on for %1 failed")
.arg(m_deviceFile.fileName()).toLocal8Bit());
}
+
+ // We might need to pause now
+ setPaused(QGuiApplication::focusWindow() == 0 && !sensor()->isAlwaysOn());
+}
+
+void BbSensorBackendBase::setPaused(bool paused)
+{
+ if (!m_deviceFile.isOpen())
+ return;
+
+ sensor_devctl_enable_u enableState;
+ enableState.tx.enable = paused ? 0 : 1;
+
+ const int result = devctl(m_deviceFile.handle(), DCMD_SENSOR_ENABLE, &enableState, sizeof(enableState), NULL);
+ if (result != EOK) {
+ perror(QString::fromLatin1("Setting sensor enabled (%1) for %2 failed")
+ .arg(paused)
+ .arg(m_deviceFile.fileName()).toLocal8Bit());
+ }
}
diff --git a/src/plugins/sensors/blackberry/bbsensorbackend.h b/src/plugins/sensors/blackberry/bbsensorbackend.h
index a3afb372..4e4406a4 100644
--- a/src/plugins/sensors/blackberry/bbsensorbackend.h
+++ b/src/plugins/sensors/blackberry/bbsensorbackend.h
@@ -79,9 +79,12 @@ protected:
virtual void processEvent(const sensor_event_t &sensorEvent) = 0;
+ virtual bool eventFilter(QObject *object, QEvent *event);
+
private slots:
void dataAvailable();
void applyAlwaysOnProperty();
+ void setPaused(bool paused);
private:
QFile m_deviceFile;
diff --git a/src/plugins/sensors/blackberry/blackberry.pro b/src/plugins/sensors/blackberry/blackberry.pro
index b5c339c4..15c6626d 100644
--- a/src/plugins/sensors/blackberry/blackberry.pro
+++ b/src/plugins/sensors/blackberry/blackberry.pro
@@ -1,7 +1,7 @@
load(qt_module)
TARGET = qtsensors_blackberry
-QT = sensors core
+QT = sensors core gui
DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
load(qt_plugin)