diff --git a/services/core/java/com/android/server/location/LocationProviderManager.java b/services/core/java/com/android/server/location/LocationProviderManager.java index b4a172393ba65..a20ecb4c6dfbd 100644 --- a/services/core/java/com/android/server/location/LocationProviderManager.java +++ b/services/core/java/com/android/server/location/LocationProviderManager.java @@ -491,7 +491,7 @@ class LocationProviderManager extends builder.setIntervalMillis(MIN_COARSE_INTERVAL_MS); } if (baseRequest.getMinUpdateIntervalMillis() < MIN_COARSE_INTERVAL_MS) { - builder.clearMinUpdateIntervalMillis(); + builder.setMinUpdateIntervalMillis(MIN_COARSE_INTERVAL_MS); } } diff --git a/services/tests/mockingservicestests/src/com/android/server/location/LocationProviderManagerTest.java b/services/tests/mockingservicestests/src/com/android/server/location/LocationProviderManagerTest.java index 3aedd3c7d753a..d260e4dce79af 100644 --- a/services/tests/mockingservicestests/src/com/android/server/location/LocationProviderManagerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/location/LocationProviderManagerTest.java @@ -22,6 +22,7 @@ import static android.app.AppOpsManager.OP_MONITOR_LOCATION; import static android.location.Criteria.ACCURACY_COARSE; import static android.location.Criteria.ACCURACY_FINE; import static android.location.Criteria.POWER_HIGH; +import static android.location.LocationRequest.PASSIVE_INTERVAL; import static android.os.PowerManager.LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF; import static androidx.test.ext.truth.location.LocationSubject.assertThat; @@ -597,6 +598,38 @@ public class LocationProviderManagerTest { verify(mWakeLock, timeout(TIMEOUT_MS)).release(); } + @Test + public void testRegisterListener_Coarse() throws Exception { + ILocationListener listener = createMockLocationListener(); + mManager.registerLocationRequest( + new LocationRequest.Builder(0).setWorkSource(WORK_SOURCE).build(), + IDENTITY, + PERMISSION_COARSE, + listener); + + mProvider.setProviderLocation(createLocation(NAME, mRandom)); + mProvider.setProviderLocation(createLocation(NAME, mRandom)); + verify(listener, times(1)) + .onLocationChanged(any(Location.class), nullable(IRemoteCallback.class)); + } + + @Test + public void testRegisterListener_Coarse_Passive() throws Exception { + ILocationListener listener = createMockLocationListener(); + mManager.registerLocationRequest( + new LocationRequest.Builder(PASSIVE_INTERVAL) + .setMinUpdateIntervalMillis(0) + .setWorkSource(WORK_SOURCE).build(), + IDENTITY, + PERMISSION_COARSE, + listener); + + mProvider.setProviderLocation(createLocation(NAME, mRandom)); + mProvider.setProviderLocation(createLocation(NAME, mRandom)); + verify(listener, times(1)) + .onLocationChanged(any(Location.class), nullable(IRemoteCallback.class)); + } + @Test public void testGetCurrentLocation() throws Exception { ArgumentCaptor locationCaptor = ArgumentCaptor.forClass(Location.class);