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

Commit 5972e52e authored by Mike Lockwood's avatar Mike Lockwood
Browse files

resolved conflicts for merge of 53b07027 to master

Change-Id: Ia5ce86d84454a4be76e71aeb77942ba8d88d2700
parents 07b88ea0 53b07027
Loading
Loading
Loading
Loading
+34 −10
Original line number Original line Diff line number Diff line
@@ -58,6 +58,7 @@ import android.util.Log;
import android.util.Slog;
import android.util.Slog;
import android.util.PrintWriterPrinter;
import android.util.PrintWriterPrinter;


import com.android.internal.content.PackageMonitor;
import com.android.internal.location.GpsNetInitiatedHandler;
import com.android.internal.location.GpsNetInitiatedHandler;


import com.android.server.location.GeocoderProxy;
import com.android.server.location.GeocoderProxy;
@@ -116,13 +117,15 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
    private static boolean sProvidersLoaded = false;
    private static boolean sProvidersLoaded = false;


    private final Context mContext;
    private final Context mContext;
    private final String mNetworkLocationProviderPackageName;
    private final String mGeocodeProviderPackageName;
    private GeocoderProxy mGeocodeProvider;
    private GeocoderProxy mGeocodeProvider;
    private IGpsStatusProvider mGpsStatusProvider;
    private IGpsStatusProvider mGpsStatusProvider;
    private INetInitiatedListener mNetInitiatedListener;
    private INetInitiatedListener mNetInitiatedListener;
    private LocationWorkerHandler mLocationHandler;
    private LocationWorkerHandler mLocationHandler;


    // Cache the real providers for use in addTestProvider() and removeTestProvider()
    // Cache the real providers for use in addTestProvider() and removeTestProvider()
     LocationProviderInterface mNetworkLocationProvider;
     LocationProviderProxy mNetworkLocationProvider;
     LocationProviderInterface mGpsLocationProvider;
     LocationProviderInterface mGpsLocationProvider;


    // Handler messages
    // Handler messages
@@ -473,19 +476,17 @@ public class LocationManagerService extends ILocationManager.Stub implements Run


        // initialize external network location and geocoder services
        // initialize external network location and geocoder services
        PackageManager pm = mContext.getPackageManager();
        PackageManager pm = mContext.getPackageManager();
        Resources resources = mContext.getResources();
        if (mNetworkLocationProviderPackageName != null &&
        String serviceName = resources.getString(
                pm.resolveService(new Intent(mNetworkLocationProviderPackageName), 0) != null) {
                com.android.internal.R.string.config_networkLocationProvider);
        if (serviceName != null && pm.resolveService(new Intent(serviceName), 0) != null) {
            mNetworkLocationProvider =
            mNetworkLocationProvider =
                new LocationProviderProxy(mContext, LocationManager.NETWORK_PROVIDER,
                new LocationProviderProxy(mContext, LocationManager.NETWORK_PROVIDER,
                        serviceName, mLocationHandler);
                        mNetworkLocationProviderPackageName, mLocationHandler);
            addProvider(mNetworkLocationProvider);
            addProvider(mNetworkLocationProvider);
        }
        }


        serviceName = resources.getString(com.android.internal.R.string.config_geocodeProvider);
        if (mGeocodeProviderPackageName != null &&
        if (serviceName != null && pm.resolveService(new Intent(serviceName), 0) != null) {
                pm.resolveService(new Intent(mGeocodeProviderPackageName), 0) != null) {
            mGeocodeProvider = new GeocoderProxy(mContext, serviceName);
            mGeocodeProvider = new GeocoderProxy(mContext, mGeocodeProviderPackageName);
        }
        }


        updateProvidersLocked();
        updateProvidersLocked();
@@ -497,6 +498,12 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
    public LocationManagerService(Context context) {
    public LocationManagerService(Context context) {
        super();
        super();
        mContext = context;
        mContext = context;
        Resources resources = context.getResources();
        mNetworkLocationProviderPackageName = resources.getString(
                com.android.internal.R.string.config_networkLocationProvider);
        mGeocodeProviderPackageName = resources.getString(
                com.android.internal.R.string.config_geocodeProvider);
        mPackageMonitor.register(context, true);


        if (LOCAL_LOGV) {
        if (LOCAL_LOGV) {
            Slog.v(TAG, "Constructed LocationManager Service");
            Slog.v(TAG, "Constructed LocationManager Service");
@@ -1921,6 +1928,23 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
        }
        }
    };
    };


    private final PackageMonitor mPackageMonitor = new PackageMonitor() {
        @Override
        public void onPackageUpdateFinished(String packageName, int uid) {
            String packageDot = packageName + ".";

            // reconnect to external providers after their packages have been updated
            if (mNetworkLocationProvider != null &&
                    mNetworkLocationProviderPackageName.startsWith(packageDot)) {
                mNetworkLocationProvider.reconnect();
            }
            if (mGeocodeProvider != null &&
                    mGeocodeProviderPackageName.startsWith(packageDot)) {
                mGeocodeProvider.reconnect();
            }
        }
    };

    // Wake locks
    // Wake locks


    private void incrementPendingBroadcasts() {
    private void incrementPendingBroadcasts() {
+9 −2
Original line number Original line Diff line number Diff line
@@ -50,17 +50,24 @@ public class GeocoderProxy {
        mContext.bindService(mIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
        mContext.bindService(mIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
    }
    }


    public void reconnect() {
        synchronized (mServiceConnection) {
            mContext.unbindService(mServiceConnection);
            mContext.bindService(mIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
        }
    }

    private class Connection implements ServiceConnection {
    private class Connection implements ServiceConnection {
        public void onServiceConnected(ComponentName className, IBinder service) {
        public void onServiceConnected(ComponentName className, IBinder service) {
            Log.d(TAG, "onServiceConnected " + className);
            Log.d(TAG, "onServiceConnected " + className);
            synchronized (this) {
            synchronized (mServiceConnection) {
                mProvider = IGeocodeProvider.Stub.asInterface(service);
                mProvider = IGeocodeProvider.Stub.asInterface(service);
            }
            }
        }
        }


        public void onServiceDisconnected(ComponentName className) {
        public void onServiceDisconnected(ComponentName className) {
            Log.d(TAG, "onServiceDisconnected " + className);
            Log.d(TAG, "onServiceDisconnected " + className);
            synchronized (this) {
            synchronized (mServiceConnection) {
                mProvider = null;
                mProvider = null;
            }
            }
        }
        }
+13 −2
Original line number Original line Diff line number Diff line
@@ -45,6 +45,7 @@ public class LocationProviderProxy implements LocationProviderInterface {


    private final Context mContext;
    private final Context mContext;
    private final String mName;
    private final String mName;
    private final String mServiceName;
    private ILocationProvider mProvider;
    private ILocationProvider mProvider;
    private Handler mHandler;
    private Handler mHandler;
    private final Connection mServiceConnection = new Connection();
    private final Connection mServiceConnection = new Connection();
@@ -65,14 +66,24 @@ public class LocationProviderProxy implements LocationProviderInterface {
            Handler handler) {
            Handler handler) {
        mContext = context;
        mContext = context;
        mName = name;
        mName = name;
        mServiceName = serviceName;
        mHandler = handler;
        mHandler = handler;
        mContext.bindService(new Intent(serviceName), mServiceConnection, Context.BIND_AUTO_CREATE);
        mContext.bindService(new Intent(serviceName), mServiceConnection, Context.BIND_AUTO_CREATE);
    }
    }


    public void reconnect() {
        synchronized (mServiceConnection) {
            // unbind first
            mContext.unbindService(mServiceConnection);
            mContext.bindService(new Intent(mServiceName), mServiceConnection,
                Context.BIND_AUTO_CREATE);
        }
    }

    private class Connection implements ServiceConnection {
    private class Connection implements ServiceConnection {
        public void onServiceConnected(ComponentName className, IBinder service) {
        public void onServiceConnected(ComponentName className, IBinder service) {
            Log.d(TAG, "LocationProviderProxy.onServiceConnected " + className);
            Log.d(TAG, "LocationProviderProxy.onServiceConnected " + className);
            synchronized (this) {
            synchronized (mServiceConnection) {
                mProvider = ILocationProvider.Stub.asInterface(service);
                mProvider = ILocationProvider.Stub.asInterface(service);
                if (mProvider != null) {
                if (mProvider != null) {
                    mHandler.post(mServiceConnectedTask);
                    mHandler.post(mServiceConnectedTask);
@@ -82,7 +93,7 @@ public class LocationProviderProxy implements LocationProviderInterface {


        public void onServiceDisconnected(ComponentName className) {
        public void onServiceDisconnected(ComponentName className) {
            Log.d(TAG, "LocationProviderProxy.onServiceDisconnected " + className);
            Log.d(TAG, "LocationProviderProxy.onServiceDisconnected " + className);
            synchronized (this) {
            synchronized (mServiceConnection) {
                mProvider = null;
                mProvider = null;
            }
            }
        }
        }