summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Wilson Wu <wilsonwu@google.com> 2021-09-17 00:20:55 +0800
committer Wilson Wu <wilsonwu@google.com> 2021-10-19 08:05:42 +0000
commitb9e5fc383d72532ad75e943bfc8fa566496893ca (patch)
tree53ab359536a8473136bcb50cdc4e52b1f238c664
parent5b73d12920cee715209f62dfc72f76ba3b29cd48 (diff)
Hide SoftInput when INVALID_DISPLAY
We only prevent to show soft input in IMMS#startInputUncheckedLocked when DISPLAY_IME_POLICY_HIDE is set. If a display with DISPLAY_IME_POLICY_HIDE, we should hide the soft input anyway. Bug: 199991634 Test: atest CtsInputMethodTestCases Test: Verify as following steps: 1) adb shell wm size 800x1280 2) adb shell wm density 213 3) atest MultiDisplaySystemDecorationTests#\ testDisplayPolicyImeHideImeNoSystemDecorations Merged-In: I3ab03667c28ec5beb6c3332aceaae4a63cd7309a Change-Id: I3ab03667c28ec5beb6c3332aceaae4a63cd7309a (cherry picked from commit d41ac0605c4cfe9142cc340b8c081aa9a5ffe34d)
-rw-r--r--core/java/com/android/internal/inputmethod/InputMethodDebug.java2
-rw-r--r--core/java/com/android/internal/inputmethod/SoftInputShowHideReason.java10
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerService.java2
3 files changed, 13 insertions, 1 deletions
diff --git a/core/java/com/android/internal/inputmethod/InputMethodDebug.java b/core/java/com/android/internal/inputmethod/InputMethodDebug.java
index a00b993749a5..bf094dbd8f1e 100644
--- a/core/java/com/android/internal/inputmethod/InputMethodDebug.java
+++ b/core/java/com/android/internal/inputmethod/InputMethodDebug.java
@@ -236,6 +236,8 @@ public final class InputMethodDebug {
return "HIDE_TOGGLE_SOFT_INPUT";
case SoftInputShowHideReason.SHOW_SOFT_INPUT_BY_INSETS_API:
return "SHOW_SOFT_INPUT_BY_INSETS_API";
+ case SoftInputShowHideReason.HIDE_DISPLAY_IME_POLICY_HIDE:
+ return "HIDE_DISPLAY_IME_POLICY_HIDE";
default:
return "Unknown=" + reason;
}
diff --git a/core/java/com/android/internal/inputmethod/SoftInputShowHideReason.java b/core/java/com/android/internal/inputmethod/SoftInputShowHideReason.java
index e3713a3b8971..9e5776292031 100644
--- a/core/java/com/android/internal/inputmethod/SoftInputShowHideReason.java
+++ b/core/java/com/android/internal/inputmethod/SoftInputShowHideReason.java
@@ -19,6 +19,7 @@ package com.android.internal.inputmethod;
import static java.lang.annotation.RetentionPolicy.SOURCE;
import android.annotation.IntDef;
+import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import java.lang.annotation.Retention;
@@ -53,7 +54,8 @@ import java.lang.annotation.Retention;
SoftInputShowHideReason.SHOW_RESTORE_IME_VISIBILITY,
SoftInputShowHideReason.SHOW_TOGGLE_SOFT_INPUT,
SoftInputShowHideReason.HIDE_TOGGLE_SOFT_INPUT,
- SoftInputShowHideReason.SHOW_SOFT_INPUT_BY_INSETS_API})
+ SoftInputShowHideReason.SHOW_SOFT_INPUT_BY_INSETS_API,
+ SoftInputShowHideReason.HIDE_DISPLAY_IME_POLICY_HIDE})
public @interface SoftInputShowHideReason {
/** Show soft input by {@link android.view.inputmethod.InputMethodManager#showSoftInput}. */
int SHOW_SOFT_INPUT = 0;
@@ -195,4 +197,10 @@ public @interface SoftInputShowHideReason {
* {@link android.view.InsetsController#show(int)};
*/
int SHOW_SOFT_INPUT_BY_INSETS_API = 25;
+
+ /**
+ * Hide soft input if Ime policy has been set to {@link WindowManager#DISPLAY_IME_POLICY_HIDE}.
+ * See also {@code InputMethodManagerService#mImeHiddenByDisplayPolicy}.
+ */
+ int HIDE_DISPLAY_IME_POLICY_HIDE = 26;
}
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 0e82c2a42f3f..9d6678053533 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -2356,6 +2356,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
if (displayIdToShowIme == INVALID_DISPLAY) {
mImeHiddenByDisplayPolicy = true;
+ hideCurrentInputLocked(mCurFocusedWindow, 0, null,
+ SoftInputShowHideReason.HIDE_DISPLAY_IME_POLICY_HIDE);
return InputBindResult.NO_IME;
}
mImeHiddenByDisplayPolicy = false;