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