DO NOT MERGE Local timeout should cancel remote work am: 2d6bcbecd3

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12686173

Change-Id: Iea14f8080a72234fd9997bbb8cf16b7df5f4e86b
This commit is contained in:
Soonil Nagarkar
2020-09-24 18:19:37 +00:00
committed by Automerger Merge Worker

View File

@@ -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;