Merge "Allow setImeWindowStatus with null startInputToken"
diff --git a/core/java/android/view/WindowManagerInternal.java b/core/java/android/view/WindowManagerInternal.java
index 7a5e670..a541a4c 100644
--- a/core/java/android/view/WindowManagerInternal.java
+++ b/core/java/android/view/WindowManagerInternal.java
@@ -296,9 +296,12 @@
* 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 e6f6e57..8442c11 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -2033,10 +2033,6 @@
@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 @@
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 ad8fb8c..5653113 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -7864,8 +7864,8 @@
}
@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