Include attribution tag in identifying providers

Expose provider identification methods that allow for attribution tag to
be provided in addition to the package.

Bug: 177239114
Test: manual
Change-Id: Id0247a3f2a27f8d4897fd28644a34f783bd10d84
This commit is contained in:
Soonil Nagarkar
2021-01-11 11:04:58 -08:00
parent 9629297286
commit dcb05abba8
9 changed files with 66 additions and 34 deletions

View File

@@ -78,21 +78,21 @@ interface ILocationManager
@nullable List<GnssAntennaInfo> getGnssAntennaInfos();
void registerGnssStatusCallback(in IGnssStatusListener callback, String packageName, String attributionTag);
void registerGnssStatusCallback(in IGnssStatusListener callback, String packageName, @nullable String attributionTag);
void unregisterGnssStatusCallback(in IGnssStatusListener callback);
void registerGnssNmeaCallback(in IGnssNmeaListener callback, String packageName, String attributionTag);
void registerGnssNmeaCallback(in IGnssNmeaListener callback, String packageName, @nullable String attributionTag);
void unregisterGnssNmeaCallback(in IGnssNmeaListener callback);
void addGnssMeasurementsListener(in GnssMeasurementRequest request, in IGnssMeasurementsListener listener, String packageName, String attributionTag);
void addGnssMeasurementsListener(in GnssMeasurementRequest request, in IGnssMeasurementsListener listener, String packageName, @nullable String attributionTag);
void removeGnssMeasurementsListener(in IGnssMeasurementsListener listener);
void injectGnssMeasurementCorrections(in GnssMeasurementCorrections corrections);
void addGnssNavigationMessageListener(in IGnssNavigationMessageListener listener, String packageName, String attributionTag);
void addGnssNavigationMessageListener(in IGnssNavigationMessageListener listener, String packageName, @nullable String attributionTag);
void removeGnssNavigationMessageListener(in IGnssNavigationMessageListener listener);
int getGnssBatchSize();
void startGnssBatch(long periodNanos, in ILocationListener listener, String packageName, String attributionTag, String listenerId);
void startGnssBatch(long periodNanos, in ILocationListener listener, String packageName, @nullable String attributionTag, @nullable String listenerId);
void flushGnssBatch();
void stopGnssBatch();
@@ -101,7 +101,7 @@ interface ILocationManager
List<String> getProviders(in Criteria criteria, boolean enabledOnly);
String getBestProvider(in Criteria criteria, boolean enabledOnly);
ProviderProperties getProviderProperties(String provider);
boolean isProviderPackage(String provider, String packageName);
boolean isProviderPackage(@nullable String provider, String packageName, @nullable String attributionTag);
List<String> getProviderPackages(String provider);
void setExtraLocationControllerPackage(String packageName);
@@ -113,10 +113,10 @@ interface ILocationManager
boolean isLocationEnabledForUser(int userId);
void setLocationEnabledForUser(boolean enabled, int userId);
void addTestProvider(String name, in ProviderProperties properties, String packageName, String attributionTag);
void removeTestProvider(String provider, String packageName, String attributionTag);
void setTestProviderLocation(String provider, in Location location, String packageName, String attributionTag);
void setTestProviderEnabled(String provider, boolean enabled, String packageName, String attributionTag);
void addTestProvider(String name, in ProviderProperties properties, String packageName, @nullable String attributionTag);
void removeTestProvider(String provider, String packageName, @nullable String attributionTag);
void setTestProviderLocation(String provider, in Location location, String packageName, @nullable String attributionTag);
void setTestProviderEnabled(String provider, boolean enabled, String packageName, @nullable String attributionTag);
LocationTime getGnssTimeMillis();

View File

@@ -72,6 +72,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.WeakHashMap;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
@@ -1840,17 +1841,13 @@ public class LocationManager {
* otherwise.
*
* @hide
* @deprecated Prefer {@link #isProviderPackage(String, String)} instead.
* @deprecated Prefer {@link #isProviderPackage(String, String, String)} instead.
*/
@Deprecated
@SystemApi
@RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
public boolean isProviderPackage(@NonNull String packageName) {
try {
return mService.isProviderPackage(null, packageName);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
return isProviderPackage(null, packageName, null);
}
/**
@@ -1861,13 +1858,37 @@ public class LocationManager {
* @param provider a provider listed by {@link #getAllProviders()} or null
* @param packageName the package name to test if it is a provider
* @return true if the given arguments correspond to a provider
*
* @deprecated Use {@link #isProviderPackage(String, String, String)} instead.
*
* @hide
*/
@Deprecated
@SystemApi
@RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
public boolean isProviderPackage(@Nullable String provider, @NonNull String packageName) {
return isProviderPackage(provider, packageName, null);
}
/**
* Returns true if the given provider corresponds to the given package name. If the given
* provider is null, this will return true if any provider corresponds to the given package
* name and/or attribution tag. If attribution tag is non-null, the provider identity must match
* both the given package name and attribution tag.
*
* @param provider a provider listed by {@link #getAllProviders()} or null
* @param packageName the package name to test if it is a provider
* @param attributionTag an optional attribution tag within the given package
* @return true if the given arguments correspond to a provider
* @hide
*/
@SystemApi
@RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
public boolean isProviderPackage(@Nullable String provider, @NonNull String packageName) {
public boolean isProviderPackage(@Nullable String provider, @NonNull String packageName,
@Nullable String attributionTag) {
try {
return mService.isProviderPackage(provider, packageName);
return mService.isProviderPackage(provider, Objects.requireNonNull(packageName),
attributionTag);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -1878,7 +1899,7 @@ public class LocationManager {
* and an empty list if no package is associated with the provider.
*
* @hide
* @deprecated Prefer {@link #isProviderPackage(String, String)} instead.
* @deprecated Prefer {@link #isProviderPackage(String, String, String)} instead.
*/
@TestApi
@Deprecated

View File

@@ -201,11 +201,15 @@ public final class CallerIdentity {
return false;
}
CallerIdentity that = (CallerIdentity) o;
return mUid == that.mUid
return equalsIgnoringListenerId(that) && Objects.equals(mListenerId, that.mListenerId);
}
public boolean equalsIgnoringListenerId(CallerIdentity that) {
return that != null
&& mUid == that.mUid
&& mPid == that.mPid
&& mPackageName.equals(that.mPackageName)
&& Objects.equals(mAttributionTag, that.mAttributionTag)
&& Objects.equals(mListenerId, that.mListenerId);
&& Objects.equals(mAttributionTag, that.mAttributionTag);
}
@Override