blob: 09d799ff9ee0d8df5134446957c250ad24c4f6d6 [file] [log] [blame]
Mike Lockwood7ec434e2009-03-27 07:46:48 -07001/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Mike Lockwood00b74272010-03-26 10:41:48 -040017package com.android.server.location;
Mike Lockwood7ec434e2009-03-27 07:46:48 -070018
Mike Lockwood03ca2162010-04-01 08:10:09 -070019import android.location.Criteria;
Mike Lockwood4e50b782009-04-03 08:24:43 -070020import android.location.ILocationManager;
Mike Lockwood7ec434e2009-03-27 07:46:48 -070021import android.location.Location;
Mike Lockwood15e3d0f2009-05-01 07:53:28 -040022import android.location.LocationProvider;
Mike Lockwood03d24672009-10-08 15:45:03 -040023import android.net.NetworkInfo;
Mike Lockwood7ec434e2009-03-27 07:46:48 -070024import android.os.Bundle;
Mike Lockwood15e3d0f2009-05-01 07:53:28 -040025import android.os.RemoteException;
Dianne Hackborn7e9f4eb2010-09-10 18:43:00 -070026import android.os.WorkSource;
Mike Lockwood15e3d0f2009-05-01 07:53:28 -040027import android.util.Log;
Mike Lockwood7ec434e2009-03-27 07:46:48 -070028import android.util.PrintWriterPrinter;
29
30import java.io.PrintWriter;
31
32/**
33 * A mock location provider used by LocationManagerService to implement test providers.
34 *
35 * {@hide}
36 */
Mike Lockwoodd03ff942010-02-09 08:46:14 -050037public class MockProvider implements LocationProviderInterface {
Mike Lockwood15e3d0f2009-05-01 07:53:28 -040038 private final String mName;
39 private final ILocationManager mLocationManager;
Mike Lockwood7ec434e2009-03-27 07:46:48 -070040 private final boolean mRequiresNetwork;
41 private final boolean mRequiresSatellite;
42 private final boolean mRequiresCell;
43 private final boolean mHasMonetaryCost;
44 private final boolean mSupportsAltitude;
45 private final boolean mSupportsSpeed;
46 private final boolean mSupportsBearing;
47 private final int mPowerRequirement;
48 private final int mAccuracy;
49 private final Location mLocation;
50 private int mStatus;
51 private long mStatusUpdateTime;
52 private final Bundle mExtras = new Bundle();
53 private boolean mHasLocation;
54 private boolean mHasStatus;
55 private boolean mEnabled;
56
Mike Lockwood15e3d0f2009-05-01 07:53:28 -040057 private static final String TAG = "MockProvider";
58
Mike Lockwood4e50b782009-04-03 08:24:43 -070059 public MockProvider(String name, ILocationManager locationManager,
60 boolean requiresNetwork, boolean requiresSatellite,
Mike Lockwood7ec434e2009-03-27 07:46:48 -070061 boolean requiresCell, boolean hasMonetaryCost, boolean supportsAltitude,
62 boolean supportsSpeed, boolean supportsBearing, int powerRequirement, int accuracy) {
Mike Lockwood15e3d0f2009-05-01 07:53:28 -040063 mName = name;
64 mLocationManager = locationManager;
Mike Lockwood7ec434e2009-03-27 07:46:48 -070065 mRequiresNetwork = requiresNetwork;
66 mRequiresSatellite = requiresSatellite;
67 mRequiresCell = requiresCell;
68 mHasMonetaryCost = hasMonetaryCost;
69 mSupportsAltitude = supportsAltitude;
70 mSupportsBearing = supportsBearing;
71 mSupportsSpeed = supportsSpeed;
72 mPowerRequirement = powerRequirement;
73 mAccuracy = accuracy;
74 mLocation = new Location(name);
75 }
76
Mike Lockwoodd03ff942010-02-09 08:46:14 -050077 public String getName() {
78 return mName;
79 }
80
Mike Lockwood7ec434e2009-03-27 07:46:48 -070081 public void disable() {
82 mEnabled = false;
83 }
84
Mike Lockwood7ec434e2009-03-27 07:46:48 -070085 public void enable() {
86 mEnabled = true;
87 }
88
Mike Lockwoodd03ff942010-02-09 08:46:14 -050089 public boolean isEnabled() {
90 return mEnabled;
91 }
92
Mike Lockwood7ec434e2009-03-27 07:46:48 -070093 public int getStatus(Bundle extras) {
94 if (mHasStatus) {
95 extras.clear();
96 extras.putAll(mExtras);
97 return mStatus;
98 } else {
Mike Lockwood15e3d0f2009-05-01 07:53:28 -040099 return LocationProvider.AVAILABLE;
Mike Lockwood7ec434e2009-03-27 07:46:48 -0700100 }
101 }
102
Mike Lockwood4e50b782009-04-03 08:24:43 -0700103 public long getStatusUpdateTime() {
104 return mStatusUpdateTime;
105 }
106
Mike Lockwood7ec434e2009-03-27 07:46:48 -0700107 public int getAccuracy() {
108 return mAccuracy;
109 }
110
Mike Lockwood7ec434e2009-03-27 07:46:48 -0700111 public int getPowerRequirement() {
112 return mPowerRequirement;
113 }
114
Mike Lockwood7ec434e2009-03-27 07:46:48 -0700115 public boolean hasMonetaryCost() {
116 return mHasMonetaryCost;
117 }
118
Mike Lockwood7ec434e2009-03-27 07:46:48 -0700119 public boolean requiresCell() {
120 return mRequiresCell;
121 }
122
Mike Lockwood7ec434e2009-03-27 07:46:48 -0700123 public boolean requiresNetwork() {
124 return mRequiresNetwork;
125 }
126
Mike Lockwood7ec434e2009-03-27 07:46:48 -0700127 public boolean requiresSatellite() {
128 return mRequiresSatellite;
129 }
130
Mike Lockwood7ec434e2009-03-27 07:46:48 -0700131 public boolean supportsAltitude() {
132 return mSupportsAltitude;
133 }
134
Mike Lockwood7ec434e2009-03-27 07:46:48 -0700135 public boolean supportsBearing() {
136 return mSupportsBearing;
137 }
138
Mike Lockwood7ec434e2009-03-27 07:46:48 -0700139 public boolean supportsSpeed() {
140 return mSupportsSpeed;
141 }
142
Mike Lockwood03ca2162010-04-01 08:10:09 -0700143 public boolean meetsCriteria(Criteria criteria) {
144 if ((criteria.getAccuracy() != Criteria.NO_REQUIREMENT) &&
145 (criteria.getAccuracy() < mAccuracy)) {
146 return false;
147 }
148 int criteriaPower = criteria.getPowerRequirement();
149 if ((criteriaPower != Criteria.NO_REQUIREMENT) &&
150 (criteriaPower < mPowerRequirement)) {
151 return false;
152 }
153 if (criteria.isAltitudeRequired() && !mSupportsAltitude) {
154 return false;
155 }
156 if (criteria.isSpeedRequired() && !mSupportsSpeed) {
157 return false;
158 }
159 if (criteria.isBearingRequired() && !mSupportsBearing) {
160 return false;
161 }
162 return true;
163 }
164
Mike Lockwood7ec434e2009-03-27 07:46:48 -0700165 public void setLocation(Location l) {
166 mLocation.set(l);
167 mHasLocation = true;
Mike Lockwood15e3d0f2009-05-01 07:53:28 -0400168 try {
Mike Lockwooda4903f22010-02-17 06:42:23 -0500169 mLocationManager.reportLocation(mLocation, false);
Mike Lockwood15e3d0f2009-05-01 07:53:28 -0400170 } catch (RemoteException e) {
171 Log.e(TAG, "RemoteException calling reportLocation");
172 }
Mike Lockwood7ec434e2009-03-27 07:46:48 -0700173 }
174
175 public void clearLocation() {
176 mHasLocation = false;
177 }
178
179 public void setStatus(int status, Bundle extras, long updateTime) {
180 mStatus = status;
181 mStatusUpdateTime = updateTime;
182 mExtras.clear();
183 if (extras != null) {
184 mExtras.putAll(extras);
185 }
186 mHasStatus = true;
187 }
188
189 public void clearStatus() {
190 mHasStatus = false;
Mike Lockwood4e50b782009-04-03 08:24:43 -0700191 mStatusUpdateTime = 0;
Mike Lockwood7ec434e2009-03-27 07:46:48 -0700192 }
193
Fred Fettinger3c8fbdf2010-01-04 15:38:13 -0600194 public String getInternalState() {
195 return null;
196 }
197
Mike Lockwood15e3d0f2009-05-01 07:53:28 -0400198 public void enableLocationTracking(boolean enable) {
199 }
200
Mike Lockwood03ca2162010-04-01 08:10:09 -0700201 public boolean requestSingleShotFix() {
202 return false;
203 }
204
Dianne Hackborn7e9f4eb2010-09-10 18:43:00 -0700205 public void setMinTime(long minTime, WorkSource ws) {
Mike Lockwood15e3d0f2009-05-01 07:53:28 -0400206 }
207
Mike Lockwood03d24672009-10-08 15:45:03 -0400208 public void updateNetworkState(int state, NetworkInfo info) {
Mike Lockwood15e3d0f2009-05-01 07:53:28 -0400209 }
210
Mike Lockwoodfd6e5f02009-05-21 11:28:20 -0400211 public void updateLocation(Location location) {
212 }
213
Mike Lockwood15e3d0f2009-05-01 07:53:28 -0400214 public boolean sendExtraCommand(String command, Bundle extras) {
215 return false;
216 }
217
218 public void addListener(int uid) {
219 }
220
221 public void removeListener(int uid) {
222 }
223
Mike Lockwood7ec434e2009-03-27 07:46:48 -0700224 public void dump(PrintWriter pw, String prefix) {
Mike Lockwood15e3d0f2009-05-01 07:53:28 -0400225 pw.println(prefix + mName);
Mike Lockwood7ec434e2009-03-27 07:46:48 -0700226 pw.println(prefix + "mHasLocation=" + mHasLocation);
227 pw.println(prefix + "mLocation:");
228 mLocation.dump(new PrintWriterPrinter(pw), prefix + " ");
229 pw.println(prefix + "mHasStatus=" + mHasStatus);
230 pw.println(prefix + "mStatus=" + mStatus);
231 pw.println(prefix + "mStatusUpdateTime=" + mStatusUpdateTime);
232 pw.println(prefix + "mExtras=" + mExtras);
233 }
234}