Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bfd3ac4d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "DO NOT MERGE Local timeout should cancel remote work" into rvc-qpr-dev

parents a38a4a1c 2d6bcbec
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -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;