summaryrefslogtreecommitdiff
path: root/location/lib/java
diff options
context:
space:
mode:
Diffstat (limited to 'location/lib/java')
-rw-r--r--location/lib/java/com/android/location/provider/LocationProviderBase.java30
1 files changed, 30 insertions, 0 deletions
diff --git a/location/lib/java/com/android/location/provider/LocationProviderBase.java b/location/lib/java/com/android/location/provider/LocationProviderBase.java
index 5bcec92c4fba..7cd7207c26a0 100644
--- a/location/lib/java/com/android/location/provider/LocationProviderBase.java
+++ b/location/lib/java/com/android/location/provider/LocationProviderBase.java
@@ -36,6 +36,8 @@ import com.android.internal.location.ProviderRequest;
import java.io.FileDescriptor;
import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
/**
* Base class for location providers implemented as unbundled services.
@@ -88,6 +90,7 @@ public abstract class LocationProviderBase {
@Nullable private volatile ILocationProviderManager mManager;
private volatile ProviderProperties mProperties;
private volatile boolean mEnabled;
+ private final ArrayList<String> mAdditionalProviderPackages;
public LocationProviderBase(String tag, ProviderPropertiesUnbundled properties) {
mTag = tag;
@@ -99,6 +102,7 @@ public abstract class LocationProviderBase {
mManager = null;
mProperties = properties.getProviderProperties();
mEnabled = true;
+ mAdditionalProviderPackages = new ArrayList<>(0);
}
public IBinder getBinder() {
@@ -160,6 +164,29 @@ public abstract class LocationProviderBase {
}
/**
+ * Sets a list of additional packages that should be considered as part of this location
+ * provider for the purposes of generating locations. This should generally only be used when
+ * another package may issue location requests on behalf of this package in the course of
+ * providing location. This will inform location services to treat the other packages as
+ * location providers as well.
+ */
+ public void setAdditionalProviderPackages(List<String> packageNames) {
+ synchronized (mBinder) {
+ mAdditionalProviderPackages.clear();
+ mAdditionalProviderPackages.addAll(packageNames);
+ }
+
+ ILocationProviderManager manager = mManager;
+ if (manager != null) {
+ try {
+ manager.onSetAdditionalProviderPackages(mAdditionalProviderPackages);
+ } catch (RemoteException | RuntimeException e) {
+ Log.w(mTag, e);
+ }
+ }
+ }
+
+ /**
* Returns true if this provider has been set as enabled. This will be true unless explicitly
* set otherwise.
*/
@@ -275,6 +302,9 @@ public abstract class LocationProviderBase {
public void setLocationProviderManager(ILocationProviderManager manager) {
synchronized (mBinder) {
try {
+ if (!mAdditionalProviderPackages.isEmpty()) {
+ manager.onSetAdditionalProviderPackages(mAdditionalProviderPackages);
+ }
manager.onSetProperties(mProperties);
manager.onSetEnabled(mEnabled);
} catch (RemoteException e) {