summaryrefslogtreecommitdiff
path: root/location/java
diff options
context:
space:
mode:
Diffstat (limited to 'location/java')
-rw-r--r--location/java/android/location/ILocationManager.aidl6
-rw-r--r--location/java/android/location/LocationManager.java33
2 files changed, 21 insertions, 18 deletions
diff --git a/location/java/android/location/ILocationManager.aidl b/location/java/android/location/ILocationManager.aidl
index 75ea0cbada92..7ed5b579ebb4 100644
--- a/location/java/android/location/ILocationManager.aidl
+++ b/location/java/android/location/ILocationManager.aidl
@@ -45,9 +45,9 @@ import com.android.internal.location.ProviderProperties;
interface ILocationManager
{
Location getLastLocation(in LocationRequest request, String packageName, String featureId);
- boolean getCurrentLocation(in LocationRequest request,
- in ICancellationSignal cancellationSignal, in ILocationListener listener,
- String packageName, String featureId, String listenerId);
+ @nullable ICancellationSignal getCurrentLocation(in LocationRequest request,
+ in ILocationListener listener, String packageName, String featureId,
+ String listenerId);
void requestLocationUpdates(in LocationRequest request, in ILocationListener listener,
in PendingIntent intent, String packageName, String featureId, String listenerId);
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index 0c7d96d9f136..33c69511d273 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -724,16 +724,15 @@ public class LocationManager {
cancellationSignal.throwIfCanceled();
}
- ICancellationSignal remoteCancellationSignal = CancellationSignal.createTransport();
-
try {
- if (mService.getCurrentLocation(currentLocationRequest, remoteCancellationSignal,
- transport, mContext.getPackageName(), mContext.getAttributionTag(),
- transport.getListenerId())) {
+ ICancellationSignal cancelRemote = mService.getCurrentLocation(
+ currentLocationRequest, transport, mContext.getPackageName(),
+ mContext.getAttributionTag(), transport.getListenerId());
+ if (cancelRemote != null) {
transport.register(mContext.getSystemService(AlarmManager.class),
- remoteCancellationSignal);
+ cancellationSignal, cancelRemote);
if (cancellationSignal != null) {
- cancellationSignal.setOnCancelListener(transport::cancel);
+ cancellationSignal.setRemote(cancelRemote);
}
} else {
transport.fail();
@@ -2535,7 +2534,7 @@ public class LocationManager {
}
private static class GetCurrentLocationTransport extends ILocationListener.Stub implements
- AlarmManager.OnAlarmListener {
+ AlarmManager.OnAlarmListener, CancellationSignal.OnCancelListener {
@GuardedBy("this")
@Nullable
@@ -2567,6 +2566,7 @@ public class LocationManager {
}
public synchronized void register(AlarmManager alarmManager,
+ CancellationSignal cancellationSignal,
ICancellationSignal remoteCancellationSignal) {
if (mConsumer == null) {
return;
@@ -2580,10 +2580,18 @@ public class LocationManager {
this,
null);
+ if (cancellationSignal != null) {
+ cancellationSignal.setOnCancelListener(this);
+ }
+
mRemoteCancellationSignal = remoteCancellationSignal;
}
- public void cancel() {
+ @Override
+ public void onCancel() {
+ synchronized (this) {
+ mRemoteCancellationSignal = null;
+ }
remove();
}
@@ -2632,11 +2640,6 @@ public class LocationManager {
@Override
public void onLocationChanged(Location location) {
- synchronized (this) {
- // save ourselves a pointless x-process call to cancel the location request
- mRemoteCancellationSignal = null;
- }
-
deliverResult(location);
}
@@ -3034,7 +3037,7 @@ public class LocationManager {
protected GnssRequest merge(@NonNull List<GnssRequest> requests) {
Preconditions.checkArgument(!requests.isEmpty());
for (GnssRequest request : requests) {
- if (request.isFullTracking()) {
+ if (request != null && request.isFullTracking()) {
return request;
}
}