diff options
| author | 2023-12-14 12:06:50 -0800 | |
|---|---|---|
| committer | 2023-12-14 20:19:35 +0000 | |
| commit | 05c670e17049f7d0a22b56ec22d514bf28e58abf (patch) | |
| tree | 8dc58a11082d9a4e8a21c611952b2e94a175f040 | |
| parent | 029cac40b158f9afe490559a84b3dcf6e1d814e7 (diff) | |
Update IMMI#removeImeSurface() to take 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: Ib0fea5997990a72b93e8407fa19902b2258df0d6
8 files changed, 17 insertions, 12 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..e5d3de41d337 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java @@ -171,9 +171,11 @@ public abstract class InputMethodManagerInternal { public abstract void onImeParentChanged(); /** - * Destroys the IME surface. + * Destroys the IME surface for the given display. + * + * @param displayId the display hosting the IME window */ - public abstract void removeImeSurface(); + public abstract void removeImeSurface(int displayId); /** * Updates the IME visibility, back disposition and show IME picker status for SystemUI. @@ -292,7 +294,7 @@ public abstract class InputMethodManagerInternal { } @Override - public void removeImeSurface() { + public void removeImeSurface(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..2210c7acf6e2 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -5683,7 +5683,7 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub } @Override - public void removeImeSurface() { + public void removeImeSurface(int displayId) { mHandler.obtainMessage(MSG_REMOVE_IME_SURFACE).sendToTarget(); } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index a840973a941e..b36a7162613c 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -7060,7 +7060,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } @Override - public void notifyInsetsControlChanged() { + public void notifyInsetsControlChanged(int displayId) { final InsetsStateController stateController = getInsetsStateController(); try { mRemoteInsetsController.insetsControlChanged(stateController.getRawInsetsState(), diff --git a/services/core/java/com/android/server/wm/InsetsControlTarget.java b/services/core/java/com/android/server/wm/InsetsControlTarget.java index 8ecbc177896c..b74eb56ebdca 100644 --- a/services/core/java/com/android/server/wm/InsetsControlTarget.java +++ b/services/core/java/com/android/server/wm/InsetsControlTarget.java @@ -29,8 +29,10 @@ interface InsetsControlTarget { /** * Notifies the control target that the insets control has changed. + * + * @param displayId the display hosting the window of this target */ - default void notifyInsetsControlChanged() { + default void notifyInsetsControlChanged(int displayId) { }; /** diff --git a/services/core/java/com/android/server/wm/InsetsPolicy.java b/services/core/java/com/android/server/wm/InsetsPolicy.java index c089d107d07d..0486b864ea04 100644 --- a/services/core/java/com/android/server/wm/InsetsPolicy.java +++ b/services/core/java/com/android/server/wm/InsetsPolicy.java @@ -715,7 +715,7 @@ class InsetsPolicy { } @Override - public void notifyInsetsControlChanged() { + public void notifyInsetsControlChanged(int displayId) { mHandler.post(this); } diff --git a/services/core/java/com/android/server/wm/InsetsStateController.java b/services/core/java/com/android/server/wm/InsetsStateController.java index c4d01291f558..6b9fcf411ce1 100644 --- a/services/core/java/com/android/server/wm/InsetsStateController.java +++ b/services/core/java/com/android/server/wm/InsetsStateController.java @@ -72,7 +72,7 @@ class InsetsStateController { }; private final InsetsControlTarget mEmptyImeControlTarget = new InsetsControlTarget() { @Override - public void notifyInsetsControlChanged() { + public void notifyInsetsControlChanged(int displayId) { InsetsSourceControl[] controls = getControlsForDispatch(this); if (controls == null) { return; @@ -80,7 +80,7 @@ class InsetsStateController { for (InsetsSourceControl control : controls) { if (control.getType() == WindowInsets.Type.ime()) { mDisplayContent.mWmService.mH.post(() -> - InputMethodManagerInternal.get().removeImeSurface()); + InputMethodManagerInternal.get().removeImeSurface(displayId)); } } } @@ -370,9 +370,10 @@ class InsetsStateController { provider.onSurfaceTransactionApplied(); } final ArraySet<InsetsControlTarget> newControlTargets = new ArraySet<>(); + int displayId = mDisplayContent.getDisplayId(); for (int i = mPendingControlChanged.size() - 1; i >= 0; i--) { final InsetsControlTarget controlTarget = mPendingControlChanged.valueAt(i); - controlTarget.notifyInsetsControlChanged(); + controlTarget.notifyInsetsControlChanged(displayId); if (mControlTargetProvidersMap.containsKey(controlTarget)) { // We only collect targets who get controls, not lose controls. newControlTargets.add(controlTarget); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index b890a9e9bd04..528c0c1c72f8 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -3811,7 +3811,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } @Override - public void notifyInsetsControlChanged() { + public void notifyInsetsControlChanged(int displayId) { ProtoLog.d(WM_DEBUG_WINDOW_INSETS, "notifyInsetsControlChanged for %s ", this); if (mRemoved) { return; diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java index df4af112c087..616a23e7ab5b 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java @@ -294,7 +294,7 @@ class WindowTestsBase extends SystemServiceTestsBase { */ static void suppressInsetsAnimation(InsetsControlTarget target) { spyOn(target); - Mockito.doNothing().when(target).notifyInsetsControlChanged(); + Mockito.doNothing().when(target).notifyInsetsControlChanged(anyInt()); } @After |