Loading location/java/android/location/LocationRequest.java +17 −0 Original line number Diff line number Diff line Loading @@ -504,6 +504,23 @@ public final class LocationRequest implements Parcelable { return mExpireIn; } /** * Returns the realtime at which this request expires, taking into account both * {@link #setExpireAt(long)} and {@link #setExpireIn(long)} relative to the given realtime. * * @hide */ public long getExpirationRealtimeMs(long startRealtimeMs) { long expirationRealtimeMs; // Check for > Long.MAX_VALUE overflow (elapsedRealtime > 0): if (mExpireIn > Long.MAX_VALUE - startRealtimeMs) { expirationRealtimeMs = Long.MAX_VALUE; } else { expirationRealtimeMs = startRealtimeMs + mExpireIn; } return Math.min(expirationRealtimeMs, mExpireAt); } /** * Set the number of location updates. * Loading services/core/java/com/android/server/LocationManagerService.java +4 −14 Original line number Diff line number Diff line Loading @@ -2005,23 +2005,13 @@ public class LocationManagerService extends ILocationManager.Stub { private boolean mIsForegroundUid; private Location mLastFixBroadcast; private Throwable mStackTrace; // for debugging only private long mExpirationRealtimeMs; /** * Note: must be constructed with lock held. */ private UpdateRecord(String provider, LocationRequest request, Receiver receiver) { // translate expireIn value into expireAt long elapsedRealtime = SystemClock.elapsedRealtime(); long expireAt; // Check for > Long.MAX_VALUE overflow (elapsedRealtime > 0): if (request.getExpireIn() > Long.MAX_VALUE - elapsedRealtime) { expireAt = Long.MAX_VALUE; } else { expireAt = Math.max(request.getExpireIn() + elapsedRealtime, 0); } request.setExpireAt(Math.min(request.getExpireAt(), expireAt)); request.setExpireIn(Long.MAX_VALUE); mExpirationRealtimeMs = request.getExpirationRealtimeMs(SystemClock.elapsedRealtime()); mProvider = provider; mRealRequest = request; mRequest = request; Loading Loading @@ -2883,7 +2873,7 @@ public class LocationManagerService extends ILocationManager.Stub { } // Check whether the expiry date has passed return record.mRealRequest.getExpireAt() >= now; return record.mExpirationRealtimeMs >= now; } @GuardedBy("mLock") Loading Loading @@ -3015,7 +3005,7 @@ public class LocationManagerService extends ILocationManager.Stub { } // track expired records if (r.mRealRequest.getNumUpdates() <= 0 || r.mRealRequest.getExpireAt() < now) { if (r.mRealRequest.getNumUpdates() <= 0 || r.mExpirationRealtimeMs < now) { // notify the client it can remove this listener r.mReceiver.callRemovedLocked(); if (deadUpdateRecords == null) { Loading services/core/java/com/android/server/location/GeofenceManager.java +2 −2 Original line number Diff line number Diff line Loading @@ -133,8 +133,8 @@ public class GeofenceManager implements LocationListener, PendingIntent.OnFinish } GeofenceState state = new GeofenceState(geofence, request.getExpireAt(), allowedResolutionLevel, uid, packageName, featureId, listenerIdentifier, intent); request.getExpirationRealtimeMs(SystemClock.elapsedRealtime()), allowedResolutionLevel, uid, packageName, featureId, listenerIdentifier, intent); synchronized (mLock) { // first make sure it doesn't already exist for (int i = mFences.size() - 1; i >= 0; i--) { Loading Loading
location/java/android/location/LocationRequest.java +17 −0 Original line number Diff line number Diff line Loading @@ -504,6 +504,23 @@ public final class LocationRequest implements Parcelable { return mExpireIn; } /** * Returns the realtime at which this request expires, taking into account both * {@link #setExpireAt(long)} and {@link #setExpireIn(long)} relative to the given realtime. * * @hide */ public long getExpirationRealtimeMs(long startRealtimeMs) { long expirationRealtimeMs; // Check for > Long.MAX_VALUE overflow (elapsedRealtime > 0): if (mExpireIn > Long.MAX_VALUE - startRealtimeMs) { expirationRealtimeMs = Long.MAX_VALUE; } else { expirationRealtimeMs = startRealtimeMs + mExpireIn; } return Math.min(expirationRealtimeMs, mExpireAt); } /** * Set the number of location updates. * Loading
services/core/java/com/android/server/LocationManagerService.java +4 −14 Original line number Diff line number Diff line Loading @@ -2005,23 +2005,13 @@ public class LocationManagerService extends ILocationManager.Stub { private boolean mIsForegroundUid; private Location mLastFixBroadcast; private Throwable mStackTrace; // for debugging only private long mExpirationRealtimeMs; /** * Note: must be constructed with lock held. */ private UpdateRecord(String provider, LocationRequest request, Receiver receiver) { // translate expireIn value into expireAt long elapsedRealtime = SystemClock.elapsedRealtime(); long expireAt; // Check for > Long.MAX_VALUE overflow (elapsedRealtime > 0): if (request.getExpireIn() > Long.MAX_VALUE - elapsedRealtime) { expireAt = Long.MAX_VALUE; } else { expireAt = Math.max(request.getExpireIn() + elapsedRealtime, 0); } request.setExpireAt(Math.min(request.getExpireAt(), expireAt)); request.setExpireIn(Long.MAX_VALUE); mExpirationRealtimeMs = request.getExpirationRealtimeMs(SystemClock.elapsedRealtime()); mProvider = provider; mRealRequest = request; mRequest = request; Loading Loading @@ -2883,7 +2873,7 @@ public class LocationManagerService extends ILocationManager.Stub { } // Check whether the expiry date has passed return record.mRealRequest.getExpireAt() >= now; return record.mExpirationRealtimeMs >= now; } @GuardedBy("mLock") Loading Loading @@ -3015,7 +3005,7 @@ public class LocationManagerService extends ILocationManager.Stub { } // track expired records if (r.mRealRequest.getNumUpdates() <= 0 || r.mRealRequest.getExpireAt() < now) { if (r.mRealRequest.getNumUpdates() <= 0 || r.mExpirationRealtimeMs < now) { // notify the client it can remove this listener r.mReceiver.callRemovedLocked(); if (deadUpdateRecords == null) { Loading
services/core/java/com/android/server/location/GeofenceManager.java +2 −2 Original line number Diff line number Diff line Loading @@ -133,8 +133,8 @@ public class GeofenceManager implements LocationListener, PendingIntent.OnFinish } GeofenceState state = new GeofenceState(geofence, request.getExpireAt(), allowedResolutionLevel, uid, packageName, featureId, listenerIdentifier, intent); request.getExpirationRealtimeMs(SystemClock.elapsedRealtime()), allowedResolutionLevel, uid, packageName, featureId, listenerIdentifier, intent); synchronized (mLock) { // first make sure it doesn't already exist for (int i = mFences.size() - 1; i >= 0; i--) { Loading