More Location Manager cleanup:
Move LocationCollector support out of GpsLocationProvider. Don't disable GPS when screen is off. Signed-off-by: Mike Lockwood <lockwood@android.com>
This commit is contained in:
@@ -126,7 +126,6 @@ public class LocationManagerService extends ILocationManager.Stub {
|
||||
|
||||
private final Context mContext;
|
||||
private GpsLocationProvider mGpsLocationProvider;
|
||||
private boolean mGpsNavigating;
|
||||
private LocationProviderProxy mNetworkLocationProvider;
|
||||
private IGeocodeProvider mGeocodeProvider;
|
||||
private LocationWorkerHandler mLocationHandler;
|
||||
@@ -600,12 +599,7 @@ public class LocationManagerService extends ILocationManager.Stub {
|
||||
"Installing location collectors outside of the system is not supported");
|
||||
}
|
||||
|
||||
synchronized (mLock) {
|
||||
mCollector = collector;
|
||||
if (mGpsLocationProvider != null) {
|
||||
mGpsLocationProvider.setLocationCollector(mCollector);
|
||||
}
|
||||
}
|
||||
mCollector = collector;
|
||||
}
|
||||
|
||||
public void setGeocodeProvider(IGeocodeProvider provider) {
|
||||
@@ -805,9 +799,6 @@ public class LocationManagerService extends ILocationManager.Stub {
|
||||
}
|
||||
} else {
|
||||
p.enableLocationTracking(false);
|
||||
if (p == mGpsLocationProvider) {
|
||||
mGpsNavigating = false;
|
||||
}
|
||||
p.disable();
|
||||
updateWakelockStatusLocked(mScreenOn);
|
||||
}
|
||||
@@ -1612,6 +1603,16 @@ public class LocationManagerService extends ILocationManager.Stub {
|
||||
|
||||
synchronized (mLock) {
|
||||
Location location = (Location) msg.obj;
|
||||
|
||||
if (mCollector != null &&
|
||||
LocationManager.GPS_PROVIDER.equals(location.getProvider())) {
|
||||
try {
|
||||
mCollector.updateLocation(location);
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, "mCollector.updateLocation failed");
|
||||
}
|
||||
}
|
||||
|
||||
String provider = location.getProvider();
|
||||
if (!isAllowedBySettingsLocked(provider)) {
|
||||
return;
|
||||
@@ -1767,10 +1768,7 @@ public class LocationManagerService extends ILocationManager.Stub {
|
||||
false);
|
||||
|
||||
synchronized (mLock) {
|
||||
if (enabled) {
|
||||
mGpsNavigating = true;
|
||||
} else {
|
||||
mGpsNavigating = false;
|
||||
if (!enabled) {
|
||||
// When GPS is disabled, we are OK to release wake-lock
|
||||
mWakeLockGpsReceived = true;
|
||||
}
|
||||
@@ -1798,12 +1796,6 @@ public class LocationManagerService extends ILocationManager.Stub {
|
||||
if (mGpsLocationProvider != null && mGpsLocationProvider.isLocationTracking()) {
|
||||
needsLock = true;
|
||||
minTime = Math.min(mGpsLocationProvider.getMinTime(), minTime);
|
||||
if (screenOn) {
|
||||
startGpsLocked();
|
||||
} else if (mScreenOn && !screenOn) {
|
||||
// We just turned the screen off so stop navigating
|
||||
stopGpsLocked();
|
||||
}
|
||||
}
|
||||
|
||||
mScreenOn = screenOn;
|
||||
@@ -1869,9 +1861,6 @@ public class LocationManagerService extends ILocationManager.Stub {
|
||||
mWakeLockAcquireTime = SystemClock.elapsedRealtime();
|
||||
log("Acquired wakelock");
|
||||
|
||||
// Start the gps provider
|
||||
startGpsLocked();
|
||||
|
||||
// Acquire cell lock
|
||||
if (mCellWakeLockAcquired) {
|
||||
// Lock is already acquired
|
||||
@@ -1902,22 +1891,6 @@ public class LocationManagerService extends ILocationManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
private void startGpsLocked() {
|
||||
boolean gpsActive = (mGpsLocationProvider != null)
|
||||
&& mGpsLocationProvider.isLocationTracking();
|
||||
if (gpsActive) {
|
||||
mGpsLocationProvider.startNavigating();
|
||||
}
|
||||
}
|
||||
|
||||
private void stopGpsLocked() {
|
||||
boolean gpsActive = mGpsLocationProvider != null
|
||||
&& mGpsLocationProvider.isLocationTracking();
|
||||
if (gpsActive) {
|
||||
mGpsLocationProvider.stopNavigating();
|
||||
}
|
||||
}
|
||||
|
||||
private void releaseWakeLockLocked() {
|
||||
try {
|
||||
releaseWakeLockXLocked();
|
||||
@@ -1938,11 +1911,6 @@ public class LocationManagerService extends ILocationManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
if (!mScreenOn) {
|
||||
// Stop the gps
|
||||
stopGpsLocked();
|
||||
}
|
||||
|
||||
// Release cell lock
|
||||
if (mCellWakeLockAcquired) {
|
||||
mTelephonyManager.disableLocationUpdates();
|
||||
@@ -2140,7 +2108,6 @@ public class LocationManagerService extends ILocationManager.Stub {
|
||||
pw.println("Current Location Manager state:");
|
||||
pw.println(" sProvidersLoaded=" + sProvidersLoaded);
|
||||
pw.println(" mGpsLocationProvider=" + mGpsLocationProvider);
|
||||
pw.println(" mGpsNavigating=" + mGpsNavigating);
|
||||
pw.println(" mNetworkLocationProvider=" + mNetworkLocationProvider);
|
||||
pw.println(" mCollector=" + mCollector);
|
||||
pw.println(" mAlarmInterval=" + mAlarmInterval
|
||||
|
||||
Reference in New Issue
Block a user