diff options
Diffstat (limited to 'location/java')
3 files changed, 46 insertions, 21 deletions
diff --git a/location/java/android/location/ILocationManager.aidl b/location/java/android/location/ILocationManager.aidl index afae50203cd3..65721cc33aed 100644 --- a/location/java/android/location/ILocationManager.aidl +++ b/location/java/android/location/ILocationManager.aidl @@ -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(); diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java index 2dc9eb44236f..059e6022f5bf 100644 --- a/location/java/android/location/LocationManager.java +++ b/location/java/android/location/LocationManager.java @@ -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, + @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 diff --git a/location/java/android/location/util/identity/CallerIdentity.java b/location/java/android/location/util/identity/CallerIdentity.java index 9dbdedeb8a03..0bb7dbb71ae8 100644 --- a/location/java/android/location/util/identity/CallerIdentity.java +++ b/location/java/android/location/util/identity/CallerIdentity.java @@ -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 |