Merge "Include attribution tag in identifying providers"
This commit is contained in:
committed by
Android (Google) Code Review
commit
9ef6da85b4
@@ -4416,7 +4416,8 @@ package android.location {
|
||||
method public boolean isLocationEnabledForUser(@NonNull android.os.UserHandle);
|
||||
method public boolean isProviderEnabledForUser(@NonNull String, @NonNull android.os.UserHandle);
|
||||
method @Deprecated @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public boolean isProviderPackage(@NonNull String);
|
||||
method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public boolean isProviderPackage(@Nullable String, @NonNull String);
|
||||
method @Deprecated @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public boolean isProviderPackage(@Nullable String, @NonNull String);
|
||||
method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public boolean isProviderPackage(@Nullable String, @NonNull String, @Nullable String);
|
||||
method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.UPDATE_APP_OPS_STATS}) public boolean registerGnssBatchedLocationCallback(long, boolean, @NonNull android.location.BatchedLocationCallback, @Nullable android.os.Handler);
|
||||
method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.GnssMeasurementsEvent.Callback);
|
||||
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
|
||||
<uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER" />
|
||||
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
|
||||
<uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" />
|
||||
|
||||
<application
|
||||
android:label="@string/app_label"
|
||||
|
||||
@@ -273,6 +273,7 @@ public class FusedLocationProvider extends LocationProviderBase {
|
||||
.setLowPower(mRequest.isLowPower())
|
||||
.setLocationSettingsIgnored(mRequest.isLocationSettingsIgnored())
|
||||
.setWorkSource(mRequest.getWorkSource())
|
||||
.setHiddenFromAppOps(true)
|
||||
.build();
|
||||
mLocationManager.requestLocationUpdates(mProvider, request,
|
||||
mContext.getMainExecutor(), this);
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
|
||||
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
|
||||
<uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />
|
||||
<uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" />
|
||||
|
||||
<application android:label="FusedLocation Tests">
|
||||
<uses-library android:name="android.test.runner" />
|
||||
|
||||
@@ -949,7 +949,8 @@ public class LocationManagerService extends ILocationManager.Stub {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isProviderPackage(String provider, String packageName) {
|
||||
public boolean isProviderPackage(@Nullable String provider, String packageName,
|
||||
@Nullable String attributionTag) {
|
||||
mContext.enforceCallingOrSelfPermission(permission.READ_DEVICE_CONFIG, null);
|
||||
|
||||
for (LocationProviderManager manager : mProviderManagers) {
|
||||
@@ -960,7 +961,8 @@ public class LocationManagerService extends ILocationManager.Stub {
|
||||
if (identity == null) {
|
||||
continue;
|
||||
}
|
||||
if (identity.getPackageName().equals(packageName)) {
|
||||
if (identity.getPackageName().equals(packageName) && (attributionTag == null
|
||||
|| Objects.equals(identity.getAttributionTag(), attributionTag))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1262,13 +1264,17 @@ public class LocationManagerService extends ILocationManager.Stub {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isProvider(String provider, CallerIdentity identity) {
|
||||
LocationProviderManager manager = getLocationProviderManager(provider);
|
||||
if (manager == null) {
|
||||
return false;
|
||||
} else {
|
||||
return identity.equals(manager.getIdentity());
|
||||
public boolean isProvider(@Nullable String provider, CallerIdentity identity) {
|
||||
for (LocationProviderManager manager : mProviderManagers) {
|
||||
if (provider != null && !provider.equals(manager.getName())) {
|
||||
continue;
|
||||
}
|
||||
if (identity.equalsIgnoringListenerId(manager.getIdentity())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1333,9 +1333,6 @@ public class LocationProviderManager extends
|
||||
Binder.restoreCallingIdentity(identity);
|
||||
}
|
||||
|
||||
setRealProvider(null);
|
||||
setMockProvider(null);
|
||||
|
||||
mUserHelper.removeListener(mUserChangedListener);
|
||||
mSettingsHelper.removeOnLocationEnabledChangedListener(mLocationEnabledChangedListener);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user