163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn/*
263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Copyright (C) 2010 The Android Open Source Project
363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn *
463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * you may not use this file except in compliance with the License.
663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * You may obtain a copy of the License at
763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn *
863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn *
1063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Unless required by applicable law or agreed to in writing, software
1163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
1263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * See the License for the specific language governing permissions and
1463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * limitations under the License.
1563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */
1663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
1763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornpackage com.android.location.provider;
1863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
1963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.os.IBinder;
2063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
2163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.location.Address;
2263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.location.GeocoderParams;
2363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.location.IGeocodeProvider;
2463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
2563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport java.util.List;
2663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
2763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn/**
28b03c8c508dcbbef364e624ad5bc0ab6fa6733dc7Nick Pelly * Base class for geocode providers implemented as unbundled services.
29b03c8c508dcbbef364e624ad5bc0ab6fa6733dc7Nick Pelly *
30b03c8c508dcbbef364e624ad5bc0ab6fa6733dc7Nick Pelly * <p>Geocode providers can be implemented as services and return the result of
3163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * {@link GeocodeProvider#getBinder()} in its getBinder() method.
3263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn *
33b03c8c508dcbbef364e624ad5bc0ab6fa6733dc7Nick Pelly * <p>IMPORTANT: This class is effectively a public API for unbundled
34b03c8c508dcbbef364e624ad5bc0ab6fa6733dc7Nick Pelly * applications, and must remain API stable. See README.txt in the root
35b03c8c508dcbbef364e624ad5bc0ab6fa6733dc7Nick Pelly * of this package for more information.
3663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */
3763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornpublic abstract class GeocodeProvider {
3863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
3963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    private IGeocodeProvider.Stub mProvider = new IGeocodeProvider.Stub() {
4063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public String getFromLocation(double latitude, double longitude, int maxResults,
4163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn                GeocoderParams params, List<Address> addrs) {
4263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return GeocodeProvider.this.onGetFromLocation(latitude, longitude, maxResults,
4363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn                    params, addrs);
4463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
4563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
4663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public String getFromLocationName(String locationName,
4763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn                double lowerLeftLatitude, double lowerLeftLongitude,
4863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn                double upperRightLatitude, double upperRightLongitude, int maxResults,
4963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn                GeocoderParams params, List<Address> addrs) {
5063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return GeocodeProvider.this.onGetFromLocationName(locationName, lowerLeftLatitude,
5163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn                    lowerLeftLongitude, upperRightLatitude, upperRightLongitude,
5263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn                    maxResults, params, addrs);
5363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
5463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    };
5563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
5663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
5763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * This method is overridden to implement the
5863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * {@link android.location.Geocoder#getFromLocation(double, double, int)} method.
5963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Classes implementing this method should not hold a reference to the params parameter.
6063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
6163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract String onGetFromLocation(double latitude, double longitude, int maxResults,
6263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            GeocoderParams params, List<Address> addrs);
6363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
6463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
6563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * This method is overridden to implement the
6663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * {@link android.location.Geocoder#getFromLocationName(String, int, double, double, double, double)} method.
6763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Classes implementing this method should not hold a reference to the params parameter.
6863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
6963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract String onGetFromLocationName(String locationName,
7063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            double lowerLeftLatitude, double lowerLeftLongitude,
7163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            double upperRightLatitude, double upperRightLongitude, int maxResults,
7263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            GeocoderParams params, List<Address> addrs);
7363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
7463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
7563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Returns the Binder interface for the geocode provider.
7663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * This is intended to be used for the onBind() method of
7763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * a service that implements a geocoder service.
7863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
7963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @return the IBinder instance for the provider
8063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
8163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public IBinder getBinder() {
8263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        return mProvider;
8363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    }
8463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn}
85