Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 98cb6679 authored by Mike Lockwood's avatar Mike Lockwood
Browse files

More Location Manager cleanup:



Move LocationCollector support out of GpsLocationProvider.
Don't disable GPS when screen is off.

Signed-off-by: default avatarMike Lockwood <lockwood@android.com>
parent 981980e5
Loading
Loading
Loading
Loading
+0 −17
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.location.Criteria;
import android.location.IGpsStatusListener;
import android.location.ILocationCollector;
import android.location.ILocationManager;
import android.location.Location;
import android.location.LocationManager;
@@ -207,8 +206,6 @@ public class GpsLocationProvider extends LocationProviderImpl {
    // current setting - 5 minutes
    private static final long RETRY_INTERVAL = 5*60*1000; 

    private ILocationCollector mCollector;

    private class TelephonyBroadcastReceiver extends BroadcastReceiver {
        @Override public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
@@ -272,10 +269,6 @@ public class GpsLocationProvider extends LocationProviderImpl {
        }
    }

    public void setLocationCollector(ILocationCollector collector) {
        mCollector = collector;
    }

    /**
     * Returns true if the provider requires access to a
     * data network (e.g., the Internet), false otherwise.
@@ -729,16 +722,6 @@ public class GpsLocationProvider extends LocationProviderImpl {
            }

            reportLocationChanged(mLocation);

            // Send to collector
            if ((flags & LOCATION_HAS_LAT_LONG) == LOCATION_HAS_LAT_LONG
                    && mCollector != null) {
                try {
                    mCollector.updateLocation(mLocation);
                } catch (RemoteException e) {
                    Log.w(TAG, "mCollector.updateLocation failed");
                }
            }
        }

        if (mStarted && mStatus != AVAILABLE) {
+12 −45
Original line number Diff line number Diff line
@@ -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);
            }
        }
    }

    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