Add config resource to add inital mock location providers
So that we can provide mock location providers, e.g., in emulator build.
Change-Id: Ia8fe0925abc2faa4999ef17e386d7f3f8b13a0dc
diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java
index e6163bd..62deec2 100644
--- a/services/core/java/com/android/server/LocationManagerService.java
+++ b/services/core/java/com/android/server/LocationManagerService.java
@@ -450,6 +450,27 @@
if (provider == null) {
Slog.e(TAG, "no geofence provider found");
}
+
+ String[] testProviderStrings = resources.getStringArray(
+ com.android.internal.R.array.config_testLocationProviders);
+ for (String testProviderString : testProviderStrings) {
+ String fragments[] = testProviderString.split(",");
+ String name = fragments[0].trim();
+ if (mProvidersByName.get(name) != null) {
+ throw new IllegalArgumentException("Provider \"" + name + "\" already exists");
+ }
+ ProviderProperties properties = new ProviderProperties(
+ Boolean.parseBoolean(fragments[1]) /* requiresNetwork */,
+ Boolean.parseBoolean(fragments[2]) /* requiresSatellite */,
+ Boolean.parseBoolean(fragments[3]) /* requiresCell */,
+ Boolean.parseBoolean(fragments[4]) /* hasMonetaryCost */,
+ Boolean.parseBoolean(fragments[5]) /* supportsAltitude */,
+ Boolean.parseBoolean(fragments[6]) /* supportsSpeed */,
+ Boolean.parseBoolean(fragments[7]) /* supportsBearing */,
+ Integer.parseInt(fragments[8]) /* powerRequirement */,
+ Integer.parseInt(fragments[9]) /* accuracy */);
+ addTestProviderLocked(name, properties);
+ }
}
/**
@@ -2204,7 +2225,6 @@
long identity = Binder.clearCallingIdentity();
synchronized (mLock) {
- MockProvider provider = new MockProvider(name, this, properties);
// remove the real provider if we are replacing GPS or network provider
if (LocationManager.GPS_PROVIDER.equals(name)
|| LocationManager.NETWORK_PROVIDER.equals(name)
@@ -2214,18 +2234,23 @@
removeProviderLocked(p);
}
}
- if (mProvidersByName.get(name) != null) {
- throw new IllegalArgumentException("Provider \"" + name + "\" already exists");
- }
- addProviderLocked(provider);
- mMockProviders.put(name, provider);
- mLastLocation.put(name, null);
- mLastLocationCoarseInterval.put(name, null);
+ addTestProviderLocked(name, properties);
updateProvidersLocked();
}
Binder.restoreCallingIdentity(identity);
}
+ private void addTestProviderLocked(String name, ProviderProperties properties) {
+ if (mProvidersByName.get(name) != null) {
+ throw new IllegalArgumentException("Provider \"" + name + "\" already exists");
+ }
+ MockProvider provider = new MockProvider(name, this, properties);
+ addProviderLocked(provider);
+ mMockProviders.put(name, provider);
+ mLastLocation.put(name, null);
+ mLastLocationCoarseInterval.put(name, null);
+ }
+
@Override
public void removeTestProvider(String provider) {
checkMockPermissionsSafe();