From f23c3bfe7afc66869fd0487e3604ffbc24e0c09b Mon Sep 17 00:00:00 2001 From: Felix Stern Date: Tue, 3 Dec 2024 14:53:26 +0000 Subject: Passing Ime statsToken from InputMethodManager to InsetsController Calls from InputMethodManager are in general redirected to InsetsController. In case of InputMethodManager#hideSoftInputFromWindow and InputMethodManager.DelegateImpl#onWindowLostFocus, we didn't pass the statsToken. Thus, the request was only tracked from InsetsController. To have the right origin, we pass the statsToken now. Test: None, logs only Fix: 382006185 Flag: android.view.inputmethod.refactor_insets_controller Change-Id: I4197726ae3f4918d7fb52e2757721ddf5d2d105d --- core/java/android/view/inputmethod/InputMethodManager.java | 7 ++++++- .../com/android/internal/inputmethod/SoftInputShowHideReason.java | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index 5dd29b26730d..6d89f3d89077 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -946,11 +946,16 @@ public final class InputMethodManager { if (state == WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN) { // when losing focus (e.g., by going to another window), we reset the // requestedVisibleTypes of WindowInsetsController by hiding the IME + final var statsToken = ImeTracker.forLogging().onStart( + ImeTracker.TYPE_HIDE, ImeTracker.ORIGIN_CLIENT, + SoftInputShowHideReason.REASON_HIDE_WINDOW_LOST_FOCUS, + false /* fromUser */); if (DEBUG) { Log.d(TAG, "onWindowLostFocus, hiding IME because " + "of STATE_ALWAYS_HIDDEN"); } - mCurRootView.getInsetsController().hide(WindowInsets.Type.ime()); + mCurRootView.getInsetsController().hide(WindowInsets.Type.ime(), + false /* fromIme */, statsToken); } } diff --git a/core/java/com/android/internal/inputmethod/SoftInputShowHideReason.java b/core/java/com/android/internal/inputmethod/SoftInputShowHideReason.java index 429a6a267bb1..592ea9e5e600 100644 --- a/core/java/com/android/internal/inputmethod/SoftInputShowHideReason.java +++ b/core/java/com/android/internal/inputmethod/SoftInputShowHideReason.java @@ -91,6 +91,7 @@ import java.lang.annotation.Retention; SoftInputShowHideReason.CONTROL_WINDOW_INSETS_ANIMATION, SoftInputShowHideReason.SHOW_INPUT_TARGET_CHANGED, SoftInputShowHideReason.HIDE_INPUT_TARGET_CHANGED, + SoftInputShowHideReason.REASON_HIDE_WINDOW_LOST_FOCUS, }) public @interface SoftInputShowHideReason { /** Default, undefined reason. */ @@ -418,4 +419,7 @@ public @interface SoftInputShowHideReason { * {@link android.view.InsetsController#controlWindowInsetsAnimation}. */ int CONTROL_WINDOW_INSETS_ANIMATION = ImeProtoEnums.REASON_CONTROL_WINDOW_INSETS_ANIMATION; + + /** Hide soft input when the window lost focus. */ + int REASON_HIDE_WINDOW_LOST_FOCUS = ImeProtoEnums.REASON_HIDE_WINDOW_LOST_FOCUS; } -- cgit v1.2.3-59-g8ed1b