17ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood/* 27ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * Copyright (C) 2009 The Android Open Source Project 37ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * 47ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 57ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * you may not use this file except in compliance with the License. 67ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * You may obtain a copy of the License at 77ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * 87ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 97ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * 107ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * Unless required by applicable law or agreed to in writing, software 117ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 127ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * See the License for the specific language governing permissions and 147ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * limitations under the License. 157ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood */ 167ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood 1700b74270c9f136a8727c5f6cda0997a3a905f385Mike Lockwoodpackage com.android.server.location; 187ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood 194e50b78bda9cd58be61581d2886c88ff6348a1c1Mike Lockwoodimport android.location.ILocationManager; 207ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwoodimport android.location.Location; 2115e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwoodimport android.location.LocationProvider; 227ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwoodimport android.os.Bundle; 2315e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwoodimport android.os.RemoteException; 247e9f4eb2608148436cef36c9969bf8a599b39e72Dianne Hackbornimport android.os.WorkSource; 2515e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwoodimport android.util.Log; 267ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwoodimport android.util.PrintWriterPrinter; 277ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood 286fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly 296fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pellyimport java.io.FileDescriptor; 307ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwoodimport java.io.PrintWriter; 317ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood 326fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pellyimport com.android.internal.location.ProviderProperties; 336fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pellyimport com.android.internal.location.ProviderRequest; 346fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly 357ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood/** 367ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * A mock location provider used by LocationManagerService to implement test providers. 377ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * 387ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood * {@hide} 397ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood */ 40d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwoodpublic class MockProvider implements LocationProviderInterface { 4115e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood private final String mName; 426fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly private final ProviderProperties mProperties; 4315e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood private final ILocationManager mLocationManager; 446fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly 457ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood private final Location mLocation; 466fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly private final Bundle mExtras = new Bundle(); 476fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly 487ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood private int mStatus; 497ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood private long mStatusUpdateTime; 507ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood private boolean mHasLocation; 517ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood private boolean mHasStatus; 527ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood private boolean mEnabled; 537ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood 5415e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood private static final String TAG = "MockProvider"; 5515e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood 566fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly public MockProvider(String name, ILocationManager locationManager, 576fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly ProviderProperties properties) { 586fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly if (properties == null) throw new NullPointerException("properties is null"); 596fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly 6015e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood mName = name; 6115e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood mLocationManager = locationManager; 626fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly mProperties = properties; 637ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood mLocation = new Location(name); 647ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood } 657ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood 666fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 67d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood public String getName() { 68d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood return mName; 69d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood } 70d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood 716fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 726fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly public ProviderProperties getProperties() { 736fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly return mProperties; 746fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly } 756fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly 766fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 777ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood public void disable() { 787ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood mEnabled = false; 797ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood } 807ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood 816fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 827ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood public void enable() { 837ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood mEnabled = true; 847ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood } 857ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood 866fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 87d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood public boolean isEnabled() { 88d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood return mEnabled; 89d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood } 90d03ff94fe58045b5bd1dd783fb98026778a4265dMike Lockwood 916fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 927ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood public int getStatus(Bundle extras) { 937ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood if (mHasStatus) { 947ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood extras.clear(); 957ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood extras.putAll(mExtras); 967ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood return mStatus; 977ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood } else { 9815e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood return LocationProvider.AVAILABLE; 997ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood } 1007ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood } 1017ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood 1026fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 1034e50b78bda9cd58be61581d2886c88ff6348a1c1Mike Lockwood public long getStatusUpdateTime() { 1044e50b78bda9cd58be61581d2886c88ff6348a1c1Mike Lockwood return mStatusUpdateTime; 1054e50b78bda9cd58be61581d2886c88ff6348a1c1Mike Lockwood } 1064e50b78bda9cd58be61581d2886c88ff6348a1c1Mike Lockwood 1077ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood public void setLocation(Location l) { 1087ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood mLocation.set(l); 1097ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood mHasLocation = true; 1106fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly if (mEnabled) { 1116fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly try { 1126fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly mLocationManager.reportLocation(mLocation, false); 1136fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly } catch (RemoteException e) { 1146fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly Log.e(TAG, "RemoteException calling reportLocation"); 1156fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly } 11615e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood } 1177ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood } 1187ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood 1197ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood public void clearLocation() { 1207ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood mHasLocation = false; 1217ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood } 1227ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood 1237ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood public void setStatus(int status, Bundle extras, long updateTime) { 1247ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood mStatus = status; 1257ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood mStatusUpdateTime = updateTime; 1267ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood mExtras.clear(); 1277ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood if (extras != null) { 1287ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood mExtras.putAll(extras); 1297ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood } 1307ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood mHasStatus = true; 1317ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood } 1327ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood 1337ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood public void clearStatus() { 1347ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood mHasStatus = false; 1354e50b78bda9cd58be61581d2886c88ff6348a1c1Mike Lockwood mStatusUpdateTime = 0; 1367ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood } 1377ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood 1386fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 1396fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 1406fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly dump(pw, ""); 14115e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood } 14215e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood 1437ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood public void dump(PrintWriter pw, String prefix) { 14415e3d0f082d551f8819fbe4b0d502cc108627876Mike Lockwood pw.println(prefix + mName); 1457ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood pw.println(prefix + "mHasLocation=" + mHasLocation); 1467ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood pw.println(prefix + "mLocation:"); 1477ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood mLocation.dump(new PrintWriterPrinter(pw), prefix + " "); 1487ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood pw.println(prefix + "mHasStatus=" + mHasStatus); 1497ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood pw.println(prefix + "mStatus=" + mStatus); 1507ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood pw.println(prefix + "mStatusUpdateTime=" + mStatusUpdateTime); 1517ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood pw.println(prefix + "mExtras=" + mExtras); 1527ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood } 1536fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly 1546fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 1556fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly public void setRequest(ProviderRequest request, WorkSource source) { } 1566fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly 1576fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly @Override 1586fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly public boolean sendExtraCommand(String command, Bundle extras) { 1596fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly return false; 1606fa9ad4afcd762aea519ff61811386c23d18ddb2Nick Pelly } 1617ec434e2e179776d75c8a4da66dcfd2ee630c5d8Mike Lockwood} 162