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

Commit 5241a4cb authored by Wei Liu's avatar Wei Liu
Browse files

Create GpsLocationProvider only if GPS is supported.

The creation of GpsLocationProvider used to be inside the
GpsLocationProvider.isSupported() check.

https://googleplex-android-review.git.corp.google.com/#/c/288260/8/services/java/com/android/server/LocationManagerService.java
incorrectly moved it out.

b/20949616

Change-Id: I6ddd5be5a78f3156a4d5cfc4c756930558c3a8fc
parent 4f35e169
Loading
Loading
Loading
Loading
+17 −10
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ import android.location.GeocoderParams;
import android.location.Geofence;
import android.location.GpsMeasurementsEvent;
import android.location.GpsNavigationMessageEvent;
import android.location.IGpsGeofenceHardware;
import android.location.IGpsMeasurementsListener;
import android.location.IGpsNavigationMessageListener;
import android.location.IGpsStatusListener;
@@ -164,6 +165,7 @@ public class LocationManagerService extends ILocationManager.Stub {
    private LocationBlacklist mBlacklist;
    private GpsMeasurementsProvider mGpsMeasurementsProvider;
    private GpsNavigationMessageProvider mGpsNavigationMessageProvider;
    private IGpsGeofenceHardware mGpsGeofenceProxy;

    // --- fields below are protected by mLock ---
    // Set of providers that are explicitly enabled
@@ -403,18 +405,19 @@ public class LocationManagerService extends ILocationManager.Stub {
        addProviderLocked(passiveProvider);
        mEnabledProviders.add(passiveProvider.getName());
        mPassiveProvider = passiveProvider;

        if (GpsLocationProvider.isSupported()) {
            // Create a gps location provider
            GpsLocationProvider gpsProvider = new GpsLocationProvider(mContext, this,
                    mLocationHandler.getLooper());

        if (GpsLocationProvider.isSupported()) {
            mGpsStatusProvider = gpsProvider.getGpsStatusProvider();
            mNetInitiatedListener = gpsProvider.getNetInitiatedListener();
            addProviderLocked(gpsProvider);
            mRealProviders.put(LocationManager.GPS_PROVIDER, gpsProvider);
        }
            mGpsMeasurementsProvider = gpsProvider.getGpsMeasurementsProvider();
            mGpsNavigationMessageProvider = gpsProvider.getGpsNavigationMessageProvider();
            mGpsGeofenceProxy = gpsProvider.getGpsGeofenceProxy();
        }

        /*
        Load package name(s) containing location provider support.
@@ -510,7 +513,7 @@ public class LocationManagerService extends ILocationManager.Stub {
                com.android.internal.R.string.config_geofenceProviderPackageName,
                com.android.internal.R.array.config_locationProviderPackageNames,
                mLocationHandler,
                gpsProvider.getGpsGeofenceProxy(),
                mGpsGeofenceProxy,
                flpHardwareProvider != null ? flpHardwareProvider.getGeofenceHardware() : null);
        if (provider == null) {
            Slog.e(TAG,  "Unable to bind FLP Geofence proxy.");
@@ -1854,7 +1857,7 @@ public class LocationManagerService extends ILocationManager.Stub {
            Binder.restoreCallingIdentity(identity);
        }

        if (!hasLocationAccess) {
        if (!hasLocationAccess || mGpsMeasurementsProvider == null) {
            return false;
        }
        return mGpsMeasurementsProvider.addListener(listener);
@@ -1862,8 +1865,10 @@ public class LocationManagerService extends ILocationManager.Stub {

    @Override
    public void removeGpsMeasurementsListener(IGpsMeasurementsListener listener) {
        if (mGpsMeasurementsProvider != null) {
            mGpsMeasurementsProvider.removeListener(listener);
        }
    }

    @Override
    public boolean addGpsNavigationMessageListener(
@@ -1883,7 +1888,7 @@ public class LocationManagerService extends ILocationManager.Stub {
            Binder.restoreCallingIdentity(identity);
        }

        if (!hasLocationAccess) {
        if (!hasLocationAccess || mGpsNavigationMessageProvider == null) {
            return false;
        }
        return mGpsNavigationMessageProvider.addListener(listener);
@@ -1891,8 +1896,10 @@ public class LocationManagerService extends ILocationManager.Stub {

    @Override
    public void removeGpsNavigationMessageListener(IGpsNavigationMessageListener listener) {
        if (mGpsNavigationMessageProvider != null) {
            mGpsNavigationMessageProvider.removeListener(listener);
        }
    }

    @Override
    public boolean sendExtraCommand(String provider, String command, Bundle extras) {
+3 −1
Original line number Diff line number Diff line
@@ -129,7 +129,9 @@ public final class GeofenceProxy {

    private void setGpsGeofenceLocked() {
        try {
            if (mGpsGeofenceHardware != null) {
                mGeofenceHardware.setGpsGeofenceHardware(mGpsGeofenceHardware);
            }
        } catch (RemoteException e) {
            Log.e(TAG, "Error while connecting to GeofenceHardwareService");
        }
+1 −2
Original line number Diff line number Diff line
@@ -450,7 +450,6 @@ public class GpsLocationProvider implements LocationProviderInterface {
                    networkState = LocationProvider.AVAILABLE;
                }


                updateNetworkState(networkState, info);
            } else if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(action)
                    || Intent.ACTION_SCREEN_OFF.equals(action)