Changed CarUserManager.addListener() to use an Executor.
Test: atest CtsCarTestCases:android.car.cts.CarUserManagerTest
Bug: 144120654
Bug: 146207078
Change-Id: I0c483dc64cfa59eee25fbb241d16dd69f3414968
diff --git a/tests/tests/car/src/android/car/cts/CarUserManagerTest.java b/tests/tests/car/src/android/car/cts/CarUserManagerTest.java
index b2e94e9..622fa28 100644
--- a/tests/tests/car/src/android/car/cts/CarUserManagerTest.java
+++ b/tests/tests/car/src/android/car/cts/CarUserManagerTest.java
@@ -21,6 +21,8 @@
import static com.android.compatibility.common.util.ShellIdentityUtils.invokeMethodWithShellPermissionsNoReturn;
import static com.android.compatibility.common.util.ShellUtils.runShellCommand;
+import static com.google.common.truth.Truth.assertWithMessage;
+
import static org.junit.Assert.fail;
import static org.testng.Assert.assertThrows;
@@ -45,6 +47,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
@@ -73,6 +76,9 @@
private static int sInitialUserId = UserHandle.myUserId();
private static int sNewUserId = UserHandle.USER_NULL;
+ private final Executor mNoOpExecutor = (r) -> {};
+ private final UserLifecycleListener mNoOpListener = (e) -> {};
+
@Override
@Before
public void setUp() throws Exception {
@@ -102,7 +108,8 @@
public void testAddListener_noPermission() throws Exception {
toggleInteractAcrossUsersPermission(false);
try {
- assertThrows(SecurityException.class, ()-> sCarUserManager.addListener((e) -> {}));
+ assertThrows(SecurityException.class,
+ () -> sCarUserManager.addListener(mNoOpExecutor, mNoOpListener));
} finally {
toggleInteractAcrossUsersPermission(true);
}
@@ -112,7 +119,8 @@
public void testRemoveListener_noPermission() throws Exception {
toggleInteractAcrossUsersPermission(false);
try {
- assertThrows(SecurityException.class, ()-> sCarUserManager.removeListener((e) -> {}));
+ assertThrows(SecurityException.class,
+ ()-> sCarUserManager.removeListener(mNoOpListener));
} finally {
toggleInteractAcrossUsersPermission(true);
}
@@ -171,7 +179,13 @@
}
};
Log.d(TAG, "registering listener: " + listener);
- sCarUserManager.addListener(listener);
+
+
+ AtomicBoolean executedRef = new AtomicBoolean();
+ sCarUserManager.addListener((r) -> {
+ executedRef.set(true);
+ r.run();
+ }, listener);
// Switch while listener is registered
switchUser(newUserId);
@@ -179,6 +193,9 @@
fail("listener not called in " + SWITCH_TIMEOUT_USING_CHECK_MS + "ms");
}
+ // Make sure it was executed in the proper threaqd
+ assertWithMessage("not executed on executor").that(executedRef.get()).isTrue();
+
// Then switch back when it isn't
// TODO(b/144120654): the current mechanism is not thread safe because if an event is
// received before this line, it wouldn't be detected. But that's fine for now, as this test