diff options
3 files changed, 10 insertions, 13 deletions
diff --git a/core/java/android/view/WindowManagerInternal.java b/core/java/android/view/WindowManagerInternal.java index 7a5e670c02bd..a541a4cd3b1e 100644 --- a/core/java/android/view/WindowManagerInternal.java +++ b/core/java/android/view/WindowManagerInternal.java @@ -296,9 +296,12 @@ public abstract class WindowManagerInternal { * to corresponding API calls. Note that this state is not guaranteed * to be synchronized with state in WindowManagerService. * @param targetWindowToken token to identify the target window that the IME is associated with. + * {@code null} when application, system, or the IME itself decided to + * change its window visibility before being associated with any target + * window. */ - public abstract void updateInputMethodWindowStatus(IBinder imeToken, boolean imeWindowVisible, - IBinder targetWindowToken); + public abstract void updateInputMethodWindowStatus(@NonNull IBinder imeToken, + boolean imeWindowVisible, @Nullable IBinder targetWindowToken); /** * Returns true when the hardware keyboard is available. diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java index e6f6e5764d95..8442c111edd4 100644 --- a/services/core/java/com/android/server/InputMethodManagerService.java +++ b/services/core/java/com/android/server/InputMethodManagerService.java @@ -2033,10 +2033,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub @Override public void setImeWindowStatus(IBinder token, IBinder startInputToken, int vis, int backDisposition) { - if (startInputToken == null) { - throw new InvalidParameterException("startInputToken cannot be null"); - } - if (!calledWithValidToken(token)) { return; } @@ -2044,15 +2040,13 @@ public class InputMethodManagerService extends IInputMethodManager.Stub final StartInputInfo info; synchronized (mMethodMap) { info = mStartInputMap.get(startInputToken); - if (info == null) { - throw new InvalidParameterException("Unknown startInputToken=" + startInputToken); - } mImeWindowVis = vis; mBackDisposition = backDisposition; updateSystemUiLocked(token, vis, backDisposition); } - mWindowManagerInternal.updateInputMethodWindowStatus(info.mImeToken, - (vis & InputMethodService.IME_VISIBLE) != 0, info.mTargetWindow); + mWindowManagerInternal.updateInputMethodWindowStatus(token, + (vis & InputMethodService.IME_VISIBLE) != 0, + token != null ? info.mTargetWindow : null); } private void updateSystemUi(IBinder token, int vis, int backDisposition) { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index a53102f0abbf..78568fc8eea9 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -7914,8 +7914,8 @@ public class WindowManagerService extends IWindowManager.Stub } @Override - public void updateInputMethodWindowStatus(IBinder imeToken, boolean imeWindowVisible, - IBinder targetWindowToken) { + public void updateInputMethodWindowStatus(@NonNull IBinder imeToken, + boolean imeWindowVisible, @Nullable IBinder targetWindowToken) { // TODO (b/34628091): Use this method to address the window animation issue. if (DEBUG_INPUT_METHOD) { Slog.w(TAG_WM, "updateInputMethodWindowStatus: imeToken=" + imeToken |