From b9e5fc383d72532ad75e943bfc8fa566496893ca Mon Sep 17 00:00:00 2001 From: Wilson Wu Date: Fri, 17 Sep 2021 00:20:55 +0800 Subject: 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) --- .../com/android/internal/inputmethod/InputMethodDebug.java | 2 ++ .../android/internal/inputmethod/SoftInputShowHideReason.java | 10 +++++++++- .../android/server/inputmethod/InputMethodManagerService.java | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) 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; -- cgit v1.2.3-59-g8ed1b