diff options
author | Richard Moe Gustavsen <richard.gustavsen@qt.io> | 2016-08-24 14:19:40 +0200 |
---|---|---|
committer | Richard Moe Gustavsen <richard.gustavsen@qt.io> | 2016-08-25 07:57:22 +0000 |
commit | 46d9a630a88fc5388dec7fd99289d0e9e0e1f680 (patch) | |
tree | 282f24c50f249090994791e7224af2b82e31db62 /src/plugins/sensors/ios/iosproximitysensor.mm | |
parent | f2f289b5048eab47901fe75dd41770ffd630dead (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.mm | 14 |
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 |