diff --git a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java index c82dff22e3285..a4c5a2341d77b 100644 --- a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java +++ b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java @@ -295,6 +295,7 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ mEventTypes = info.eventTypes; mFeedbackType = info.feedbackType; String[] packageNames = info.packageNames; + mPackageNames.clear(); if (packageNames != null) { mPackageNames.addAll(Arrays.asList(packageNames)); } diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AbstractAccessibilityServiceConnectionTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AbstractAccessibilityServiceConnectionTest.java index 0445bff8fd0d7..5327bf7785372 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AbstractAccessibilityServiceConnectionTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AbstractAccessibilityServiceConnectionTest.java @@ -51,6 +51,7 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; @@ -270,6 +271,25 @@ public class AbstractAccessibilityServiceConnectionTest { verify(mMockSystemSupport).onClientChangeLocked(true); } + @Test + public void setServiceInfo_ChangePackageNames_updateSuccess() { + assertTrue(mServiceConnection.mPackageNames.isEmpty()); + + final AccessibilityServiceInfo serviceInfo = new AccessibilityServiceInfo(); + updateServiceInfo(serviceInfo, 0, 0, A11Y_SERVICE_FLAG, + new String[] {PACKAGE_NAME1, PACKAGE_NAME2}, + 1000); + + mServiceConnection.setServiceInfo(serviceInfo); + assertEquals(serviceInfo.packageNames.length, mServiceConnection.mPackageNames.size()); + assertTrue(mServiceConnection.mPackageNames.containsAll( + Arrays.asList(mServiceConnection.getServiceInfo().packageNames))); + + updateServiceInfo(serviceInfo, 0, 0, A11Y_SERVICE_FLAG, null, 1000); + mServiceConnection.setServiceInfo(serviceInfo); + assertTrue(mServiceConnection.mPackageNames.isEmpty()); + } + @Test public void canReceiveEvents_hasEventType_returnTrue() { final AccessibilityServiceInfo serviceInfo = new AccessibilityServiceInfo();