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 196fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pellyimport java.io.FileDescriptor; 206fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pellyimport java.io.PrintWriter; 216fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly 226fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pellyimport com.android.internal.location.ProviderProperties; 236fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pellyimport com.android.internal.location.ProviderRequest; 246fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly 2503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwoodimport android.location.Criteria; 26a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.location.ILocationManager; 27a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.location.Location; 28a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.location.LocationManager; 29a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.location.LocationProvider; 30a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.os.Bundle; 31a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.os.RemoteException; 327e9f4eb2608148436cef36c9969bf8a599b39e72Dianne Hackbornimport android.os.WorkSource; 33a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodimport android.util.Log; 34a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood 356fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly 36a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood/** 37a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * A passive location provider reports locations received from other providers 38a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * for clients that want to listen passively without actually triggering 39a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * location updates. 40a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * 41a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood * {@hide} 42a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood */ 43a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwoodpublic class PassiveProvider implements LocationProviderInterface { 44a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood private static final String TAG = "PassiveProvider"; 45a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood 466fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly private static final ProviderProperties PROPERTIES = new ProviderProperties( 476fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly false, false, false, false, false, false, false, 486fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly Criteria.POWER_LOW, Criteria.ACCURACY_COARSE); 496fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly 50a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood private final ILocationManager mLocationManager; 516fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly private boolean mReportLocation; 52a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood 53a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood public PassiveProvider(ILocationManager locationManager) { 54a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood mLocationManager = locationManager; 55a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } 56a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood 576fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 58a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood public String getName() { 59a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood return LocationManager.PASSIVE_PROVIDER; 60a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } 61a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood 626fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 636fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly public ProviderProperties getProperties() { 646fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly return PROPERTIES; 65a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } 66a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood 676fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 68a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood public boolean isEnabled() { 69a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood return true; 70a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } 71a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood 726fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 73a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood public void enable() { 74a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } 75a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood 766fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 77a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood public void disable() { 78a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } 79a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood 806fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 81a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood public int getStatus(Bundle extras) { 826fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly if (mReportLocation) { 83a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood return LocationProvider.AVAILABLE; 84a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } else { 85a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood return LocationProvider.TEMPORARILY_UNAVAILABLE; 86a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } 87a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } 88a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood 896fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 90a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood public long getStatusUpdateTime() { 91a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood return -1; 92a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } 93a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood 946fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 956fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly public void setRequest(ProviderRequest request, WorkSource source) { 966fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly mReportLocation = request.reportLocation; 97a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } 98a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood 99b711d57ca4e2c6a1befbfa1a41f4b8094755a93fVictoria Lease @Override 100b711d57ca4e2c6a1befbfa1a41f4b8094755a93fVictoria Lease public void switchUser(int userId) { 101b711d57ca4e2c6a1befbfa1a41f4b8094755a93fVictoria Lease // nothing to do here 102b711d57ca4e2c6a1befbfa1a41f4b8094755a93fVictoria Lease } 103b711d57ca4e2c6a1befbfa1a41f4b8094755a93fVictoria Lease 104a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood public void updateLocation(Location location) { 1056fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly if (mReportLocation) { 106a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood try { 107a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood // pass the location back to the location manager 108a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood mLocationManager.reportLocation(location, true); 109a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } catch (RemoteException e) { 110a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood Log.e(TAG, "RemoteException calling reportLocation"); 111a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } 112a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } 113a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } 114a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood 1156fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 116a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood public boolean sendExtraCommand(String command, Bundle extras) { 117a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood return false; 118a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } 119a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood 1206fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 1216fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 12209016ab4dd056a16809419d612cb865a14980880Victoria Lease pw.println("mReportLocation=" + mReportLocation); 123a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood } 124a4903f254b4711c8fc0ac5f7e3d605f4dce34f35Mike Lockwood} 125