am bb79e5fd: Merge "Be tolerant of GPS session and engine on status messages arriving out of order." into eclair

Merge commit 'bb79e5fdb52eb86963fc688e6a455451b6e1a867' into eclair-plus-aosp

* commit 'bb79e5fdb52eb86963fc688e6a455451b6e1a867':
  Be tolerant of GPS session and engine on status messages arriving out of order.
This commit is contained in:
Mike Lockwood
2010-01-20 10:04:13 -08:00
committed by Android Git Automerger

View File

@ -183,6 +183,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;
@ -556,13 +559,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() {
@ -874,9 +881,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();
}
@ -919,7 +941,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();
}