diff --git a/core/java/android/view/ImeInsetsSourceConsumer.java b/core/java/android/view/ImeInsetsSourceConsumer.java index 1c811cb6e96cf..83abf1a33b2d1 100644 --- a/core/java/android/view/ImeInsetsSourceConsumer.java +++ b/core/java/android/view/ImeInsetsSourceConsumer.java @@ -85,6 +85,7 @@ public final class ImeInsetsSourceConsumer extends InsetsSourceConsumer { @Override public void onWindowFocusLost() { mHasWindowFocus = false; + getImm().unregisterImeConsumer(this); } /** diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index 2cfd6226351e2..6eabb37bb0c84 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -1950,6 +1950,23 @@ public final class InputMethodManager { } } + /** + * Unregister for IME state callbacks and applying visibility in + * {@link android.view.ImeInsetsSourceConsumer}. + * @hide + */ + public void unregisterImeConsumer(@NonNull ImeInsetsSourceConsumer imeInsetsConsumer) { + if (imeInsetsConsumer == null) { + throw new IllegalStateException("ImeInsetsSourceConsumer cannot be null."); + } + + synchronized (mH) { + if (mImeInsetsConsumer == imeInsetsConsumer) { + mImeInsetsConsumer = null; + } + } + } + /** * Call showSoftInput with currently focused view. * @return {@code true} if IME can be shown.