From 08f91a61d094f424c03266d6049ffe4a3f6f2a1b Mon Sep 17 00:00:00 2001 From: Soonil Nagarkar Date: Tue, 5 Oct 2021 11:31:13 -0700 Subject: Fix bug unregistering stationary listener Bug: 196997374 Test: manual + presubmit Change-Id: I1b2a9c7d36c23db0814d5d8a69726c7763facf5d --- .../StationaryThrottlingLocationProvider.java | 1 + .../StationaryThrottlingLocationProviderTest.java | 25 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/location/provider/StationaryThrottlingLocationProvider.java b/services/core/java/com/android/server/location/provider/StationaryThrottlingLocationProvider.java index ad87c45308f8..cc51cea05160 100644 --- a/services/core/java/com/android/server/location/provider/StationaryThrottlingLocationProvider.java +++ b/services/core/java/com/android/server/location/provider/StationaryThrottlingLocationProvider.java @@ -154,6 +154,7 @@ public final class StationaryThrottlingLocationProvider extends DelegateLocation mDeviceStationaryHelper.removeListener(this); mDeviceStationary = false; mDeviceStationaryRealtimeMs = Long.MIN_VALUE; + onThrottlingChangedLocked(false); } } } diff --git a/services/tests/mockingservicestests/src/com/android/server/location/provider/StationaryThrottlingLocationProviderTest.java b/services/tests/mockingservicestests/src/com/android/server/location/provider/StationaryThrottlingLocationProviderTest.java index 63996f0e021c..4d6f49e5d223 100644 --- a/services/tests/mockingservicestests/src/com/android/server/location/provider/StationaryThrottlingLocationProviderTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/location/provider/StationaryThrottlingLocationProviderTest.java @@ -90,7 +90,7 @@ public class StationaryThrottlingLocationProviderTest { } @Test - public void testThrottle() { + public void testThrottle_stationaryExit() { ProviderRequest request = new ProviderRequest.Builder().setIntervalMillis(50).build(); mProvider.getController().setRequest(request); @@ -112,6 +112,29 @@ public class StationaryThrottlingLocationProviderTest { verify(mListener, after(75).times(3)).onReportLocation(any(LocationResult.class)); } + @Test + public void testThrottle_idleExit() { + ProviderRequest request = new ProviderRequest.Builder().setIntervalMillis(50).build(); + + mProvider.getController().setRequest(request); + verify(mDelegate).onSetRequest(request); + + mDelegateProvider.reportLocation(createLocationResult("test_provider", mRandom)); + verify(mListener, times(1)).onReportLocation(any(LocationResult.class)); + + mInjector.getDeviceIdleHelper().setIdle(true); + verify(mDelegate, never()).onSetRequest(ProviderRequest.EMPTY_REQUEST); + + mInjector.getDeviceStationaryHelper().setStationary(true); + verify(mDelegate).onSetRequest(ProviderRequest.EMPTY_REQUEST); + verify(mListener, timeout(75).times(2)).onReportLocation(any(LocationResult.class)); + verify(mListener, timeout(75).times(3)).onReportLocation(any(LocationResult.class)); + + mInjector.getDeviceIdleHelper().setIdle(false); + verify(mDelegate, times(2)).onSetRequest(request); + verify(mListener, after(75).times(3)).onReportLocation(any(LocationResult.class)); + } + @Test public void testThrottle_NoInitialLocation() { ProviderRequest request = new ProviderRequest.Builder().setIntervalMillis(50).build(); -- cgit v1.2.3-59-g8ed1b