diff --git a/location/java/android/location/ILocationManager.aidl b/location/java/android/location/ILocationManager.aidl index adf58da6a0727..5e3966032a11b 100644 --- a/location/java/android/location/ILocationManager.aidl +++ b/location/java/android/location/ILocationManager.aidl @@ -48,13 +48,13 @@ import android.os.ICancellationSignal; */ interface ILocationManager { - @nullable Location getLastLocation(String provider, in LastLocationRequest request, String packageName, String attributionTag); - @nullable ICancellationSignal getCurrentLocation(String provider, in LocationRequest request, in ILocationCallback callback, String packageName, String attributionTag, String listenerId); + @nullable Location getLastLocation(String provider, in LastLocationRequest request, String packageName, @nullable String attributionTag); + @nullable ICancellationSignal getCurrentLocation(String provider, in LocationRequest request, in ILocationCallback callback, String packageName, @nullable String attributionTag, String listenerId); - void registerLocationListener(String provider, in LocationRequest request, in ILocationListener listener, String packageName, String attributionTag, String listenerId); + void registerLocationListener(String provider, in LocationRequest request, in ILocationListener listener, String packageName, @nullable String attributionTag, String listenerId); void unregisterLocationListener(in ILocationListener listener); - void registerLocationPendingIntent(String provider, in LocationRequest request, in PendingIntent pendingIntent, String packageName, String attributionTag); + void registerLocationPendingIntent(String provider, in LocationRequest request, in PendingIntent pendingIntent, String packageName, @nullable String attributionTag); void unregisterLocationPendingIntent(in PendingIntent pendingIntent); void injectLocation(in Location location); @@ -79,24 +79,24 @@ interface ILocationManager @nullable List getGnssAntennaInfos(); - void registerGnssStatusCallback(in IGnssStatusListener callback, String packageName, @nullable String attributionTag); + void registerGnssStatusCallback(in IGnssStatusListener callback, String packageName, @nullable String attributionTag, String listenerId); void unregisterGnssStatusCallback(in IGnssStatusListener callback); - void registerGnssNmeaCallback(in IGnssNmeaListener callback, String packageName, @nullable String attributionTag); + void registerGnssNmeaCallback(in IGnssNmeaListener callback, String packageName, @nullable String attributionTag, String listenerId); void unregisterGnssNmeaCallback(in IGnssNmeaListener callback); - void addGnssMeasurementsListener(in GnssMeasurementRequest request, in IGnssMeasurementsListener listener, String packageName, @nullable String attributionTag); + void addGnssMeasurementsListener(in GnssMeasurementRequest request, in IGnssMeasurementsListener listener, String packageName, @nullable String attributionTag, String listenerId); void removeGnssMeasurementsListener(in IGnssMeasurementsListener listener); void injectGnssMeasurementCorrections(in GnssMeasurementCorrections corrections); - void addGnssNavigationMessageListener(in IGnssNavigationMessageListener listener, String packageName, @nullable String attributionTag); + void addGnssNavigationMessageListener(in IGnssNavigationMessageListener listener, String packageName, @nullable String attributionTag, String listenerId); void removeGnssNavigationMessageListener(in IGnssNavigationMessageListener listener); void addProviderRequestListener(in IProviderRequestListener listener); void removeProviderRequestListener(in IProviderRequestListener listener); int getGnssBatchSize(); - void startGnssBatch(long periodNanos, in ILocationListener listener, String packageName, @nullable String attributionTag, @nullable String listenerId); + void startGnssBatch(long periodNanos, in ILocationListener listener, String packageName, @nullable String attributionTag, String listenerId); void flushGnssBatch(); void stopGnssBatch(); diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java index 088b789ea6908..3cb8fe888f60a 100644 --- a/location/java/android/location/LocationManager.java +++ b/location/java/android/location/LocationManager.java @@ -2921,7 +2921,8 @@ public class LocationManager { protected void registerTransport(GnssStatusTransport transport) throws RemoteException { getService().registerGnssStatusCallback(transport, transport.getPackage(), - transport.getAttributionTag()); + transport.getAttributionTag(), + AppOpsManager.toReceiverId(transport.getListener())); } @Override @@ -2938,7 +2939,8 @@ public class LocationManager { protected void registerTransport(GnssNmeaTransport transport) throws RemoteException { getService().registerGnssNmeaCallback(transport, transport.getPackage(), - transport.getAttributionTag()); + transport.getAttributionTag(), + AppOpsManager.toReceiverId(transport.getListener())); } @Override @@ -2955,7 +2957,8 @@ public class LocationManager { protected void registerTransport(GnssMeasurementsTransport transport) throws RemoteException { getService().addGnssMeasurementsListener(transport.getRequest(), transport, - transport.getPackage(), transport.getAttributionTag()); + transport.getPackage(), transport.getAttributionTag(), + AppOpsManager.toReceiverId(transport.getListener())); } @Override @@ -2987,7 +2990,8 @@ public class LocationManager { protected void registerTransport(GnssNavigationTransport transport) throws RemoteException { getService().addGnssNavigationMessageListener(transport, - transport.getPackage(), transport.getAttributionTag()); + transport.getPackage(), transport.getAttributionTag(), + AppOpsManager.toReceiverId(transport.getListener())); } @Override diff --git a/services/core/java/com/android/server/location/LocationManagerService.java b/services/core/java/com/android/server/location/LocationManagerService.java index 6deb19a536290..c9f3dd22d3dd6 100644 --- a/services/core/java/com/android/server/location/LocationManagerService.java +++ b/services/core/java/com/android/server/location/LocationManagerService.java @@ -479,7 +479,7 @@ public class LocationManagerService extends ILocationManager.Stub { @Override public void startGnssBatch(long periodNanos, ILocationListener listener, String packageName, - String attributionTag, String listenerId) { + @Nullable String attributionTag, String listenerId) { mContext.enforceCallingOrSelfPermission(Manifest.permission.LOCATION_HARDWARE, null); if (mGnssManagerService == null) { @@ -616,7 +616,7 @@ public class LocationManagerService extends ILocationManager.Stub { @Nullable @Override public ICancellationSignal getCurrentLocation(String provider, LocationRequest request, - ILocationCallback consumer, String packageName, String attributionTag, + ILocationCallback consumer, String packageName, @Nullable String attributionTag, String listenerId) { CallerIdentity identity = CallerIdentity.fromBinder(mContext, packageName, attributionTag, listenerId); @@ -640,7 +640,7 @@ public class LocationManagerService extends ILocationManager.Stub { @Override public void registerLocationListener(String provider, LocationRequest request, ILocationListener listener, String packageName, @Nullable String attributionTag, - @Nullable String listenerId) { + String listenerId) { CallerIdentity identity = CallerIdentity.fromBinder(mContext, packageName, attributionTag, listenerId); int permissionLevel = LocationPermissions.getPermissionLevel(mContext, identity.getUid(), @@ -791,7 +791,7 @@ public class LocationManagerService extends ILocationManager.Stub { @Override public Location getLastLocation(String provider, LastLocationRequest request, - String packageName, String attributionTag) { + String packageName, @Nullable String attributionTag) { CallerIdentity identity = CallerIdentity.fromBinder(mContext, packageName, attributionTag); int permissionLevel = LocationPermissions.getPermissionLevel(mContext, identity.getUid(), identity.getPid()); @@ -858,9 +858,10 @@ public class LocationManagerService extends ILocationManager.Stub { @Override public void registerGnssStatusCallback(IGnssStatusListener listener, String packageName, - String attributionTag) { + @Nullable String attributionTag, String listenerId) { if (mGnssManagerService != null) { - mGnssManagerService.registerGnssStatusCallback(listener, packageName, attributionTag); + mGnssManagerService.registerGnssStatusCallback(listener, packageName, attributionTag, + listenerId); } } @@ -873,9 +874,10 @@ public class LocationManagerService extends ILocationManager.Stub { @Override public void registerGnssNmeaCallback(IGnssNmeaListener listener, String packageName, - String attributionTag) { + @Nullable String attributionTag, String listenerId) { if (mGnssManagerService != null) { - mGnssManagerService.registerGnssNmeaCallback(listener, packageName, attributionTag); + mGnssManagerService.registerGnssNmeaCallback(listener, packageName, attributionTag, + listenerId); } } @@ -887,11 +889,12 @@ public class LocationManagerService extends ILocationManager.Stub { } @Override - public void addGnssMeasurementsListener(@Nullable GnssMeasurementRequest request, - IGnssMeasurementsListener listener, String packageName, String attributionTag) { + public void addGnssMeasurementsListener(GnssMeasurementRequest request, + IGnssMeasurementsListener listener, String packageName, @Nullable String attributionTag, + String listenerId) { if (mGnssManagerService != null) { mGnssManagerService.addGnssMeasurementsListener(request, listener, packageName, - attributionTag); + attributionTag, listenerId); } } @@ -937,10 +940,10 @@ public class LocationManagerService extends ILocationManager.Stub { @Override public void addGnssNavigationMessageListener(IGnssNavigationMessageListener listener, - String packageName, String attributionTag) { + String packageName, @Nullable String attributionTag, String listenerId) { if (mGnssManagerService != null) { mGnssManagerService.addGnssNavigationMessageListener(listener, packageName, - attributionTag); + attributionTag, listenerId); } } diff --git a/services/core/java/com/android/server/location/gnss/GnssManagerService.java b/services/core/java/com/android/server/location/gnss/GnssManagerService.java index b6695c20bd975..8312c63618353 100644 --- a/services/core/java/com/android/server/location/gnss/GnssManagerService.java +++ b/services/core/java/com/android/server/location/gnss/GnssManagerService.java @@ -60,7 +60,7 @@ public class GnssManagerService { private static final String ATTRIBUTION_ID = "GnssService"; - private final Context mContext; + final Context mContext; private final GnssNative mGnssNative; private final GnssLocationProvider mGnssLocationProvider; @@ -154,10 +154,11 @@ public class GnssManagerService { * Registers listener for GNSS status changes. */ public void registerGnssStatusCallback(IGnssStatusListener listener, String packageName, - @Nullable String attributionTag) { + @Nullable String attributionTag, String listenerId) { mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION, null); - CallerIdentity identity = CallerIdentity.fromBinder(mContext, packageName, attributionTag); + CallerIdentity identity = CallerIdentity.fromBinder(mContext, packageName, attributionTag, + listenerId); mGnssStatusProvider.addListener(identity, listener); } @@ -172,10 +173,11 @@ public class GnssManagerService { * Registers listener for GNSS NMEA messages. */ public void registerGnssNmeaCallback(IGnssNmeaListener listener, String packageName, - @Nullable String attributionTag) { + @Nullable String attributionTag, String listenerId) { mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION, null); - CallerIdentity identity = CallerIdentity.fromBinder(mContext, packageName, attributionTag); + CallerIdentity identity = CallerIdentity.fromBinder(mContext, packageName, attributionTag, + listenerId); mGnssNmeaProvider.addListener(identity, listener); } @@ -191,12 +193,13 @@ public class GnssManagerService { */ public void addGnssMeasurementsListener(GnssMeasurementRequest request, IGnssMeasurementsListener listener, String packageName, - @Nullable String attributionTag) { + @Nullable String attributionTag, String listenerId) { mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION, null); if (request.isCorrelationVectorOutputsEnabled()) { mContext.enforceCallingOrSelfPermission(Manifest.permission.LOCATION_HARDWARE, null); } - CallerIdentity identity = CallerIdentity.fromBinder(mContext, packageName, attributionTag); + CallerIdentity identity = CallerIdentity.fromBinder(mContext, packageName, attributionTag, + listenerId); mGnssMeasurementsProvider.addListener(request, identity, listener); } @@ -223,10 +226,11 @@ public class GnssManagerService { * Adds a GNSS navigation message listener. */ public void addGnssNavigationMessageListener(IGnssNavigationMessageListener listener, - String packageName, @Nullable String attributionTag) { + String packageName, @Nullable String attributionTag, String listenerId) { mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION, null); - CallerIdentity identity = CallerIdentity.fromBinder(mContext, packageName, attributionTag); + CallerIdentity identity = CallerIdentity.fromBinder(mContext, packageName, attributionTag, + listenerId); mGnssNavigationMessageProvider.addListener(identity, listener); }