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

Commit 75defb6f authored by Laurent Tu's avatar Laurent Tu
Browse files

Decrement number of updates in LocationRequest

Decrement the number of updates after a location fix has been sent to a
a listener. This is necessary for respecting calls such as
requestSingleUpdate().

Bug: 7460868
Change-Id: Iea207ab494b93b936ca434d59652bb2cb6404cef
parent 465c3753
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -1540,7 +1540,8 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
    }


    private static boolean shouldBroadcastSafe(Location loc, Location lastLoc, UpdateRecord record) {
    private static boolean shouldBroadcastSafe(
            Location loc, Location lastLoc, UpdateRecord record, long now) {
        // Always broadcast the first update
        if (lastLoc == null) {
            return true;
@@ -1561,6 +1562,16 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
            }
        }

        // Check whether sufficient number of udpates is left
        if (record.mRequest.getNumUpdates() <= 0) {
            return false;
        }

        // Check whether the expiry date has passed
        if (record.mRequest.getExpireAt() < now) {
            return false;
        }

        return true;
    }

@@ -1640,7 +1651,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
            }
            if (notifyLocation != null) {
                Location lastLoc = r.mLastFixBroadcast;
                if ((lastLoc == null) || shouldBroadcastSafe(notifyLocation, lastLoc, r)) {
                if ((lastLoc == null) || shouldBroadcastSafe(notifyLocation, lastLoc, r, now)) {
                    if (lastLoc == null) {
                        lastLoc = new Location(notifyLocation);
                        r.mLastFixBroadcast = lastLoc;
@@ -1651,6 +1662,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
                        Slog.w(TAG, "RemoteException calling onLocationChanged on " + receiver);
                        receiverDead = true;
                    }
                    r.mRequest.decrementNumUpdates();
                }
            }

@@ -1666,7 +1678,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
            }

            // track expired records
            if (r.mRequest.getNumUpdates() == 0 || r.mRequest.getExpireAt() < now) {
            if (r.mRequest.getNumUpdates() <= 0 || r.mRequest.getExpireAt() < now) {
                if (deadUpdateRecords == null) {
                    deadUpdateRecords = new ArrayList<UpdateRecord>();
                }