Fix unregister after delayed register
Ensure that location requests which are unregistered after they have a pending delayed register correctly cancel the delayed registration so that it does not interefe in the future. Bug: 199009393 Test: atest LocationProviderManagerTest Change-Id: I09281ce9aa78399aa5da19891bbde75b73bd6791
This commit is contained in:
@@ -1960,11 +1960,6 @@ public class LocationProviderManager extends
|
||||
Preconditions.checkState(Thread.holdsLock(mLock));
|
||||
}
|
||||
|
||||
if (mDelayedRegister != null) {
|
||||
mAlarmHelper.cancel(mDelayedRegister);
|
||||
mDelayedRegister = null;
|
||||
}
|
||||
|
||||
// calculate how long the new request should be delayed before sending it off to the
|
||||
// provider, under the assumption that once we send the request off, the provider will
|
||||
// immediately attempt to deliver a new location satisfying that request.
|
||||
@@ -1997,8 +1992,8 @@ public class LocationProviderManager extends
|
||||
public void onAlarm() {
|
||||
synchronized (mLock) {
|
||||
if (mDelayedRegister == this) {
|
||||
setProviderRequest(newRequest);
|
||||
mDelayedRegister = null;
|
||||
setProviderRequest(newRequest);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2025,6 +2020,11 @@ public class LocationProviderManager extends
|
||||
|
||||
@GuardedBy("mLock")
|
||||
void setProviderRequest(ProviderRequest request) {
|
||||
if (mDelayedRegister != null) {
|
||||
mAlarmHelper.cancel(mDelayedRegister);
|
||||
mDelayedRegister = null;
|
||||
}
|
||||
|
||||
EVENT_LOG.logProviderUpdateRequest(mName, request);
|
||||
mProvider.getController().setRequest(request);
|
||||
|
||||
|
||||
@@ -905,6 +905,21 @@ public class LocationProviderManagerTest {
|
||||
assertThat(mProvider.getRequest().getIntervalMillis()).isEqualTo(60000);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProviderRequest_DelayedRequest_Remove() {
|
||||
mProvider.setProviderLocation(createLocation(NAME, mRandom));
|
||||
|
||||
ILocationListener listener1 = createMockLocationListener();
|
||||
LocationRequest request1 = new LocationRequest.Builder(60000)
|
||||
.setWorkSource(WORK_SOURCE)
|
||||
.build();
|
||||
mManager.registerLocationRequest(request1, IDENTITY, PERMISSION_FINE, listener1);
|
||||
mManager.unregisterLocationRequest(listener1);
|
||||
|
||||
mInjector.getAlarmHelper().incrementAlarmTime(60000);
|
||||
assertThat(mProvider.getRequest().isActive()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProviderRequest_SpamRequesting() {
|
||||
mProvider.setProviderLocation(createLocation(NAME, mRandom));
|
||||
|
||||
Reference in New Issue
Block a user