From 4478de3c02c1fb2f4f888e696ee1b13721e936d9 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Fri, 27 Apr 2012 15:41:24 -0700 Subject: [PATCH] Clear IMM references when window dismissed. Match behavior of removeViewLocked(), where InputMethodManager clears any strong references to Views, and also clear mCurRootView. Without this, IMM can leak a DecorView instance after the user has left the application. Bug: 6413553 Change-Id: Iad09cf5dbb7f6f156fd39ed243431432e00f8945 --- core/java/android/view/WindowManagerImpl.java | 8 ++++++++ .../java/android/view/inputmethod/InputMethodManager.java | 1 + 2 files changed, 9 insertions(+) diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java index a0f104103b712..6442406fff401 100644 --- a/core/java/android/view/WindowManagerImpl.java +++ b/core/java/android/view/WindowManagerImpl.java @@ -340,6 +340,14 @@ public class WindowManagerImpl implements WindowManager { View curView = root.getView(); root.mAddNesting = 0; + + if (view != null) { + InputMethodManager imm = InputMethodManager.getInstance(view.getContext()); + if (imm != null) { + imm.windowDismissed(mViews[index].getWindowToken()); + } + } + root.die(true); finishRemoveViewLocked(curView, index); if (curView == view) { diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index 067be39db6e07..1803352ecaf4a 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -672,6 +672,7 @@ public final class InputMethodManager { * Disconnect any existing input connection, clearing the served view. */ void finishInputLocked() { + mCurRootView = null; mNextServedView = null; if (mServedView != null) { if (DEBUG) Log.v(TAG, "FINISH INPUT: " + mServedView);