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

Commit 01ac80b7 authored by Mark Vandevoorde's avatar Mark Vandevoorde
Browse files

Add Geocorder.isImplemented()

The Geocorder interface is not part of the Android core.  It
requires a backend service which may or may not be available
on a device.  The new isImplemented static method allows
apps to discover whether the Geocorder is in fact available
on the device.

Change-Id: I2b5cf7bcc9cce4766bcbb156e91edf34b01f9296
parent 11c6847d
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line
@@ -82140,6 +82140,17 @@
<exception name="IOException" type="java.io.IOException">
<exception name="IOException" type="java.io.IOException">
</exception>
</exception>
</method>
</method>
<method name="isImplemented"
 return="java.lang.Boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="true"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
</class>
</class>
<class name="GeocoderParams"
<class name="GeocoderParams"
 extends="java.lang.Object"
 extends="java.lang.Object"
+20 −1
Original line number Original line Diff line number Diff line
@@ -40,7 +40,9 @@ import java.util.List;
 *
 *
 * The Geocoder class requires a backend service that is not included in
 * The Geocoder class requires a backend service that is not included in
 * the core android framework.  The Geocoder query methods will return an
 * the core android framework.  The Geocoder query methods will return an
 * empty list if there no backend service in the platform.
 * empty list if there no backend service in the platform.  Use the
 * isImplemented() method to determine whether a Geocoder implementation
 * exists.
 */
 */
public final class Geocoder {
public final class Geocoder {
    private static final String TAG = "Geocoder";
    private static final String TAG = "Geocoder";
@@ -48,6 +50,23 @@ public final class Geocoder {
    private GeocoderParams mParams;
    private GeocoderParams mParams;
    private ILocationManager mService;
    private ILocationManager mService;


    /**
     * Returns true if the Geocoder methods getFromLocation and
     * getFromLocationName are implemented.  Lack of network
     * connectivity may still cause these methods to return null or
     * empty lists.
     */
    public static Boolean isImplemented() {
        IBinder b = ServiceManager.getService(Context.LOCATION_SERVICE);
        ILocationManager lm = ILocationManager.Stub.asInterface(b);
        try {
            return lm.geocoderIsImplemented();
        } catch (RemoteException e) {
            Log.e(TAG, "isImplemented: got RemoteException", e);
            return false;
        }
    }

    /**
    /**
     * Constructs a Geocoder whose responses will be localized for the
     * Constructs a Geocoder whose responses will be localized for the
     * given Locale.
     * given Locale.
+1 −0
Original line number Original line Diff line number Diff line
@@ -67,6 +67,7 @@ interface ILocationManager
    // it need not be shared with other providers.
    // it need not be shared with other providers.
    void reportLocation(in Location location, boolean passive);
    void reportLocation(in Location location, boolean passive);


    boolean geocoderIsImplemented();
    String getFromLocation(double latitude, double longitude, int maxResults,
    String getFromLocation(double latitude, double longitude, int maxResults,
        in GeocoderParams params, out List<Address> addrs);
        in GeocoderParams params, out List<Address> addrs);
    String getFromLocationName(String locationName,
    String getFromLocationName(String locationName,
+4 −0
Original line number Original line Diff line number Diff line
@@ -1940,6 +1940,10 @@ public class LocationManagerService extends ILocationManager.Stub implements Run


    // Geocoder
    // Geocoder


    public Boolean geocoderIsImplemented() {
        return mGeocodeProvider != null;
    }

    public String getFromLocation(double latitude, double longitude, int maxResults,
    public String getFromLocation(double latitude, double longitude, int maxResults,
            GeocoderParams params, List<Address> addrs) {
            GeocoderParams params, List<Address> addrs) {
        if (mGeocodeProvider != null) {
        if (mGeocodeProvider != null) {