diff options
5 files changed, 15 insertions, 34 deletions
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index 5285dca83eaf..2d7761026239 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -1282,7 +1282,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. @SuppressWarnings("GuardedBy") final IntFunction<InputMethodBindingController> bindingControllerFactory = userId -> new InputMethodBindingController(userId, InputMethodManagerService.this); - mUserDataRepository = new UserDataRepository(mContext, mHandler, mUserManagerInternal, + mUserDataRepository = new UserDataRepository(mHandler, mUserManagerInternal, bindingControllerForTesting != null ? bindingControllerForTesting : bindingControllerFactory); for (int id : mUserManagerInternal.getUserIds()) { @@ -1291,7 +1291,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. final InputMethodSettings settings = InputMethodSettingsRepository.get(mCurrentUserId); final var userData = getUserData(mCurrentUserId); - userData.mSwitchingController.resetCircularListLocked(settings); + userData.mSwitchingController.resetCircularListLocked(mContext, settings); userData.mHardwareKeyboardShortcutController.update(settings); mMenuController = new InputMethodMenuController(this); @@ -2958,7 +2958,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. } final var userData = getUserData(userId); - userData.mSwitchingController.resetCircularListLocked(settings); + userData.mSwitchingController.resetCircularListLocked(mContext, settings); userData.mHardwareKeyboardShortcutController.update(settings); } @@ -3036,7 +3036,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. } final var userData = getUserData(userId); - userData.mSwitchingController.resetCircularListLocked(settings); + userData.mSwitchingController.resetCircularListLocked(mContext, settings); userData.mHardwareKeyboardShortcutController.update(settings); sendOnNavButtonFlagsChangedLocked(); } @@ -5301,7 +5301,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. updateDefaultVoiceImeIfNeededLocked(); final var userData = getUserData(userId); - userData.mSwitchingController.resetCircularListLocked(settings); + userData.mSwitchingController.resetCircularListLocked(mContext, settings); userData.mHardwareKeyboardShortcutController.update(settings); sendOnNavButtonFlagsChangedLocked(); diff --git a/services/core/java/com/android/server/inputmethod/InputMethodSubtypeSwitchingController.java b/services/core/java/com/android/server/inputmethod/InputMethodSubtypeSwitchingController.java index 0203ab05535c..bb1b9df6cf4c 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodSubtypeSwitchingController.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodSubtypeSwitchingController.java @@ -477,12 +477,9 @@ final class InputMethodSubtypeSwitchingController { } @NonNull - private final Context mContext; - @NonNull private ControllerImpl mController; - InputMethodSubtypeSwitchingController(@NonNull Context context) { - mContext = context; + InputMethodSubtypeSwitchingController() { mController = ControllerImpl.createFrom(null, Collections.emptyList()); } @@ -491,11 +488,12 @@ final class InputMethodSubtypeSwitchingController { mController.onUserActionLocked(imi, subtype); } - public void resetCircularListLocked(@NonNull InputMethodSettings settings) { + public void resetCircularListLocked(@NonNull Context context, + @NonNull InputMethodSettings settings) { mController = ControllerImpl.createFrom(mController, getSortedInputMethodAndSubtypeList( false /* includeAuxiliarySubtypes */, false /* isScreenLocked */, - false /* forImeMenu */, mContext, settings)); + false /* forImeMenu */, context, settings)); } @Nullable diff --git a/services/core/java/com/android/server/inputmethod/UserDataRepository.java b/services/core/java/com/android/server/inputmethod/UserDataRepository.java index 423226af3cb4..3da4a14b10be 100644 --- a/services/core/java/com/android/server/inputmethod/UserDataRepository.java +++ b/services/core/java/com/android/server/inputmethod/UserDataRepository.java @@ -18,7 +18,6 @@ package com.android.server.inputmethod; import android.annotation.NonNull; import android.annotation.UserIdInt; -import android.content.Context; import android.content.pm.UserInfo; import android.os.Handler; import android.util.SparseArray; @@ -36,15 +35,12 @@ final class UserDataRepository { private final IntFunction<InputMethodBindingController> mBindingControllerFactory; - @NonNull - private final Context mContext; - @GuardedBy("ImfLock.class") @NonNull UserData getOrCreate(@UserIdInt int userId) { UserData userData = mUserData.get(userId); if (userData == null) { - userData = new UserData(userId, mBindingControllerFactory.apply(userId), mContext); + userData = new UserData(userId, mBindingControllerFactory.apply(userId)); mUserData.put(userId, userData); } return userData; @@ -58,10 +54,8 @@ final class UserDataRepository { } UserDataRepository( - @NonNull Context context, @NonNull Handler handler, @NonNull UserManagerInternal userManagerInternal, @NonNull IntFunction<InputMethodBindingController> bindingControllerFactory) { - mContext = context; mBindingControllerFactory = bindingControllerFactory; userManagerInternal.addUserLifecycleListener( new UserManagerInternal.UserLifecycleListener() { @@ -105,10 +99,10 @@ final class UserDataRepository { * Intended to be instantiated only from this file. */ private UserData(@UserIdInt int userId, - @NonNull InputMethodBindingController bindingController, @NonNull Context context) { + @NonNull InputMethodBindingController bindingController) { mUserId = userId; mBindingController = bindingController; - mSwitchingController = new InputMethodSubtypeSwitchingController(context); + mSwitchingController = new InputMethodSubtypeSwitchingController(); mHardwareKeyboardShortcutController = new HardwareKeyboardShortcutController(); } diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java index 2dfb30312cca..42bd75a7a67e 100644 --- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java +++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java @@ -181,7 +181,6 @@ public class InputMethodManagerServiceTestBase { // InputMethodManagerService. doNothing().when(mContext).enforceCallingPermission(anyString(), anyString()); doNothing().when(mContext).sendBroadcastAsUser(any(), any()); - doReturn(mContext).when(mContext).createContextAsUser(any(), anyInt()); doReturn(null).when(mContext).registerReceiver(any(), any()); doReturn(null) .when(mContext) diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/UserDataRepositoryTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/UserDataRepositoryTest.java index 7592d3417fe2..f9f45057f57f 100644 --- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/UserDataRepositoryTest.java +++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/UserDataRepositoryTest.java @@ -18,22 +18,16 @@ package com.android.server.inputmethod; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import android.content.Context; import android.content.pm.UserInfo; import android.os.ConditionVariable; import android.os.Handler; import android.os.Looper; import android.platform.test.ravenwood.RavenwoodRule; -import androidx.test.platform.app.InstrumentationRegistry; - import com.android.server.pm.UserManagerInternal; import org.junit.After; @@ -67,14 +61,10 @@ public final class UserDataRepositoryTest { private IntFunction<InputMethodBindingController> mBindingControllerFactory; - private Context mMockedContext; - @Before public void setUp() { MockitoAnnotations.initMocks(this); SecureSettingsWrapper.startTestMode(); - mMockedContext = spy(InstrumentationRegistry.getInstrumentation().getTargetContext()); - doReturn(mMockedContext).when(mMockedContext).createContextAsUser(any(), anyInt()); mHandler = new Handler(Looper.getMainLooper()); mBindingControllerFactory = new IntFunction<InputMethodBindingController>() { @@ -96,7 +86,7 @@ public final class UserDataRepositoryTest { // Create UserDataRepository and capture the user lifecycle listener final var captor = ArgumentCaptor.forClass(UserManagerInternal.UserLifecycleListener.class); final var bindingControllerFactorySpy = spy(mBindingControllerFactory); - final var repository = new UserDataRepository(mMockedContext, mHandler, + final var repository = new UserDataRepository(mHandler, mMockUserManagerInternal, bindingControllerFactorySpy); verify(mMockUserManagerInternal, times(1)).addUserLifecycleListener(captor.capture()); @@ -123,7 +113,7 @@ public final class UserDataRepositoryTest { public void testUserDataRepository_removesUserInfoOnUserRemovedEvent() { // Create UserDataRepository and capture the user lifecycle listener final var captor = ArgumentCaptor.forClass(UserManagerInternal.UserLifecycleListener.class); - final var repository = new UserDataRepository(mMockedContext, mHandler, + final var repository = new UserDataRepository(mHandler, mMockUserManagerInternal, userId -> new InputMethodBindingController(userId, mMockInputMethodManagerService)); @@ -146,7 +136,7 @@ public final class UserDataRepositoryTest { @Test public void testGetOrCreate() { - final var repository = new UserDataRepository(mMockedContext, mHandler, + final var repository = new UserDataRepository(mHandler, mMockUserManagerInternal, mBindingControllerFactory); synchronized (ImfLock.class) { |