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

Commit 7fad817f authored by Yohei Yukawa's avatar Yohei Yukawa Committed by Android (Google) Code Review
Browse files

Merge "Mock local services in a more reliable way" into main

parents 6d980605 62c089ce
Loading
Loading
Loading
Loading
+17 −14
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.util.ArraySet;
import android.view.InputChannel;
import android.view.inputmethod.EditorInfo;
import android.window.ImeOnBackInvokedDispatcher;
@@ -134,6 +135,14 @@ public class InputMethodManagerServiceTestBase {
    protected boolean mIsLargeScreen;
    private InputManagerGlobal.TestSession mInputManagerGlobalSession;

    private final ArraySet<Class<?>> mRegisteredLocalServices = new ArraySet<>();

    protected <T> void addLocalServiceMock(Class<T> type, T service) {
        mRegisteredLocalServices.add(type);
        LocalServices.removeServiceForTest(type);
        LocalServices.addService(type, service);
    }

    @BeforeClass
    public static void setupClass() {
        // Make sure DeviceConfig's lazy-initialized ContentProvider gets
@@ -148,7 +157,6 @@ public class InputMethodManagerServiceTestBase {
                mockitoSession()
                        .initMocks(this)
                        .strictness(Strictness.LENIENT)
                        .spyStatic(LocalServices.class)
                        .mockStatic(ServiceManager.class)
                        .mockStatic(SystemServerInitThreadPool.class)
                        .startMocking();
@@ -163,18 +171,13 @@ public class InputMethodManagerServiceTestBase {
        mEditorInfo.packageName = TEST_EDITOR_PKG_NAME;

        // Injecting and mocking local services.
        doReturn(mMockWindowManagerInternal)
                .when(() -> LocalServices.getService(WindowManagerInternal.class));
        doReturn(mMockActivityManagerInternal)
                .when(() -> LocalServices.getService(ActivityManagerInternal.class));
        doReturn(mMockPackageManagerInternal)
                .when(() -> LocalServices.getService(PackageManagerInternal.class));
        doReturn(mMockInputManagerInternal)
                .when(() -> LocalServices.getService(InputManagerInternal.class));
        doReturn(mMockUserManagerInternal)
                .when(() -> LocalServices.getService(UserManagerInternal.class));
        doReturn(mMockImeTargetVisibilityPolicy)
                .when(() -> LocalServices.getService(ImeTargetVisibilityPolicy.class));
        addLocalServiceMock(WindowManagerInternal.class, mMockWindowManagerInternal);
        addLocalServiceMock(ActivityManagerInternal.class, mMockActivityManagerInternal);
        addLocalServiceMock(PackageManagerInternal.class, mMockPackageManagerInternal);
        addLocalServiceMock(InputManagerInternal.class, mMockInputManagerInternal);
        addLocalServiceMock(UserManagerInternal.class, mMockUserManagerInternal);
        addLocalServiceMock(ImeTargetVisibilityPolicy.class, mMockImeTargetVisibilityPolicy);

        doReturn(mMockIInputMethodManager)
                .when(() -> ServiceManager.getServiceOrThrow(Context.INPUT_METHOD_SERVICE));
        doReturn(mMockIPlatformCompat)
@@ -289,7 +292,7 @@ public class InputMethodManagerServiceTestBase {
        if (mInputManagerGlobalSession != null) {
            mInputManagerGlobalSession.close();
        }
        LocalServices.removeServiceForTest(InputMethodManagerInternal.class);
        mRegisteredLocalServices.forEach(LocalServices::removeServiceForTest);
    }

    protected void verifyShowSoftInput(boolean setVisible, boolean showSoftInput)
+1 −3
Original line number Diff line number Diff line
@@ -50,7 +50,6 @@ import com.android.internal.inputmethod.InputBindResult;
import com.android.internal.inputmethod.InputMethodDebug;
import com.android.internal.inputmethod.StartInputFlags;
import com.android.internal.inputmethod.StartInputReason;
import com.android.server.LocalServices;
import com.android.server.companion.virtual.VirtualDeviceManagerInternal;
import com.android.server.wm.WindowManagerInternal;

@@ -270,8 +269,7 @@ public class InputMethodManagerServiceWindowGainedFocusTest

    @Test
    public void startInputOrWindowGainedFocus_localeHintsOverride() throws RemoteException {
        doReturn(mMockVdmInternal).when(
                () -> LocalServices.getService(VirtualDeviceManagerInternal.class));
        addLocalServiceMock(VirtualDeviceManagerInternal.class, mMockVdmInternal);
        LocaleList overrideLocale = LocaleList.forLanguageTags("zh-CN");
        doReturn(overrideLocale).when(mMockVdmInternal).getPreferredLocaleListForUid(anyInt());
        mockHasImeFocusAndRestoreImeVisibility(false /* restoreImeVisibility */);