diff options
| author | 2024-05-08 17:04:41 +0200 | |
|---|---|---|
| committer | 2024-05-15 13:27:45 +0000 | |
| commit | 8ed772f4b524586ef35b7d6fd2333c062b648b04 (patch) | |
| tree | 0be8b7cbf720eba6095049f0efa8973bc636237e | |
| parent | 3559a2028062dff70f9e8921aeb026e53036b38a (diff) | |
IME: Fix InputMethodSystemServerTests for defer_show_soft_input_until_session_creation
With defer_show_soft_input_until_session_creation enabled, IMMS won't
show the IME unitl a session has been created.
Updates the tests to maintain a created session.
Bug: 339239657
Bug: 337766845
Test: atest FrameworksInputMethodSystemServerTests
Flag: TEST_ONLY
Change-Id: I6bd3da92cf953780dd62b1b29fd07c11bf511832
2 files changed, 20 insertions, 2 deletions
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java index 1d225ba09bbd..221a99102daa 100644 --- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java +++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java @@ -36,9 +36,10 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.notNull; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import static java.util.Objects.requireNonNull; + import android.os.Binder; import android.os.IBinder; import android.os.RemoteException; @@ -72,7 +73,10 @@ public class DefaultImeVisibilityApplierTest extends InputMethodManagerServiceTe super.setUp(); mVisibilityApplier = (DefaultImeVisibilityApplier) mInputMethodManagerService.getVisibilityApplier(); - mInputMethodManagerService.setAttachedClientForTesting(mock(ClientState.class)); + synchronized (ImfLock.class) { + mInputMethodManagerService.setAttachedClientForTesting(requireNonNull( + mInputMethodManagerService.getClientStateLocked(mMockInputMethodClient))); + } } @Test 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 cff22654e30c..28a99f2f8e87 100644 --- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java +++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java @@ -29,6 +29,7 @@ import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.notNull; import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -45,6 +46,7 @@ import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; +import android.view.InputChannel; import android.view.inputmethod.EditorInfo; import android.window.ImeOnBackInvokedDispatcher; @@ -53,6 +55,7 @@ import androidx.test.platform.app.InstrumentationRegistry; import com.android.internal.compat.IPlatformCompat; import com.android.internal.inputmethod.IInputMethod; import com.android.internal.inputmethod.IInputMethodClient; +import com.android.internal.inputmethod.IInputMethodSession; import com.android.internal.inputmethod.IRemoteAccessibilityInputConnection; import com.android.internal.inputmethod.IRemoteInputConnection; import com.android.internal.inputmethod.InputBindResult; @@ -104,6 +107,7 @@ public class InputMethodManagerServiceTestBase { @Mock protected UserManagerInternal mMockUserManagerInternal; @Mock protected InputMethodBindingController mMockInputMethodBindingController; @Mock protected IInputMethodClient mMockInputMethodClient; + @Mock protected IInputMethodSession mMockInputMethodSession; @Mock protected IBinder mWindowToken; @Mock protected IRemoteInputConnection mMockRemoteInputConnection; @Mock protected IRemoteAccessibilityInputConnection mMockRemoteAccessibilityInputConnection; @@ -246,6 +250,7 @@ public class InputMethodManagerServiceTestBase { // Call InputMethodManagerService#addClient() as a preparation to start interacting with it. mInputMethodManagerService.addClient(mMockInputMethodClient, mMockRemoteInputConnection, 0); + createSessionForClient(mMockInputMethodClient); } @After @@ -295,4 +300,13 @@ public class InputMethodManagerServiceTestBase { .hideSoftInput(any() /* hideInputToken */, notNull() /* statsToken */, anyInt() /* flags */, any() /* resultReceiver */); } + + protected void createSessionForClient(IInputMethodClient client) { + synchronized (ImfLock.class) { + ClientState cs = mInputMethodManagerService.getClientStateLocked(client); + cs.mCurSession = new InputMethodManagerService.SessionState(cs, + mMockInputMethodInvoker, mMockInputMethodSession, mock( + InputChannel.class)); + } + } } |