location: Use ILocationProvider Binder interface for all location providers.
This change eliminates the LocationProviderImpl class which had been used
for location providers running in the system process.
Now the LocationProvider base class is only used to implement the
LocationManager.createProvider() method for retrieving provider information.
Added a new IGpsStatusProvider interface for providers that serve GPS status.
Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/location/java/com/android/internal/location/MockProvider.java b/location/java/com/android/internal/location/MockProvider.java
index 6336e2b..6fa2c29 100644
--- a/location/java/com/android/internal/location/MockProvider.java
+++ b/location/java/com/android/internal/location/MockProvider.java
@@ -17,8 +17,12 @@
package com.android.internal.location;
import android.location.ILocationManager;
+import android.location.ILocationProvider;
import android.location.Location;
+import android.location.LocationProvider;
import android.os.Bundle;
+import android.os.RemoteException;
+import android.util.Log;
import android.util.PrintWriterPrinter;
import java.io.PrintWriter;
@@ -28,7 +32,9 @@
*
* {@hide}
*/
-public class MockProvider extends LocationProviderImpl {
+public class MockProvider extends ILocationProvider.Stub {
+ private final String mName;
+ private final ILocationManager mLocationManager;
private final boolean mRequiresNetwork;
private final boolean mRequiresSatellite;
private final boolean mRequiresCell;
@@ -46,12 +52,14 @@
private boolean mHasStatus;
private boolean mEnabled;
+ private static final String TAG = "MockProvider";
+
public MockProvider(String name, ILocationManager locationManager,
boolean requiresNetwork, boolean requiresSatellite,
boolean requiresCell, boolean hasMonetaryCost, boolean supportsAltitude,
boolean supportsSpeed, boolean supportsBearing, int powerRequirement, int accuracy) {
- super(name, locationManager);
-
+ mName = name;
+ mLocationManager = locationManager;
mRequiresNetwork = requiresNetwork;
mRequiresSatellite = requiresSatellite;
mRequiresCell = requiresCell;
@@ -64,78 +72,64 @@
mLocation = new Location(name);
}
- @Override
public void disable() {
mEnabled = false;
}
- @Override
public void enable() {
mEnabled = true;
}
- @Override
public int getStatus(Bundle extras) {
if (mHasStatus) {
extras.clear();
extras.putAll(mExtras);
return mStatus;
} else {
- return AVAILABLE;
+ return LocationProvider.AVAILABLE;
}
}
- @Override
public long getStatusUpdateTime() {
return mStatusUpdateTime;
}
- @Override
public boolean isEnabled() {
return mEnabled;
}
- @Override
public int getAccuracy() {
return mAccuracy;
}
- @Override
public int getPowerRequirement() {
return mPowerRequirement;
}
- @Override
public boolean hasMonetaryCost() {
return mHasMonetaryCost;
}
- @Override
public boolean requiresCell() {
return mRequiresCell;
}
- @Override
public boolean requiresNetwork() {
return mRequiresNetwork;
}
- @Override
public boolean requiresSatellite() {
return mRequiresSatellite;
}
- @Override
public boolean supportsAltitude() {
return mSupportsAltitude;
}
- @Override
public boolean supportsBearing() {
return mSupportsBearing;
}
- @Override
public boolean supportsSpeed() {
return mSupportsSpeed;
}
@@ -143,7 +137,11 @@
public void setLocation(Location l) {
mLocation.set(l);
mHasLocation = true;
- reportLocationChanged(mLocation);
+ try {
+ mLocationManager.setLocation(mLocation);
+ } catch (RemoteException e) {
+ Log.e(TAG, "RemoteException calling reportLocation");
+ }
}
public void clearLocation() {
@@ -165,8 +163,33 @@
mStatusUpdateTime = 0;
}
+ public void enableLocationTracking(boolean enable) {
+ }
+
+ public void setMinTime(long minTime) {
+ }
+
+ public void updateNetworkState(int state) {
+ }
+
+ public boolean sendExtraCommand(String command, Bundle extras) {
+ return false;
+ }
+
+ public void addListener(int uid) {
+ }
+
+ public void removeListener(int uid) {
+ }
+
+ public void wakeLockAcquired() {
+ }
+
+ public void wakeLockReleased() {
+ }
+
public void dump(PrintWriter pw, String prefix) {
- pw.println(prefix + getName());
+ pw.println(prefix + mName);
pw.println(prefix + "mHasLocation=" + mHasLocation);
pw.println(prefix + "mLocation:");
mLocation.dump(new PrintWriterPrinter(pw), prefix + " ");