summaryrefslogtreecommitdiffstats
path: root/location
diff options
context:
space:
mode:
authorMike Lockwood <lockwood@google.com>2010-01-22 17:04:47 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2010-01-22 17:04:47 -0800
commit345bf168db1534685232ef809c5669be6c65a949 (patch)
tree83841a927782c90eecfa97b68eb5143c8cb27f40 /location
parent92da0b4453b46f314a9acdc60302cf196ff0d1fe (diff)
parent47d302a001c71f90bee8dc31d868b463a47f2d51 (diff)
downloadframeworks_base-345bf168db1534685232ef809c5669be6c65a949.zip
frameworks_base-345bf168db1534685232ef809c5669be6c65a949.tar.gz
frameworks_base-345bf168db1534685232ef809c5669be6c65a949.tar.bz2
am 47d302a0: am bb79e5fd: Merge "Be tolerant of GPS session and engine on status messages arriving out of order." into eclair
Merge commit '47d302a001c71f90bee8dc31d868b463a47f2d51' * commit '47d302a001c71f90bee8dc31d868b463a47f2d51': Be tolerant of GPS session and engine on status messages arriving out of order.
Diffstat (limited to 'location')
-rwxr-xr-xlocation/java/com/android/internal/location/GpsLocationProvider.java33
1 files changed, 28 insertions, 5 deletions
diff --git a/location/java/com/android/internal/location/GpsLocationProvider.java b/location/java/com/android/internal/location/GpsLocationProvider.java
index ee56621..9d67882 100755
--- a/location/java/com/android/internal/location/GpsLocationProvider.java
+++ b/location/java/com/android/internal/location/GpsLocationProvider.java
@@ -181,6 +181,9 @@ public class GpsLocationProvider extends ILocationProvider.Stub {
// true if GPS is navigating
private boolean mNavigating;
+
+ // true if GPS engine is on
+ private boolean mEngineOn;
// requested frequency of fixes, in seconds
private int mFixInterval = 1;
@@ -555,13 +558,17 @@ public class GpsLocationProvider extends ILocationProvider.Stub {
mNetworkThread = null;
}
+ // do this before releasing wakelock
+ native_cleanup();
+
// The GpsEventThread does not wait for the GPS to shutdown
// so we need to report the GPS_STATUS_ENGINE_OFF event here
if (mNavigating) {
+ reportStatus(GPS_STATUS_SESSION_END);
+ }
+ if (mEngineOn) {
reportStatus(GPS_STATUS_ENGINE_OFF);
}
-
- native_cleanup();
}
public boolean isEnabled() {
@@ -873,9 +880,24 @@ public class GpsLocationProvider extends ILocationProvider.Stub {
synchronized(mListeners) {
boolean wasNavigating = mNavigating;
- mNavigating = (status == GPS_STATUS_SESSION_BEGIN);
- if (mNavigating && !mWakeLock.isHeld()) {
+ switch (status) {
+ case GPS_STATUS_SESSION_BEGIN:
+ mNavigating = true;
+ break;
+ case GPS_STATUS_SESSION_END:
+ mNavigating = false;
+ break;
+ case GPS_STATUS_ENGINE_ON:
+ mEngineOn = true;
+ break;
+ case GPS_STATUS_ENGINE_OFF:
+ mEngineOn = false;
+ break;
+ }
+
+ // beware, the events can come out of order
+ if ((mNavigating || mEngineOn) && !mWakeLock.isHeld()) {
if (DEBUG) Log.d(TAG, "Acquiring wakelock");
mWakeLock.acquire();
}
@@ -918,7 +940,8 @@ public class GpsLocationProvider extends ILocationProvider.Stub {
mContext.sendBroadcast(intent);
}
- if (status == GPS_STATUS_ENGINE_OFF && mWakeLock.isHeld()) {
+ // beware, the events can come out of order
+ if (!mNavigating && !mEngineOn && mWakeLock.isHeld()) {
if (DEBUG) Log.d(TAG, "Releasing wakelock");
mWakeLock.release();
}