From 46d9a630a88fc5388dec7fd99289d0e9e0e1f680 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Wed, 24 Aug 2016 14:19:40 +0200 Subject: 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 Reviewed-by: Lorn Potter --- src/plugins/sensors/ios/iosproximitysensor.mm | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/plugins/sensors/ios/iosproximitysensor.mm') 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 -- cgit v1.2.3