diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2021-07-02 13:56:15 +0200 |
---|---|---|
committer | Ivan Solovev <ivan.solovev@qt.io> | 2021-07-14 14:58:05 +0200 |
commit | 6015afc28d828466c8fc9f783ff9ac63f7579e71 (patch) | |
tree | 1be1125b2dda92216b81a2a0376f0b52832dde35 /src/plugins | |
parent | 6ca90ba2f8b654c21768ffd7311a3d32396a674b (diff) | |
download | qtlocation-6015afc28d828466c8fc9f783ff9ac63f7579e71.tar.gz |
QtPositioning: fix provider disabled notifications
When starting the location updates, we register the same location
listener for multiple location providers (GPS & network). As a result,
the onProviderDisabled() callback is called multiple times, and we
might report too many "Closed" errors.
This patch fixes the logic by introducing an additional flag to track
that the native C++ callback was already invoked.
Drive-by: fix some code formatting.
Pick-to: 6.2
Change-Id: Ie8e93ae77eb1c9cf9044bf3a35b22c37e9f2a8aa
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/position/android/jar/src/org/qtproject/qt/android/positioning/QtPositioning.java | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/plugins/position/android/jar/src/org/qtproject/qt/android/positioning/QtPositioning.java b/src/plugins/position/android/jar/src/org/qtproject/qt/android/positioning/QtPositioning.java index b9a39807..b1726c53 100644 --- a/src/plugins/position/android/jar/src/org/qtproject/qt/android/positioning/QtPositioning.java +++ b/src/plugins/position/android/jar/src/org/qtproject/qt/android/positioning/QtPositioning.java @@ -99,6 +99,8 @@ public class QtPositioning implements LocationListener private PositioningLooper looperThread; + private boolean isLocationProvidersDisabledInvoked = false; + static public void setContext(Context context) { try { @@ -255,8 +257,8 @@ public class QtPositioning implements LocationListener Log.d(TAG, "Regular updates using GPS " + updateInterval); try { addActiveListener(positioningListener, - LocationManager.GPS_PROVIDER, - updateInterval, 0); + LocationManager.GPS_PROVIDER, + updateInterval, 0); } catch (SecurityException se) { se.printStackTrace(); exceptionOccurred = true; @@ -267,8 +269,8 @@ public class QtPositioning implements LocationListener Log.d(TAG, "Regular updates using network " + updateInterval); try { addActiveListener(positioningListener, - LocationManager.NETWORK_PROVIDER, - updateInterval, 0); + LocationManager.NETWORK_PROVIDER, + updateInterval, 0); } catch (SecurityException se) { se.printStackTrace(); exceptionOccurred = true; @@ -376,7 +378,7 @@ public class QtPositioning implements LocationListener Log.d(TAG, "Regular updates for Satellites " + updateInterval); try { addActiveListener(positioningListener, LocationManager.GPS_PROVIDER, - updateInterval, 0); + updateInterval, 0); } catch (SecurityException se) { se.printStackTrace(); exceptionOccurred = true; @@ -578,13 +580,17 @@ public class QtPositioning implements LocationListener public void onProviderEnabled(String provider) { Log.d(TAG, "Enabled provider: " + provider); locationProvidersChanged(nativeClassReference); + if (isLocationProvidersDisabledInvoked && expectedProvidersAvailable(expectedProviders)) + isLocationProvidersDisabledInvoked = false; } @Override public void onProviderDisabled(String provider) { Log.d(TAG, "Disabled provider: " + provider); locationProvidersChanged(nativeClassReference); - if (!expectedProvidersAvailable(expectedProviders)) + if (!isLocationProvidersDisabledInvoked && !expectedProvidersAvailable(expectedProviders)) { + isLocationProvidersDisabledInvoked = true; locationProvidersDisabled(nativeClassReference); + } } } |