diff options
author | Mike Lockwood <lockwood@google.com> | 2010-01-22 17:04:47 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-01-22 17:04:47 -0800 |
commit | 345bf168db1534685232ef809c5669be6c65a949 (patch) | |
tree | 83841a927782c90eecfa97b68eb5143c8cb27f40 /location/java/com | |
parent | 92da0b4453b46f314a9acdc60302cf196ff0d1fe (diff) | |
parent | 47d302a001c71f90bee8dc31d868b463a47f2d51 (diff) | |
download | frameworks_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/java/com')
-rwxr-xr-x | location/java/com/android/internal/location/GpsLocationProvider.java | 33 |
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(); } |