diff options
| author | 2023-12-14 11:48:12 -0800 | |
|---|---|---|
| committer | 2023-12-14 20:20:06 +0000 | |
| commit | 0c09232b01bf093b57665cca22f9d98ddac0581c (patch) | |
| tree | 0eddf9c6a76dccc7df76a3f9ae1f31d77e06a741 | |
| parent | 029cac40b158f9afe490559a84b3dcf6e1d814e7 (diff) | |
Update IMMI#onImeParentChanged() to take the display ID
To support multi-session IME, IMMI needs to know the display hosting
the IME window. So this CL gets the display ID from DisplayContent,
and passes it to IMMI.
This CL just passes an unused parameter to IMMS. It doesn't change
the behavior of the code, thus no flag is required. The passed
parameter will be used by another CL to implement the multi-session
IME, and that CL will be protected by the concurrent_input_methods
feature flag.
Bug: 305829876
Test: atest WmTests && atest FrameworksServicesTests
Change-Id: Ifbfe231102585021d9835760c4a2b742d8e5c027
3 files changed, 7 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java index f526dbe9c66d..f1e12fc2c291 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java @@ -167,8 +167,10 @@ public abstract class InputMethodManagerInternal { /** * Indicates that the IME window has re-parented to the new target when the IME control changed. + * + * @param displayId the display hosting the IME window */ - public abstract void onImeParentChanged(); + public abstract void onImeParentChanged(int displayId); /** * Destroys the IME surface. @@ -288,7 +290,7 @@ public abstract class InputMethodManagerInternal { } @Override - public void onImeParentChanged() { + public void onImeParentChanged(int displayId) { } @Override diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index 09c388f08c7b..76ad0e0fb3ca 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -5671,7 +5671,7 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub } @Override - public void onImeParentChanged() { + public void onImeParentChanged(int displayId) { synchronized (ImfLock.class) { // Hide the IME method menu only when the IME surface parent is changed by the // input target changed, in case seeing the dialog dismiss flickering during diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index a840973a941e..73644b39f38e 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -4769,7 +4769,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp assignRelativeLayerForIme(getSyncTransaction(), true /* forceUpdate */); scheduleAnimation(); - mWmService.mH.post(() -> InputMethodManagerInternal.get().onImeParentChanged()); + mWmService.mH.post( + () -> InputMethodManagerInternal.get().onImeParentChanged(getDisplayId())); } else if (mImeControlTarget != null && mImeControlTarget == mImeLayeringTarget) { // Even if the IME surface parent is not changed, the layer target belonging to the // parent may have changes. Then attempt to reassign if the IME control target is |