1a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood/*
2a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * Copyright (C) 2010 The Android Open Source Project
3a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood *
4a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
5a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * you may not use this file except in compliance with the License.
6a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * You may obtain a copy of the License at
7a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood *
8a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
9a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood *
10a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * Unless required by applicable law or agreed to in writing, software
11a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
12a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * See the License for the specific language governing permissions and
14a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * limitations under the License.
15a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood */
16a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
1700b74270c9f136a8727c5f6cda0997a3a905f385Mike Lockwoodpackage com.android.server.location;
18a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
1903ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwoodimport android.location.Criteria;
20a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.location.ILocationManager;
21a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.location.Location;
22a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.location.LocationManager;
23a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.location.LocationProvider;
24a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.net.NetworkInfo;
25a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.os.Bundle;
26a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.os.RemoteException;
277e9f4eb2608148436cef36c9969bf8a599b39e72Dianne Hackbornimport android.os.WorkSource;
28a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.util.Log;
29a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
30a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood/**
31a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * A passive location provider reports locations received from other providers
32a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * for clients that want to listen passively without actually triggering
33a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * location updates.
34a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood *
35a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * {@hide}
36a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood */
37a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodpublic class PassiveProvider implements LocationProviderInterface {
38a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
39a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    private static final String TAG = "PassiveProvider";
40a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
41a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    private final ILocationManager mLocationManager;
42a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    private boolean mTracking;
43a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
44a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public PassiveProvider(ILocationManager locationManager) {
45a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        mLocationManager = locationManager;
46a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
47a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
48a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public String getName() {
49a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return LocationManager.PASSIVE_PROVIDER;
50a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
51a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
52a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public boolean requiresNetwork() {
53a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return false;
54a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
55a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
56a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public boolean requiresSatellite() {
57a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return false;
58a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
59a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
60a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public boolean requiresCell() {
61a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return false;
62a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
63a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
64a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public boolean hasMonetaryCost() {
65a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return false;
66a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
67a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
68a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public boolean supportsAltitude() {
69a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return false;
70a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
71a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
72a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public boolean supportsSpeed() {
73a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return false;
74a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
75a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
76a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public boolean supportsBearing() {
77a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return false;
78a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
79a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
80a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public int getPowerRequirement() {
81a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return -1;
82a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
83a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
8403ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    public boolean meetsCriteria(Criteria criteria) {
8503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        // We do not want to match the special passive provider based on criteria.
8603ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        return false;
8703ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    }
8803ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood
89a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public int getAccuracy() {
90a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return -1;
91a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
92a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
93a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public boolean isEnabled() {
94a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return true;
95a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
96a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
97a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public void enable() {
98a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
99a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
100a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public void disable() {
101a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
102a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
103a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public int getStatus(Bundle extras) {
104a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        if (mTracking) {
105a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood            return LocationProvider.AVAILABLE;
106a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        } else {
107a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood            return LocationProvider.TEMPORARILY_UNAVAILABLE;
108a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        }
109a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
110a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
111a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public long getStatusUpdateTime() {
112a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return -1;
113a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
114a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
1153c8fbdf5dd19fad0b3006557716ee1026d7d5899Fred Fettinger    public String getInternalState() {
1163c8fbdf5dd19fad0b3006557716ee1026d7d5899Fred Fettinger        return null;
1173c8fbdf5dd19fad0b3006557716ee1026d7d5899Fred Fettinger    }
1183c8fbdf5dd19fad0b3006557716ee1026d7d5899Fred Fettinger
119a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public void enableLocationTracking(boolean enable) {
120a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        mTracking = enable;
121a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
122a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
12303ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    public boolean requestSingleShotFix() {
12403ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        return false;
12503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    }
12603ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood
1277e9f4eb2608148436cef36c9969bf8a599b39e72Dianne Hackborn    public void setMinTime(long minTime, WorkSource ws) {
128a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
129a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
130a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public void updateNetworkState(int state, NetworkInfo info) {
131a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
132a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
133a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public void updateLocation(Location location) {
134a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        if (mTracking) {
135a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood            try {
136a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood                // pass the location back to the location manager
137a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood                mLocationManager.reportLocation(location, true);
138a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood            } catch (RemoteException e) {
139a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood                Log.e(TAG, "RemoteException calling reportLocation");
140a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood            }
141a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        }
142a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
143a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
144a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public boolean sendExtraCommand(String command, Bundle extras) {
145a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood        return false;
146a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
147a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
148a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public void addListener(int uid) {
149a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
150a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood
151a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    public void removeListener(int uid) {
152a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood    }
153a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood}
154