diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2016-01-26 14:25:06 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2016-01-26 14:25:06 +0100 |
commit | c6a28570a7300788127117378eb7cd36dcd0953f (patch) | |
tree | b8e56b1bd18fb4438de171004d588d12dbf7abec /src/plugins/position/android/jar/src/org/qtproject/qt5 | |
parent | e9ead74ec4169d483de0b711986b5b560bbb730a (diff) | |
parent | 24e50e40caaa2f2e057180b8ed8179795e605e2a (diff) | |
download | qtlocation-c6a28570a7300788127117378eb7cd36dcd0953f.tar.gz |
Merge remote-tracking branch 'origin/5.6' into dev
Change-Id: I23c874c5dcd0452142c3cf8abff65415ad31a1e7
Diffstat (limited to 'src/plugins/position/android/jar/src/org/qtproject/qt5')
-rw-r--r-- | src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java | 102 |
1 files changed, 66 insertions, 36 deletions
diff --git a/src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java b/src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java index 4723a805..43767f0e 100644 --- a/src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java +++ b/src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java @@ -179,6 +179,58 @@ public class QtPositioning implements LocationListener return false; } + + static private void addActiveListener(QtPositioning listener, String provider) + { + int androidClassKey = listener.nativeClassReference; + //start update thread + listener.setActiveLooper(true); + + if (runningListeners.containsKey(androidClassKey) && runningListeners.get(androidClassKey) != listener) { + removeActiveListener(androidClassKey); + } + + locationManager.requestSingleUpdate(provider, + listener, + listener.looper()); + + runningListeners.put(androidClassKey, listener); + } + + + static private void addActiveListener(QtPositioning listener, String provider, long minTime, float minDistance) + { + int androidClassKey = listener.nativeClassReference; + //start update thread + listener.setActiveLooper(true); + + if (runningListeners.containsKey(androidClassKey) && runningListeners.get(androidClassKey) != listener) { + removeActiveListener(androidClassKey); + } + + locationManager.requestLocationUpdates(provider, + minTime, minDistance, + listener, + listener.looper()); + + runningListeners.put(androidClassKey, listener); + } + + + static private void removeActiveListener(QtPositioning listener) + { + removeActiveListener(listener.nativeClassReference); + } + + + static private void removeActiveListener(int androidClassKey) + { + QtPositioning listener = runningListeners.remove(androidClassKey); + locationManager.removeUpdates(listener); + listener.setActiveLooper(false); + } + + static public int startUpdates(int androidClassKey, int locationProvider, int updateInterval) { synchronized (m_syncObject) { @@ -188,8 +240,6 @@ public class QtPositioning implements LocationListener positioningListener.nativeClassReference = androidClassKey; positioningListener.expectedProviders = locationProvider; positioningListener.isSatelliteUpdate = false; - //start update thread - positioningListener.setActiveLooper(true); if (updateInterval == 0) updateInterval = 1000; //don't update more often than once per second @@ -198,10 +248,9 @@ public class QtPositioning implements LocationListener if ((locationProvider & QT_GPS_PROVIDER) > 0) { Log.d(TAG, "Regular updates using GPS " + updateInterval); try { - locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, - updateInterval, 0, - positioningListener, - positioningListener.looper()); + addActiveListener(positioningListener, + LocationManager.GPS_PROVIDER, + updateInterval, 0); } catch (SecurityException se) { se.printStackTrace(); exceptionOccurred = true; @@ -211,18 +260,16 @@ public class QtPositioning implements LocationListener if ((locationProvider & QT_NETWORK_PROVIDER) > 0) { Log.d(TAG, "Regular updates using network " + updateInterval); try { - locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, - updateInterval, 0, - positioningListener, - positioningListener.looper()); + addActiveListener(positioningListener, + LocationManager.NETWORK_PROVIDER, + updateInterval, 0); } catch (SecurityException se) { se.printStackTrace(); exceptionOccurred = true; } } if (exceptionOccurred) { - positioningListener.setActiveLooper(false); - locationManager.removeUpdates(positioningListener); + removeActiveListener(positioningListener); return QT_ACCESS_ERROR; } @@ -231,7 +278,6 @@ public class QtPositioning implements LocationListener return QT_CLOSED_ERROR; } - runningListeners.put(androidClassKey, positioningListener); } catch(Exception e) { e.printStackTrace(); return QT_POSITION_UNKNOWN_SOURCE_ERROR; @@ -246,9 +292,7 @@ public class QtPositioning implements LocationListener synchronized (m_syncObject) { try { Log.d(TAG, "Stopping updates"); - QtPositioning listener = runningListeners.remove(androidClassKey); - locationManager.removeUpdates(listener); - listener.setActiveLooper(false); + removeActiveListener(androidClassKey); } catch(Exception e) { e.printStackTrace(); return; @@ -266,15 +310,11 @@ public class QtPositioning implements LocationListener positioningListener.isSingleUpdate = true; positioningListener.expectedProviders = locationProvider; positioningListener.isSatelliteUpdate = false; - //start update thread - positioningListener.setActiveLooper(true); if ((locationProvider & QT_GPS_PROVIDER) > 0) { Log.d(TAG, "Single update using GPS"); try { - locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, - positioningListener, - positioningListener.looper()); + addActiveListener(positioningListener, LocationManager.GPS_PROVIDER); } catch (SecurityException se) { se.printStackTrace(); exceptionOccurred = true; @@ -284,17 +324,14 @@ public class QtPositioning implements LocationListener if ((locationProvider & QT_NETWORK_PROVIDER) > 0) { Log.d(TAG, "Single update using network"); try { - locationManager.requestSingleUpdate(LocationManager.NETWORK_PROVIDER, - positioningListener, - positioningListener.looper()); + addActiveListener(positioningListener, LocationManager.NETWORK_PROVIDER); } catch (SecurityException se) { se.printStackTrace(); exceptionOccurred = true; } } if (exceptionOccurred) { - positioningListener.setActiveLooper(false); - locationManager.removeUpdates(positioningListener); + removeActiveListener(positioningListener); return QT_ACCESS_ERROR; } @@ -304,7 +341,6 @@ public class QtPositioning implements LocationListener return QT_CLOSED_ERROR; } - runningListeners.put(androidClassKey, positioningListener); } catch(Exception e) { e.printStackTrace(); return QT_POSITION_UNKNOWN_SOURCE_ERROR; @@ -324,8 +360,6 @@ public class QtPositioning implements LocationListener positioningListener.nativeClassReference = androidClassKey; positioningListener.expectedProviders = 1; //always satellite provider positioningListener.isSingleUpdate = isSingleRequest; - //start update thread - positioningListener.setActiveLooper(true); if (updateInterval == 0) updateInterval = 1000; //don't update more often than once per second @@ -335,18 +369,15 @@ public class QtPositioning implements LocationListener else Log.d(TAG, "Regular updates for Satellites " + updateInterval); try { - locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, - updateInterval, 0, - positioningListener, - positioningListener.looper()); + addActiveListener(positioningListener, LocationManager.GPS_PROVIDER, + updateInterval, 0); } catch (SecurityException se) { se.printStackTrace(); exceptionOccurred = true; } if (exceptionOccurred) { - positioningListener.setActiveLooper(false); - locationManager.removeUpdates(positioningListener); + removeActiveListener(positioningListener); return QT_ACCESS_ERROR; } @@ -356,7 +387,6 @@ public class QtPositioning implements LocationListener return QT_CLOSED_ERROR; } - runningListeners.put(androidClassKey, positioningListener); } catch(Exception e) { e.printStackTrace(); return QT_SATELLITE_UNKNOWN_SOURCE_ERROR; |