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.content.Context;
2063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.net.NetworkInfo;
2163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.location.Criteria;
2263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.location.ILocationManager;
2363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.location.ILocationProvider;
2463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.location.Location;
2563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.os.Bundle;
2663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.os.IBinder;
2763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.os.RemoteException;
2863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.os.ServiceManager;
2963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.os.WorkSource;
3063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.util.Log;
3163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
3263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn/**
3363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * An abstract superclass for location providers that are implemented
3463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * outside of the core android platform.
3563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Location providers can be implemented as services and return the result of
3663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * {@link LocationProvider#getBinder()} in its getBinder() method.
3763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn *
3863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @hide
3963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */
4063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornpublic abstract class LocationProvider {
4163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
4263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    private static final String TAG = "LocationProvider";
4363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
4463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    private ILocationManager mLocationManager;
4563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
4663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    private ILocationProvider.Stub mProvider = new ILocationProvider.Stub() {
4763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
4863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public boolean requiresNetwork() {
4963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return LocationProvider.this.onRequiresNetwork();
5063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
5163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
5263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public boolean requiresSatellite() {
5363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return LocationProvider.this.onRequiresSatellite();
5463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
5563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
5663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public boolean requiresCell() {
5763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return LocationProvider.this.onRequiresCell();
5863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
5963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
6063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public boolean hasMonetaryCost() {
6163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return LocationProvider.this.onHasMonetaryCost();
6263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
6363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
6463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public boolean supportsAltitude() {
6563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return LocationProvider.this.onSupportsAltitude();
6663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
6763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
6863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public boolean supportsSpeed() {
6963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return LocationProvider.this.onSupportsSpeed();
7063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
7163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
7263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public boolean supportsBearing() {
7363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return LocationProvider.this.onSupportsBearing();
7463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
7563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
7663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public int getPowerRequirement() {
7763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return LocationProvider.this.onGetPowerRequirement();
7863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
7963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
8063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public boolean meetsCriteria(Criteria criteria) {
8163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return LocationProvider.this.onMeetsCriteria(criteria);
8263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
8363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
8463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public int getAccuracy() {
8563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return LocationProvider.this.onGetAccuracy();
8663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
8763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
8863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public void enable() {
8963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            LocationProvider.this.onEnable();
9063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
9163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
9263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public void disable() {
9363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            LocationProvider.this.onDisable();
9463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
9563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
9663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public int getStatus(Bundle extras) {
9763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return LocationProvider.this.onGetStatus(extras);
9863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
9963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
10063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public long getStatusUpdateTime() {
10163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return LocationProvider.this.onGetStatusUpdateTime();
10263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
10363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
10463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public String getInternalState() {
10563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return LocationProvider.this.onGetInternalState();
10663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
10763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
10863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public void enableLocationTracking(boolean enable) {
10963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            LocationProvider.this.onEnableLocationTracking(enable);
11063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
11163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
11263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public void setMinTime(long minTime, WorkSource ws) {
11363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            LocationProvider.this.onSetMinTime(minTime, ws);
11463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
11563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
11663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public void updateNetworkState(int state, NetworkInfo info) {
11763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            LocationProvider.this.onUpdateNetworkState(state, info);
11863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
11963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
12063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public void updateLocation(Location location) {
12163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            LocationProvider.this.onUpdateLocation(location);
12263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
12363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
12463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public boolean sendExtraCommand(String command, Bundle extras) {
12563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            return LocationProvider.this.onSendExtraCommand(command, extras);
12663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
12763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
12863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public void addListener(int uid) {
12963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            LocationProvider.this.onAddListener(uid, new WorkSource(uid));
13063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
13163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
13263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        public void removeListener(int uid) {
13363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            LocationProvider.this.onRemoveListener(uid, new WorkSource(uid));
13463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
13563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    };
13663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
13763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public LocationProvider() {
13863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        IBinder b = ServiceManager.getService(Context.LOCATION_SERVICE);
13963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        mLocationManager = ILocationManager.Stub.asInterface(b);
14063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    }
14163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
14263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
14363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * {@hide}
14463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
14563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /* package */ ILocationProvider getInterface() {
14663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        return mProvider;
14763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    }
14863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
14963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
15063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Returns the Binder interface for the location provider.
15163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * This is intended to be used for the onBind() method of
15263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * a service that implements a location provider service.
15363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
15463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @return the IBinder instance for the provider
15563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
15663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public IBinder getBinder() {
15763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        return mProvider;
15863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    }
15963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
16063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
16163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Used by the location provider to report new locations.
16263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
16363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @param location new Location to report
16463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
16563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Requires the android.permission.INSTALL_LOCATION_PROVIDER permission.
16663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
16763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public void reportLocation(Location location) {
16863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        try {
16963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            mLocationManager.reportLocation(location, false);
17063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        } catch (RemoteException e) {
17163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn            Log.e(TAG, "RemoteException in reportLocation: ", e);
17263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn        }
17363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    }
17463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
17563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
17663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Returns true if the provider requires access to a
17763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * data network (e.g., the Internet), false otherwise.
17863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
17963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract boolean onRequiresNetwork();
18063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
18163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
18263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Returns true if the provider requires access to a
18363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * satellite-based positioning system (e.g., GPS), false
18463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * otherwise.
18563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
18663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract boolean onRequiresSatellite();
18763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
18863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
18963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Returns true if the provider requires access to an appropriate
19063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * cellular network (e.g., to make use of cell tower IDs), false
19163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * otherwise.
19263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
19363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract boolean onRequiresCell();
19463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
19563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
19663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Returns true if the use of this provider may result in a
19763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * monetary charge to the user, false if use is free.  It is up to
19863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * each provider to give accurate information.
19963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
20063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract boolean onHasMonetaryCost();
20163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
20263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
20363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Returns true if the provider is able to provide altitude
20463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * information, false otherwise.  A provider that reports altitude
20563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * under most circumstances but may occassionally not report it
20663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * should return true.
20763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
20863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract boolean onSupportsAltitude();
20963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
21063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
21163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Returns true if the provider is able to provide speed
21263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * information, false otherwise.  A provider that reports speed
21363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * under most circumstances but may occassionally not report it
21463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * should return true.
21563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
21663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract boolean onSupportsSpeed();
21763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
21863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
21963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Returns true if the provider is able to provide bearing
22063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * information, false otherwise.  A provider that reports bearing
22163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * under most circumstances but may occassionally not report it
22263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * should return true.
22363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
22463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract boolean onSupportsBearing();
22563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
22663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
22763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Returns the power requirement for this provider.
22863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
22963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @return the power requirement for this provider, as one of the
23063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * constants Criteria.POWER_REQUIREMENT_*.
23163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
23263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract int onGetPowerRequirement();
23363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
23463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
23563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Returns true if this provider meets the given criteria,
23663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * false otherwise.
23763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
23863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract boolean onMeetsCriteria(Criteria criteria);
23963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
24063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
24163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Returns a constant describing horizontal accuracy of this provider.
24263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * If the provider returns finer grain or exact location,
24363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * {@link Criteria#ACCURACY_FINE} is returned, otherwise if the
24463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * location is only approximate then {@link Criteria#ACCURACY_COARSE}
24563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * is returned.
24663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
24763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract int onGetAccuracy();
24863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
24963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
25063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Enables the location provider
25163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
25263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract void onEnable();
25363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
25463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
25563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Disables the location provider
25663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
25763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract void onDisable();
25863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
25963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
26063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Returns a information on the status of this provider.
26163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * {@link android.location.LocationProvider#OUT_OF_SERVICE} is returned if the provider is
26263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * out of service, and this is not expected to change in the near
26363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * future; {@link android.location.LocationProvider#TEMPORARILY_UNAVAILABLE} is returned if
26463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * the provider is temporarily unavailable but is expected to be
26563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * available shortly; and {@link android.location.LocationProvider#AVAILABLE} is returned
26663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * if the provider is currently available.
26763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
26863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * <p> If extras is non-null, additional status information may be
26963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * added to it in the form of provider-specific key/value pairs.
27063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
27163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract int onGetStatus(Bundle extras);
27263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
27363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
27463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Returns the time at which the status was last updated. It is the
27563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * responsibility of the provider to appropriately set this value using
27663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * {@link android.os.SystemClock#elapsedRealtime SystemClock.elapsedRealtime()}.
27763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * there is a status update that it wishes to broadcast to all its
27863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * listeners. The provider should be careful not to broadcast
27963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * the same status again.
28063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
28163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @return time of last status update in millis since last reboot
28263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
28363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract long onGetStatusUpdateTime();
28463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
28563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
28663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Returns debugging information about the location provider.
28763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
28863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @return string describing the internal state of the location provider, or null.
28963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
29063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract String onGetInternalState();
29163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
29263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
29363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Notifies the location provider that clients are listening for locations.
29463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Called with enable set to true when the first client is added and
29563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * called with enable set to false when the last client is removed.
29663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * This allows the provider to prepare for receiving locations,
29763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * and to shut down when no clients are remaining.
29863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
29963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @param enable true if location tracking should be enabled.
30063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
30163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract void onEnableLocationTracking(boolean enable);
30263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
30363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
30463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Notifies the location provider of the smallest minimum time between updates amongst
30563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * all clients that are listening for locations.  This allows the provider to reduce
30663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * the frequency of updates to match the requested frequency.
30763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
30863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @param minTime the smallest minTime value over all listeners for this provider.
30963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @param ws the source this work is coming from.
31063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
31163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract void onSetMinTime(long minTime, WorkSource ws);
31263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
31363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
31463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Updates the network state for the given provider. This function must
31563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * be overwritten if {@link android.location.LocationProvider#requiresNetwork} returns true.
31663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * The state is {@link android.location.LocationProvider#TEMPORARILY_UNAVAILABLE} (disconnected)
31763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * OR {@link android.location.LocationProvider#AVAILABLE} (connected or connecting).
31863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
31963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @param state data state
32063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
32163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract void onUpdateNetworkState(int state, NetworkInfo info);
32263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
32363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
32463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Informs the provider when a new location has been computed by a different
32563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * location provider.  This is intended to be used as aiding data for the
32663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * receiving provider.
32763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
32863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @param location new location from other location provider
32963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
33063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract void onUpdateLocation(Location location);
33163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
33263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
33363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Implements addditional location provider specific additional commands.
33463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
33563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @param command name of the command to send to the provider.
33663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @param extras optional arguments for the command (or null).
33763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * The provider may optionally fill the extras Bundle with results from the command.
33863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
33963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @return true if the command succeeds.
34063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
34163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract boolean onSendExtraCommand(String command, Bundle extras);
34263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
34363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
34463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Notifies the location provider when a new client is listening for locations.
34563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
34663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @param uid user ID of the new client.
34763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @param ws a WorkSource representation of the client.
34863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
34963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract void onAddListener(int uid, WorkSource ws);
35063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn
35163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    /**
35263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * Notifies the location provider when a client is no longer listening for locations.
35363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     *
35463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @param uid user ID of the client no longer listening.
35563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     * @param ws a WorkSource representation of the client.
35663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn     */
35763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn    public abstract void onRemoveListener(int uid, WorkSource ws);
35863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn}
359