Merge "Updates the CarLocationService's EXIT_SUSPEND callback." into qt-qpr1-dev am: 951123aed5
am: 43556266f7
Change-Id: I1aced24b4970793b96903ad647b8422ecbdd4c6e
diff --git a/service/src/com/android/car/CarLocationService.java b/service/src/com/android/car/CarLocationService.java
index bff0550..e7dc0a0 100644
--- a/service/src/com/android/car/CarLocationService.java
+++ b/service/src/com/android/car/CarLocationService.java
@@ -216,7 +216,17 @@
});
break;
case CarPowerStateListener.SUSPEND_EXIT:
- deleteCacheFile();
+ if (mCarDrivingStateService != null) {
+ CarDrivingStateEvent event = mCarDrivingStateService.getCurrentDrivingState();
+ if (event != null
+ && event.eventValue == CarDrivingStateEvent.DRIVING_STATE_MOVING) {
+ deleteCacheFile();
+ } else {
+ logd("Registering to receive driving state.");
+ mCarDrivingStateService.registerDrivingStateChangeListener(
+ mICarDrivingStateChangeEventListener);
+ }
+ }
if (future != null) {
future.complete(null);
}
diff --git a/tests/carservice_unit_test/src/com/android/car/CarLocationServiceTest.java b/tests/carservice_unit_test/src/com/android/car/CarLocationServiceTest.java
index c9e85e0..5384005 100644
--- a/tests/carservice_unit_test/src/com/android/car/CarLocationServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/CarLocationServiceTest.java
@@ -415,13 +415,17 @@
/**
* Test that the {@link CarLocationService} deletes location_cache.json when the system resumes
- * from suspend-to-ram.
+ * from suspend-to-ram if moving.
*/
@Test
- public void testDeletesCacheFileUponSuspendExit() throws Exception {
+ public void testDeletesCacheFileUponSuspendExitWhileMoving() throws Exception {
mCarLocationService.init();
when(mMockLocationManagerProxy.isLocationEnabled()).thenReturn(false);
+ when(mMockCarDrivingStateService.getCurrentDrivingState()).thenReturn(
+ new CarDrivingStateEvent(CarDrivingStateEvent.DRIVING_STATE_MOVING, 0));
+ writeCacheFile("{\"provider\":\"latitude\":16.7666,\"longitude\": \"accuracy\":1.0}");
CompletableFuture<Void> future = new CompletableFuture<>();
+ assertTrue(getLocationCacheFile().exists());
mCarLocationService.onStateChanged(CarPowerStateListener.SUSPEND_EXIT, future);
@@ -431,6 +435,26 @@
}
/**
+ * Test that the {@link CarLocationService} registers for driving state changes when the system
+ * resumes from suspend-to-ram.
+ */
+ @Test
+ public void testRegistersForDrivingStateChangesUponSuspendExit() throws Exception {
+ mCarLocationService.init();
+ when(mMockLocationManagerProxy.isLocationEnabled()).thenReturn(false);
+ when(mMockCarDrivingStateService.getCurrentDrivingState()).thenReturn(
+ new CarDrivingStateEvent(CarDrivingStateEvent.DRIVING_STATE_PARKED, 0));
+ CompletableFuture<Void> future = new CompletableFuture<>();
+
+ mCarLocationService.onStateChanged(CarPowerStateListener.SUSPEND_EXIT, future);
+
+ assertTrue(future.isDone());
+ verify(mMockLocationManagerProxy, times(0)).isLocationEnabled();
+ // One of the registrations should happen during init and another during onStateChanged.
+ verify(mMockCarDrivingStateService, times(2)).registerDrivingStateChangeListener(any());
+ }
+
+ /**
* Test that the {@link CarLocationService} deletes location_cache.json when the car enters a
* moving driving state.
*/