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

Commit d03ff94f authored by Mike Lockwood's avatar Mike Lockwood
Browse files

Clean up interface between LocationManagerService and the location providers:



LocationManagerService now uses new Java interface LocationProviderInterface
rather than LocationProviderProxy to refer to location providers internally.

LocationProviderProxy and the ILocationProvider binder interface are only
used for location providers implemented as services (NetworkLocationProvider)

Built-in location providers (GpsLocationProvider and mock providers) now just
implement LocationProviderInterface rather than using a Binder interface and proxy object.

Delete obsolete and unused TestLocationProvider class.

Change-Id: Id800e7c1864f7c666f8e37125c05896493b9c8c4
Signed-off-by: default avatarMike Lockwood <lockwood@android.com>
parent ca35953c
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -22,7 +22,6 @@ import android.location.GeocoderParams;
import android.location.IGeocodeProvider;
import android.location.IGeocodeProvider;
import android.location.IGpsStatusListener;
import android.location.IGpsStatusListener;
import android.location.ILocationListener;
import android.location.ILocationListener;
import android.location.ILocationProvider;
import android.location.Location;
import android.location.Location;
import android.os.Bundle;
import android.os.Bundle;


+1 −1
Original line number Original line Diff line number Diff line
@@ -21,7 +21,7 @@ import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Bundle;


/**
/**
 * Binder interface for location providers.
 * Binder interface for services that implement location providers.
 *
 *
 * {@hide}
 * {@hide}
 */
 */
+51 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.location;

import android.location.Location;
import android.net.NetworkInfo;
import android.os.Bundle;

/**
 * Location Manager's interface for location providers.
 *
 * {@hide}
 */
public interface LocationProviderInterface {
    String getName();
    boolean requiresNetwork();
    boolean requiresSatellite();
    boolean requiresCell();
    boolean hasMonetaryCost();
    boolean supportsAltitude();
    boolean supportsSpeed();
    boolean supportsBearing();
    int getPowerRequirement();
    int getAccuracy();
    boolean isEnabled();
    void enable();
    void disable();
    int getStatus(Bundle extras);
    long getStatusUpdateTime();
    void enableLocationTracking(boolean enable);
    void setMinTime(long minTime);
    void updateNetworkState(int state, NetworkInfo info);
    void updateLocation(Location location);
    boolean sendExtraCommand(String command, Bundle extras);
    void addListener(int uid);
    void removeListener(int uid);
}
+13 −2
Original line number Original line Diff line number Diff line
@@ -26,11 +26,11 @@ import android.location.Criteria;
import android.location.IGpsStatusListener;
import android.location.IGpsStatusListener;
import android.location.IGpsStatusProvider;
import android.location.IGpsStatusProvider;
import android.location.ILocationManager;
import android.location.ILocationManager;
import android.location.ILocationProvider;
import android.location.INetInitiatedListener;
import android.location.INetInitiatedListener;
import android.location.Location;
import android.location.Location;
import android.location.LocationManager;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.location.LocationProvider;
import android.location.LocationProviderInterface;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo;
import android.net.SntpClient;
import android.net.SntpClient;
@@ -65,7 +65,7 @@ import java.util.Map.Entry;
 *
 *
 * {@hide}
 * {@hide}
 */
 */
public class GpsLocationProvider extends ILocationProvider.Stub {
public class GpsLocationProvider implements LocationProviderInterface {


    private static final String TAG = "GpsLocationProvider";
    private static final String TAG = "GpsLocationProvider";


@@ -373,6 +373,13 @@ public class GpsLocationProvider extends ILocationProvider.Stub {
        }
        }
    }
    }


    /**
     * Returns the name of this provider.
     */
    public String getName() {
        return LocationManager.GPS_PROVIDER;
    }

    /**
    /**
     * Returns true if the provider requires access to a
     * Returns true if the provider requires access to a
     * data network (e.g., the Internet), false otherwise.
     * data network (e.g., the Internet), false otherwise.
@@ -576,6 +583,10 @@ public class GpsLocationProvider extends ILocationProvider.Stub {
        }
        }
    }
    }


    public boolean isEnabled() {
        return mEnabled;
    }

    public int getStatus(Bundle extras) {
    public int getStatus(Bundle extras) {
        if (extras != null) {
        if (extras != null) {
            extras.putInt("satellites", mSvCount);
            extras.putInt("satellites", mSvCount);
+4 −12
Original line number Original line Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.Intent;
import android.content.ServiceConnection;
import android.content.ServiceConnection;
import android.location.ILocationProvider;
import android.location.ILocationProvider;
import android.location.Location;
import android.location.Location;
import android.location.LocationProviderInterface;
import android.net.NetworkInfo;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler;
@@ -31,18 +32,17 @@ import android.os.SystemClock;
import android.util.Log;
import android.util.Log;


/**
/**
 * A class for proxying ILocationProvider implementations.
 * A class for proxying location providers implemented as services.
 *
 *
 * {@hide}
 * {@hide}
 */
 */
public class LocationProviderProxy {
public class LocationProviderProxy implements LocationProviderInterface {


    private static final String TAG = "LocationProviderProxy";
    private static final String TAG = "LocationProviderProxy";


    private final Context mContext;
    private final Context mContext;
    private final String mName;
    private final String mName;
    private ILocationProvider mProvider;
    private ILocationProvider mProvider;
    private Intent mIntent;
    private Handler mHandler;
    private Handler mHandler;
    private final Connection mServiceConnection = new Connection();
    private final Connection mServiceConnection = new Connection();


@@ -56,21 +56,13 @@ public class LocationProviderProxy {
    // for caching requiresNetwork, requiresSatellite, etc.
    // for caching requiresNetwork, requiresSatellite, etc.
    private DummyLocationProvider mCachedAttributes;
    private DummyLocationProvider mCachedAttributes;


    // constructor for proxying built-in location providers
    public LocationProviderProxy(Context context, String name, ILocationProvider provider) {
        mContext = context;
        mName = name;
        mProvider = provider;
    }

    // constructor for proxying location providers implemented in a separate service
    // constructor for proxying location providers implemented in a separate service
    public LocationProviderProxy(Context context, String name, String serviceName,
    public LocationProviderProxy(Context context, String name, String serviceName,
            Handler handler) {
            Handler handler) {
        mContext = context;
        mContext = context;
        mName = name;
        mName = name;
        mIntent = new Intent(serviceName);
        mHandler = handler;
        mHandler = handler;
        mContext.bindService(mIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
        mContext.bindService(new Intent(serviceName), mServiceConnection, Context.BIND_AUTO_CREATE);
    }
    }


    private class Connection implements ServiceConnection {
    private class Connection implements ServiceConnection {
Loading