Merge "Fix unregister after delayed register" into sc-qpr1-dev

This commit is contained in:
TreeHugger Robot
2021-09-22 14:23:54 +00:00
committed by Android (Google) Code Review
2 changed files with 21 additions and 6 deletions

View File

@@ -1960,11 +1960,6 @@ public class LocationProviderManager extends
Preconditions.checkState(Thread.holdsLock(mLock)); 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 // 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 // provider, under the assumption that once we send the request off, the provider will
// immediately attempt to deliver a new location satisfying that request. // immediately attempt to deliver a new location satisfying that request.
@@ -1997,8 +1992,8 @@ public class LocationProviderManager extends
public void onAlarm() { public void onAlarm() {
synchronized (mLock) { synchronized (mLock) {
if (mDelayedRegister == this) { if (mDelayedRegister == this) {
setProviderRequest(newRequest);
mDelayedRegister = null; mDelayedRegister = null;
setProviderRequest(newRequest);
} }
} }
} }
@@ -2025,6 +2020,11 @@ public class LocationProviderManager extends
@GuardedBy("mLock") @GuardedBy("mLock")
void setProviderRequest(ProviderRequest request) { void setProviderRequest(ProviderRequest request) {
if (mDelayedRegister != null) {
mAlarmHelper.cancel(mDelayedRegister);
mDelayedRegister = null;
}
EVENT_LOG.logProviderUpdateRequest(mName, request); EVENT_LOG.logProviderUpdateRequest(mName, request);
mProvider.getController().setRequest(request); mProvider.getController().setRequest(request);

View File

@@ -905,6 +905,21 @@ public class LocationProviderManagerTest {
assertThat(mProvider.getRequest().getIntervalMillis()).isEqualTo(60000); 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 @Test
public void testProviderRequest_SpamRequesting() { public void testProviderRequest_SpamRequesting() {
mProvider.setProviderLocation(createLocation(NAME, mRandom)); mProvider.setProviderLocation(createLocation(NAME, mRandom));