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

Commit 39126f00 authored by Yinglei Wang's avatar Yinglei Wang Committed by Automerger Merge Worker
Browse files

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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17141496

Change-Id: I8803904f0b67ae9b5bc1cfb686614ce55f83a8f7
parents 1dc99e88 f456b449
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) {