Loading services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java +11 −5 Original line number Diff line number Diff line Loading @@ -133,10 +133,13 @@ public abstract class InputMethodManagerInternal { * * @param windowToken the window token that is now in control, or {@code null} if no client * window is in control of the IME. * @param imeParentChanged {@code true} when the window manager thoughts the IME surface parent * will end up to change later, or {@code false} otherwise. */ public abstract void reportImeControl(@Nullable IBinder windowToken, boolean imeParentChanged); public abstract void reportImeControl(@Nullable IBinder windowToken); /** * Indicates that the IME window has re-parented to the new target when the IME control changed. */ public abstract void onImeParentChanged(); /** * Destroys the IME surface. Loading Loading @@ -226,8 +229,11 @@ public abstract class InputMethodManagerInternal { } @Override public void reportImeControl(@Nullable IBinder windowToken, boolean imeParentChanged) { public void reportImeControl(@Nullable IBinder windowToken) { } @Override public void onImeParentChanged() { } @Override Loading services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +11 −7 Original line number Diff line number Diff line Loading @@ -5700,21 +5700,25 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub } @Override public void reportImeControl(@Nullable IBinder windowToken, boolean imeParentChanged) { public void reportImeControl(@Nullable IBinder windowToken) { synchronized (ImfLock.class) { if (mCurFocusedWindow != windowToken) { // mCurPerceptible was set by the focused window, but it is no longer in // control, so we reset mCurPerceptible. mCurPerceptible = true; } if (imeParentChanged) { // Hide the IME method menu earlier when the IME surface parent will change in } } @Override public void onImeParentChanged() { synchronized (ImfLock.class) { // Hide the IME method menu when the IME surface parent will change in // case seeing the dialog dismiss flickering during the next focused window // starting the input connection. mMenuController.hideInputMethodMenu(); } } } @Override public void removeImeSurface() { Loading services/core/java/com/android/server/wm/DisplayContent.java +5 −6 Original line number Diff line number Diff line Loading @@ -4291,18 +4291,15 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // Update Ime parent when IME insets leash created or the new IME layering target might // updated from setImeLayeringTarget, which is the best time that default IME visibility // has been settled down after IME control target changed. final boolean imeParentChanged = prevImeControlTarget != mImeControlTarget || forceUpdateImeParent; if (imeParentChanged) { final boolean imeControlChanged = prevImeControlTarget != mImeControlTarget; if (imeControlChanged || forceUpdateImeParent) { updateImeParent(); } final WindowState win = InsetsControlTarget.asWindowOrNull(mImeControlTarget); final IBinder token = win != null ? win.mClient.asBinder() : null; // Note: not allowed to call into IMMS with the WM lock held, hence the post. mWmService.mH.post(() -> InputMethodManagerInternal.get().reportImeControl(token, imeParentChanged) ); mWmService.mH.post(() -> InputMethodManagerInternal.get().reportImeControl(token)); } void updateImeParent() { Loading @@ -4324,6 +4321,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // do a force update to make sure there is a layer set for the new parent. assignRelativeLayerForIme(getSyncTransaction(), true /* forceUpdate */); scheduleAnimation(); mWmService.mH.post(() -> InputMethodManagerInternal.get().onImeParentChanged()); } } Loading services/core/java/com/android/server/wm/WindowState.java +2 −1 Original line number Diff line number Diff line Loading @@ -2464,7 +2464,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP dc.setImeLayeringTarget(null); dc.computeImeTarget(true /* updateImeTarget */); } if (dc.getImeInputTarget() == this) { if (dc.getImeInputTarget() == this && (mActivityRecord == null || !mActivityRecord.isRelaunching())) { dc.updateImeInputAndControlTarget(null); } Loading Loading
services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java +11 −5 Original line number Diff line number Diff line Loading @@ -133,10 +133,13 @@ public abstract class InputMethodManagerInternal { * * @param windowToken the window token that is now in control, or {@code null} if no client * window is in control of the IME. * @param imeParentChanged {@code true} when the window manager thoughts the IME surface parent * will end up to change later, or {@code false} otherwise. */ public abstract void reportImeControl(@Nullable IBinder windowToken, boolean imeParentChanged); public abstract void reportImeControl(@Nullable IBinder windowToken); /** * Indicates that the IME window has re-parented to the new target when the IME control changed. */ public abstract void onImeParentChanged(); /** * Destroys the IME surface. Loading Loading @@ -226,8 +229,11 @@ public abstract class InputMethodManagerInternal { } @Override public void reportImeControl(@Nullable IBinder windowToken, boolean imeParentChanged) { public void reportImeControl(@Nullable IBinder windowToken) { } @Override public void onImeParentChanged() { } @Override Loading
services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +11 −7 Original line number Diff line number Diff line Loading @@ -5700,21 +5700,25 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub } @Override public void reportImeControl(@Nullable IBinder windowToken, boolean imeParentChanged) { public void reportImeControl(@Nullable IBinder windowToken) { synchronized (ImfLock.class) { if (mCurFocusedWindow != windowToken) { // mCurPerceptible was set by the focused window, but it is no longer in // control, so we reset mCurPerceptible. mCurPerceptible = true; } if (imeParentChanged) { // Hide the IME method menu earlier when the IME surface parent will change in } } @Override public void onImeParentChanged() { synchronized (ImfLock.class) { // Hide the IME method menu when the IME surface parent will change in // case seeing the dialog dismiss flickering during the next focused window // starting the input connection. mMenuController.hideInputMethodMenu(); } } } @Override public void removeImeSurface() { Loading
services/core/java/com/android/server/wm/DisplayContent.java +5 −6 Original line number Diff line number Diff line Loading @@ -4291,18 +4291,15 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // Update Ime parent when IME insets leash created or the new IME layering target might // updated from setImeLayeringTarget, which is the best time that default IME visibility // has been settled down after IME control target changed. final boolean imeParentChanged = prevImeControlTarget != mImeControlTarget || forceUpdateImeParent; if (imeParentChanged) { final boolean imeControlChanged = prevImeControlTarget != mImeControlTarget; if (imeControlChanged || forceUpdateImeParent) { updateImeParent(); } final WindowState win = InsetsControlTarget.asWindowOrNull(mImeControlTarget); final IBinder token = win != null ? win.mClient.asBinder() : null; // Note: not allowed to call into IMMS with the WM lock held, hence the post. mWmService.mH.post(() -> InputMethodManagerInternal.get().reportImeControl(token, imeParentChanged) ); mWmService.mH.post(() -> InputMethodManagerInternal.get().reportImeControl(token)); } void updateImeParent() { Loading @@ -4324,6 +4321,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // do a force update to make sure there is a layer set for the new parent. assignRelativeLayerForIme(getSyncTransaction(), true /* forceUpdate */); scheduleAnimation(); mWmService.mH.post(() -> InputMethodManagerInternal.get().onImeParentChanged()); } } Loading
services/core/java/com/android/server/wm/WindowState.java +2 −1 Original line number Diff line number Diff line Loading @@ -2464,7 +2464,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP dc.setImeLayeringTarget(null); dc.computeImeTarget(true /* updateImeTarget */); } if (dc.getImeInputTarget() == this) { if (dc.getImeInputTarget() == this && (mActivityRecord == null || !mActivityRecord.isRelaunching())) { dc.updateImeInputAndControlTarget(null); } Loading