summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensors/ios/iosproximitysensor.mm
diff options
context:
space:
mode:
authorRichard Moe Gustavsen <richard.gustavsen@qt.io>2016-08-24 14:19:40 +0200
committerRichard Moe Gustavsen <richard.gustavsen@qt.io>2016-08-25 07:57:22 +0000
commit46d9a630a88fc5388dec7fd99289d0e9e0e1f680 (patch)
tree282f24c50f249090994791e7224af2b82e31db62 /src/plugins/sensors/ios/iosproximitysensor.mm
parentf2f289b5048eab47901fe75dd41770ffd630dead (diff)
iOS: protect OS sensors from being stopped when shared by several Qt sensors
When a Qt sensor is told to stop, it automatically stops the underlying OS sensor as well. This caused a problem when several Qt sensors were running, since stopping one would stop them all. This patch will add a ref count for each affected sensor, so that we keep track of when it's safe to start and stop the underlying OS sensor. Task-number: QTBUG-54977 Change-Id: If06c4daac22916feef2f4c7bd521363d74f342a6 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Lorn Potter <lorn.potter@canonical.com>
Diffstat (limited to 'src/plugins/sensors/ios/iosproximitysensor.mm')
-rw-r--r--src/plugins/sensors/ios/iosproximitysensor.mm14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/plugins/sensors/ios/iosproximitysensor.mm b/src/plugins/sensors/ios/iosproximitysensor.mm
index 6905e5cc..0d673d12 100644
--- a/src/plugins/sensors/ios/iosproximitysensor.mm
+++ b/src/plugins/sensors/ios/iosproximitysensor.mm
@@ -39,6 +39,8 @@ char const * const IOSProximitySensor::id("ios.proximitysensor");
QT_BEGIN_NAMESPACE
+int IOSProximitySensor::s_startCount = 0;
+
@interface ProximitySensorCallback : NSObject
{
IOSProximitySensor *m_iosProximitySensor;
@@ -104,8 +106,12 @@ IOSProximitySensor::~IOSProximitySensor()
void IOSProximitySensor::start()
{
+ if (m_proximitySensorCallback)
+ return;
+
m_proximitySensorCallback = [[ProximitySensorCallback alloc] initWithQIOSProximitySensor:this];
- [UIDevice currentDevice].proximityMonitoringEnabled = YES;
+ if (++s_startCount == 1)
+ [UIDevice currentDevice].proximityMonitoringEnabled = YES;
}
void IOSProximitySensor::proximityChanged(bool close)
@@ -117,9 +123,13 @@ void IOSProximitySensor::proximityChanged(bool close)
void IOSProximitySensor::stop()
{
- [UIDevice currentDevice].proximityMonitoringEnabled = NO;
+ if (!m_proximitySensorCallback)
+ return;
+
[m_proximitySensorCallback release];
m_proximitySensorCallback = 0;
+ if (--s_startCount == 0)
+ [UIDevice currentDevice].proximityMonitoringEnabled = NO;
}
QT_END_NAMESPACE