summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2016-02-02 13:12:52 +0100
committerOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2016-02-02 13:12:52 +0100
commit15b466c72531343e6180824c7416c0767079aaa8 (patch)
tree1559344f9bf37b10434c346db0d56a4db18715ba
parent3641cecaa91c9e480fe070572a3ec72cfef2ba3c (diff)
parent24e50e40caaa2f2e057180b8ed8179795e605e2a (diff)
downloadqtlocation-15b466c72531343e6180824c7416c0767079aaa8.tar.gz
Merge 5.6 into 5.6.0
Change-Id: I0ed42c15cff4f572bc59cdc9f021ef2303444ea1
-rw-r--r--src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java102
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 e67ffe12..44214f53 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
@@ -173,6 +173,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) {
@@ -182,8 +234,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
@@ -192,10 +242,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;
@@ -205,18 +254,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;
}
@@ -225,7 +272,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;
@@ -240,9 +286,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;
@@ -260,15 +304,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;
@@ -278,17 +318,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;
}
@@ -298,7 +335,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;
@@ -318,8 +354,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
@@ -329,18 +363,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;
}
@@ -350,7 +381,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;