diff --git a/library/src/main/java/com/yayandroid/locationmanager/helper/UpdateRequest.java b/library/src/main/java/com/yayandroid/locationmanager/helper/UpdateRequest.java index a22c665..b7fe21d 100644 --- a/library/src/main/java/com/yayandroid/locationmanager/helper/UpdateRequest.java +++ b/library/src/main/java/com/yayandroid/locationmanager/helper/UpdateRequest.java @@ -17,6 +17,10 @@ public UpdateRequest(LocationManager locationManager, LocationListener locationL this.locationListener = locationListener; } + public boolean isRequiredImmediately() { + return minTime == 0; + } + public void run(String provider, long minTime, float minDistance) { this.provider = provider; this.minTime = minTime; diff --git a/library/src/main/java/com/yayandroid/locationmanager/providers/locationprovider/DefaultLocationProvider.java b/library/src/main/java/com/yayandroid/locationmanager/providers/locationprovider/DefaultLocationProvider.java index 18b84a4..51a0b7f 100644 --- a/library/src/main/java/com/yayandroid/locationmanager/providers/locationprovider/DefaultLocationProvider.java +++ b/library/src/main/java/com/yayandroid/locationmanager/providers/locationprovider/DefaultLocationProvider.java @@ -227,11 +227,14 @@ public void onLocationChanged(Location location) { // no need to switch or call fail getSourceProvider().getProviderSwitchTask().stop(); + // Remove update requests if it is running for immediate request + if (getSourceProvider().getUpdateRequest().isRequiredImmediately() || !getConfiguration().keepTracking()) { + getSourceProvider().removeLocationUpdates(this); + } + if (getConfiguration().keepTracking()) { requestUpdateLocation(getConfiguration().defaultProviderConfiguration().requiredTimeInterval(), getConfiguration().defaultProviderConfiguration().requiredDistanceInterval(), false); - } else { - getSourceProvider().removeLocationUpdates(this); } } diff --git a/library/src/test/java/com/yayandroid/locationmanager/providers/locationprovider/DefaultLocationProviderTest.java b/library/src/test/java/com/yayandroid/locationmanager/providers/locationprovider/DefaultLocationProviderTest.java index a20f797..e212531 100644 --- a/library/src/test/java/com/yayandroid/locationmanager/providers/locationprovider/DefaultLocationProviderTest.java +++ b/library/src/test/java/com/yayandroid/locationmanager/providers/locationprovider/DefaultLocationProviderTest.java @@ -391,8 +391,19 @@ public void onLocationChangedShouldStopSwitchTask() { verify(continuousTask).stop(); } + @Test + public void onLocationChangedShouldRemoveUpdatesWhenRequiredImmediately() { + when(locationConfiguration.keepTracking()).thenReturn(true); + when(updateRequest.isRequiredImmediately()).thenReturn(true); + + defaultLocationProvider.onLocationChanged(DUMMY_LOCATION); + + verify(defaultLocationSource).removeLocationUpdates(defaultLocationProvider); + } + @Test public void onLocationChangedShouldRemoveUpdatesWhenKeepTrackingIsFalse() { + when(updateRequest.isRequiredImmediately()).thenReturn(false); when(locationConfiguration.keepTracking()).thenReturn(false); defaultLocationProvider.onLocationChanged(DUMMY_LOCATION);