From e25ee1ed98621babc0807c2f2813d03c3b10761e Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Mon, 26 Apr 2021 21:25:31 -0700 Subject: [PATCH] Check IME visibility check before calling IMM.hide() Bug: 183062683 Bug: 185558351 Test: manual Change-Id: Ib3bee0f895cc03c6faeb662d078d013ac4d6e406 --- src/com/android/launcher3/ExtendedEditText.java | 2 +- .../android/launcher3/util/UiThreadHelper.java | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/ExtendedEditText.java b/src/com/android/launcher3/ExtendedEditText.java index c79dabe8cf..4312939321 100644 --- a/src/com/android/launcher3/ExtendedEditText.java +++ b/src/com/android/launcher3/ExtendedEditText.java @@ -99,7 +99,7 @@ public class ExtendedEditText extends EditText { } public void hideKeyboard() { - UiThreadHelper.hideKeyboardAsync(getContext(), getWindowToken()); + UiThreadHelper.hideKeyboardAsync(Launcher.getLauncher(getContext()), getWindowToken()); } private boolean showSoftInput() { diff --git a/src/com/android/launcher3/util/UiThreadHelper.java b/src/com/android/launcher3/util/UiThreadHelper.java index 0498052575..be14e01f0d 100644 --- a/src/com/android/launcher3/util/UiThreadHelper.java +++ b/src/com/android/launcher3/util/UiThreadHelper.java @@ -17,13 +17,18 @@ package com.android.launcher3.util; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; +import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.os.Handler; import android.os.IBinder; import android.os.Message; +import android.view.WindowInsets; import android.view.inputmethod.InputMethodManager; +import com.android.launcher3.Launcher; +import com.android.launcher3.Utilities; + /** * Utility class for offloading some class from UI thread */ @@ -37,8 +42,16 @@ public class UiThreadHelper { private static final int MSG_SET_ORIENTATION = 2; private static final int MSG_RUN_COMMAND = 3; - public static void hideKeyboardAsync(Context context, IBinder token) { - Message.obtain(HANDLER.get(context), MSG_HIDE_KEYBOARD, token).sendToTarget(); + @SuppressLint("NewApi") + public static void hideKeyboardAsync(Launcher launcher, IBinder token) { + if (Utilities.ATLEAST_R) { + WindowInsets rootInsets = launcher.getRootView().getRootWindowInsets(); + boolean isImeShown = rootInsets != null && rootInsets.isVisible( + WindowInsets.Type.ime()); + if (!isImeShown) return; + } + + Message.obtain(HANDLER.get(launcher), MSG_HIDE_KEYBOARD, token).sendToTarget(); } public static void setOrientationAsync(Activity activity, int orientation) {