Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f9828e97 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents 938b7d01 a43b64c8
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -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);

+15 −0
Original line number Diff line number Diff line
@@ -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));