From e201a22faafe5d5858cc69ba22ae358bdeade980 Mon Sep 17 00:00:00 2001 From: yingleiw Date: Tue, 8 Mar 2022 15:47:34 -0800 Subject: [PATCH] Add tests to unbind ime when a11y services unbind or binderDied Test: tests pass Change-Id: Ib8ca4875bda480df1c19aef5bae75b170c43abc7 --- .../AccessibilityManagerServiceTest.java | 38 +++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java index 1f016fb6f017d..56c51507606f0 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java @@ -28,6 +28,8 @@ import static com.android.internal.accessibility.AccessibilityShortcutController import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.doCallRealMethod; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -61,10 +63,12 @@ import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import com.android.compatibility.common.util.TestUtils; +import com.android.internal.compat.IPlatformCompat; import com.android.server.LocalServices; import com.android.server.accessibility.AccessibilityManagerService.AccessibilityDisplayListener; import com.android.server.accessibility.magnification.FullScreenMagnificationController; import com.android.server.accessibility.magnification.MagnificationController; +import com.android.server.accessibility.magnification.MagnificationProcessor; import com.android.server.accessibility.magnification.WindowMagnificationManager; import com.android.server.accessibility.test.MessageCapturingHandler; import com.android.server.pm.UserManagerInternal; @@ -185,7 +189,7 @@ public class AccessibilityManagerServiceTest { mA11yms.mUserStates.put(mA11yms.getCurrentUserIdLocked(), userState); } - private void setupAccessibilityServiceConnection() { + private void setupAccessibilityServiceConnection(int serviceInfoFlag) { final AccessibilityUserState userState = mA11yms.mUserStates.get( mA11yms.getCurrentUserIdLocked()); when(mMockServiceInfo.getResolveInfo()).thenReturn(mMockResolveInfo); @@ -193,7 +197,12 @@ public class AccessibilityManagerServiceTest { mMockResolveInfo.serviceInfo.applicationInfo = mock(ApplicationInfo.class); when(mMockBinder.queryLocalInterface(any())).thenReturn(mMockServiceClient); + when(mMockSystemSupport.getKeyEventDispatcher()).thenReturn(mock(KeyEventDispatcher.class)); + when(mMockSystemSupport.getMagnificationProcessor()).thenReturn( + mock(MagnificationProcessor.class)); mTestableContext.addMockService(COMPONENT_NAME, mMockBinder); + + mMockServiceInfo.flags = serviceInfoFlag; mAccessibilityServiceConnection = new AccessibilityServiceConnection( userState, mTestableContext, @@ -256,7 +265,7 @@ public class AccessibilityManagerServiceTest { @SmallTest @Test public void testOnSystemActionsChanged() throws Exception { - setupAccessibilityServiceConnection(); + setupAccessibilityServiceConnection(0); final AccessibilityUserState userState = mA11yms.mUserStates.get( mA11yms.getCurrentUserIdLocked()); @@ -376,7 +385,7 @@ public class AccessibilityManagerServiceTest { @SmallTest @Test public void testOnClientChange_boundServiceCanControlMagnification_requestConnection() { - setupAccessibilityServiceConnection(); + setupAccessibilityServiceConnection(0); when(mMockSecurityPolicy.canControlMagnification(any())).thenReturn(true); // Invokes client change to trigger onUserStateChanged. @@ -385,6 +394,29 @@ public class AccessibilityManagerServiceTest { verify(mMockWindowMagnificationMgr).requestConnection(true); } + @Test + public void testUnbindIme_whenServiceUnbinds() { + setupAccessibilityServiceConnection(AccessibilityServiceInfo.FLAG_INPUT_METHOD_EDITOR); + mAccessibilityServiceConnection.unbindLocked(); + verify(mMockSystemSupport, atLeastOnce()).unbindImeLocked(mAccessibilityServiceConnection); + } + + @Test + public void testUnbindIme_whenServiceCrashed() { + setupAccessibilityServiceConnection(AccessibilityServiceInfo.FLAG_INPUT_METHOD_EDITOR); + mAccessibilityServiceConnection.binderDied(); + verify(mMockSystemSupport).unbindImeLocked(mAccessibilityServiceConnection); + } + + @Test + public void testUnbindIme_whenServiceStopsRequestingIme() { + setupAccessibilityServiceConnection(AccessibilityServiceInfo.FLAG_INPUT_METHOD_EDITOR); + doCallRealMethod().when(mMockServiceInfo).updateDynamicallyConfigurableProperties( + any(IPlatformCompat.class), any(AccessibilityServiceInfo.class)); + mAccessibilityServiceConnection.setServiceInfo(new AccessibilityServiceInfo()); + verify(mMockSystemSupport).unbindImeLocked(mAccessibilityServiceConnection); + } + public static class FakeInputFilter extends AccessibilityInputFilter { FakeInputFilter(Context context, AccessibilityManagerService service) {