diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 81f9f997c4b78..3e50695abf984 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -14506,6 +14506,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, onDetachedFromWindow(); onDetachedFromWindowInternal(); + InputMethodManager imm = InputMethodManager.peekInstance(); + if (imm != null) { + imm.onViewDetachedFromWindow(this); + } + ListenerInfo li = mListenerInfo; final CopyOnWriteArrayList listeners = li != null ? li.mOnAttachStateChangeListeners : null; diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index f61e372c26b06..5537b3ea97209 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -1320,6 +1320,22 @@ public final class InputMethodManager { } } + /** + * Call this when a view is being detached from a {@link android.view.Window}. + * @hide + */ + public void onViewDetachedFromWindow(View view) { + synchronized (mH) { + if (DEBUG) Log.v(TAG, "onViewDetachedFromWindow: " + view + + " mServedView=" + mServedView + + " hasWindowFocus=" + view.hasWindowFocus()); + if (mServedView == view && view.hasWindowFocus()) { + mNextServedView = null; + scheduleCheckFocusLocked(view); + } + } + } + static void scheduleCheckFocusLocked(View view) { ViewRootImpl viewRootImpl = view.getViewRootImpl(); if (viewRootImpl != null) {