summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSoonil Nagarkar <sooniln@google.com>2020-09-24 09:35:49 -0700
committerSoonil Nagarkar <sooniln@google.com>2020-09-24 09:41:24 -0700
commit2d6bcbecd3db5a2983f1a17b4c75641f6b2fee1b (patch)
tree3fbaa4c2582743c23c165955513501888fb07b12
parentc231992ac3b068c3068619550bf95203e3bc2dc2 (diff)
DO NOT MERGE Local timeout should cancel remote work
Ensure that when getCurrentLocation() times out locally, remote work in system server is also canceled. Bug: 168666216 Test: manual Change-Id: Idde2156323c3fca0ed94ff886a4277122c598753
-rw-r--r--location/java/android/location/LocationManager.java23
1 files changed, 21 insertions, 2 deletions
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index 6bf6034bbbf4..b77a249d0fe9 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -732,7 +732,7 @@ public class LocationManager {
mContext.getAttributionTag(), transport.getListenerId());
if (cancelRemote != null) {
transport.register(mContext.getSystemService(AlarmManager.class),
- cancellationSignal);
+ cancellationSignal, cancelRemote);
if (cancellationSignal != null) {
cancellationSignal.setRemote(cancelRemote);
}
@@ -2571,7 +2571,8 @@ public class LocationManager {
}
public synchronized void register(AlarmManager alarmManager,
- CancellationSignal cancellationSignal) {
+ CancellationSignal cancellationSignal,
+ ICancellationSignal remoteCancellationSignal) {
if (mConsumer == null) {
return;
}
@@ -2587,15 +2588,21 @@ public class LocationManager {
if (cancellationSignal != null) {
cancellationSignal.setOnCancelListener(this);
}
+
+ mRemoteCancellationSignal = remoteCancellationSignal;
}
@Override
public void onCancel() {
+ synchronized (this) {
+ mRemoteCancellationSignal = null;
+ }
remove();
}
private Consumer<Location> remove() {
Consumer<Location> consumer;
+ ICancellationSignal cancellationSignal;
synchronized (this) {
mExecutor = null;
consumer = mConsumer;
@@ -2605,6 +2612,18 @@ public class LocationManager {
mAlarmManager.cancel(this);
mAlarmManager = null;
}
+
+ // ensure only one cancel event will go through
+ cancellationSignal = mRemoteCancellationSignal;
+ mRemoteCancellationSignal = null;
+ }
+
+ if (cancellationSignal != null) {
+ try {
+ cancellationSignal.cancel();
+ } catch (RemoteException e) {
+ // ignore
+ }
}
return consumer;