summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/location/provider/LocationProviderManager.java28
1 files changed, 22 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/location/provider/LocationProviderManager.java b/services/core/java/com/android/server/location/provider/LocationProviderManager.java
index 737b653318d2..cde99b4ba5d8 100644
--- a/services/core/java/com/android/server/location/provider/LocationProviderManager.java
+++ b/services/core/java/com/android/server/location/provider/LocationProviderManager.java
@@ -31,6 +31,7 @@ import static android.os.PowerManager.LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF
import static android.os.PowerManager.LOCATION_MODE_FOREGROUND_ONLY;
import static android.os.PowerManager.LOCATION_MODE_GPS_DISABLED_WHEN_SCREEN_OFF;
import static android.os.PowerManager.LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF;
+import static android.os.UserHandle.USER_CURRENT;
import static com.android.server.location.LocationManagerService.D;
import static com.android.server.location.LocationManagerService.TAG;
@@ -893,6 +894,10 @@ public class LocationProviderManager extends
MAX_FASTEST_INTERVAL_JITTER_MS);
if (deltaMs
< getRequest().getMinUpdateIntervalMillis() - maxJitterMs) {
+ if (D) {
+ Log.v(TAG, mName + " provider registration " + getIdentity()
+ + " dropped delivery - too fast");
+ }
return false;
}
@@ -902,6 +907,10 @@ public class LocationProviderManager extends
if (smallestDisplacementM > 0.0 && location.distanceTo(
mPreviousLocation)
<= smallestDisplacementM) {
+ if (D) {
+ Log.v(TAG, mName + " provider registration " + getIdentity()
+ + " dropped delivery - too close");
+ }
return false;
}
}
@@ -919,7 +928,8 @@ public class LocationProviderManager extends
if (!mAppOpsHelper.noteOpNoThrow(LocationPermissions.asAppOp(getPermissionLevel()),
getIdentity())) {
if (D) {
- Log.w(TAG, "noteOp denied for " + getIdentity());
+ Log.w(TAG,
+ mName + " provider registration " + getIdentity() + " noteOp denied");
}
return null;
}
@@ -1503,7 +1513,7 @@ public class LocationProviderManager extends
public boolean isEnabled(int userId) {
if (userId == UserHandle.USER_NULL) {
return false;
- } else if (userId == UserHandle.USER_CURRENT) {
+ } else if (userId == USER_CURRENT) {
return isEnabled(mUserHelper.getCurrentUserId());
}
@@ -1676,7 +1686,7 @@ public class LocationProviderManager extends
}
}
return lastLocation;
- } else if (userId == UserHandle.USER_CURRENT) {
+ } else if (userId == USER_CURRENT) {
return getLastLocationUnsafe(mUserHelper.getCurrentUserId(), permissionLevel,
isBypass, maximumAgeMs);
}
@@ -1721,7 +1731,7 @@ public class LocationProviderManager extends
setLastLocation(location, runningUserIds[i]);
}
return;
- } else if (userId == UserHandle.USER_CURRENT) {
+ } else if (userId == USER_CURRENT) {
setLastLocation(location, mUserHelper.getCurrentUserId());
return;
}
@@ -2404,13 +2414,13 @@ public class LocationProviderManager extends
filtered = locationResult.filter(location -> {
if (!location.isMock()) {
if (location.getLatitude() == 0 && location.getLongitude() == 0) {
- Log.w(TAG, "blocking 0,0 location from " + mName + " provider");
+ Log.e(TAG, "blocking 0,0 location from " + mName + " provider");
return false;
}
}
if (!location.isComplete()) {
- Log.w(TAG, "blocking incomplete location from " + mName + " provider");
+ Log.e(TAG, "blocking incomplete location from " + mName + " provider");
return false;
}
@@ -2428,6 +2438,12 @@ public class LocationProviderManager extends
filtered = locationResult;
}
+ Location last = getLastLocationUnsafe(USER_CURRENT, PERMISSION_FINE, true, Long.MAX_VALUE);
+ if (last != null && locationResult.get(0).getElapsedRealtimeNanos()
+ < last.getElapsedRealtimeNanos()) {
+ Log.e(TAG, "non-monotonic location received from " + mName + " provider");
+ }
+
// update last location
setLastLocation(filtered.getLastLocation(), UserHandle.USER_ALL);