Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f456b449 authored by Yinglei Wang's avatar Yinglei Wang Committed by Android (Google) Code Review
Browse files

Merge "Add tests to unbind ime when a11y services unbind or binderDied" into tm-dev

parents f6051391 e201a22f
Loading
Loading
Loading
Loading
+35 −3
Original line number Original line Diff line number Diff line
@@ -28,6 +28,8 @@ import static com.android.internal.accessibility.AccessibilityShortcutController
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
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.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.never;
@@ -61,10 +63,12 @@ import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;


import com.android.compatibility.common.util.TestUtils;
import com.android.compatibility.common.util.TestUtils;
import com.android.internal.compat.IPlatformCompat;
import com.android.server.LocalServices;
import com.android.server.LocalServices;
import com.android.server.accessibility.AccessibilityManagerService.AccessibilityDisplayListener;
import com.android.server.accessibility.AccessibilityManagerService.AccessibilityDisplayListener;
import com.android.server.accessibility.magnification.FullScreenMagnificationController;
import com.android.server.accessibility.magnification.FullScreenMagnificationController;
import com.android.server.accessibility.magnification.MagnificationController;
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.magnification.WindowMagnificationManager;
import com.android.server.accessibility.test.MessageCapturingHandler;
import com.android.server.accessibility.test.MessageCapturingHandler;
import com.android.server.pm.UserManagerInternal;
import com.android.server.pm.UserManagerInternal;
@@ -185,7 +189,7 @@ public class AccessibilityManagerServiceTest {
        mA11yms.mUserStates.put(mA11yms.getCurrentUserIdLocked(), userState);
        mA11yms.mUserStates.put(mA11yms.getCurrentUserIdLocked(), userState);
    }
    }


    private void setupAccessibilityServiceConnection() {
    private void setupAccessibilityServiceConnection(int serviceInfoFlag) {
        final AccessibilityUserState userState = mA11yms.mUserStates.get(
        final AccessibilityUserState userState = mA11yms.mUserStates.get(
                mA11yms.getCurrentUserIdLocked());
                mA11yms.getCurrentUserIdLocked());
        when(mMockServiceInfo.getResolveInfo()).thenReturn(mMockResolveInfo);
        when(mMockServiceInfo.getResolveInfo()).thenReturn(mMockResolveInfo);
@@ -193,7 +197,12 @@ public class AccessibilityManagerServiceTest {
        mMockResolveInfo.serviceInfo.applicationInfo = mock(ApplicationInfo.class);
        mMockResolveInfo.serviceInfo.applicationInfo = mock(ApplicationInfo.class);


        when(mMockBinder.queryLocalInterface(any())).thenReturn(mMockServiceClient);
        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);
        mTestableContext.addMockService(COMPONENT_NAME, mMockBinder);

        mMockServiceInfo.flags = serviceInfoFlag;
        mAccessibilityServiceConnection = new AccessibilityServiceConnection(
        mAccessibilityServiceConnection = new AccessibilityServiceConnection(
                userState,
                userState,
                mTestableContext,
                mTestableContext,
@@ -256,7 +265,7 @@ public class AccessibilityManagerServiceTest {
    @SmallTest
    @SmallTest
    @Test
    @Test
    public void testOnSystemActionsChanged() throws Exception {
    public void testOnSystemActionsChanged() throws Exception {
        setupAccessibilityServiceConnection();
        setupAccessibilityServiceConnection(0);
        final AccessibilityUserState userState = mA11yms.mUserStates.get(
        final AccessibilityUserState userState = mA11yms.mUserStates.get(
                mA11yms.getCurrentUserIdLocked());
                mA11yms.getCurrentUserIdLocked());


@@ -376,7 +385,7 @@ public class AccessibilityManagerServiceTest {
    @SmallTest
    @SmallTest
    @Test
    @Test
    public void testOnClientChange_boundServiceCanControlMagnification_requestConnection() {
    public void testOnClientChange_boundServiceCanControlMagnification_requestConnection() {
        setupAccessibilityServiceConnection();
        setupAccessibilityServiceConnection(0);
        when(mMockSecurityPolicy.canControlMagnification(any())).thenReturn(true);
        when(mMockSecurityPolicy.canControlMagnification(any())).thenReturn(true);


        // Invokes client change to trigger onUserStateChanged.
        // Invokes client change to trigger onUserStateChanged.
@@ -385,6 +394,29 @@ public class AccessibilityManagerServiceTest {
        verify(mMockWindowMagnificationMgr).requestConnection(true);
        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 {
    public static class FakeInputFilter extends AccessibilityInputFilter {
        FakeInputFilter(Context context,
        FakeInputFilter(Context context,
                AccessibilityManagerService service) {
                AccessibilityManagerService service) {