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

Commit a43b64c8 authored by Soonil Nagarkar's avatar Soonil Nagarkar
Browse files

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
parent d9a274cf
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));