diff options
| author | Justin Ho <justinho@google.com> | 2012-02-16 09:23:01 -0800 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-02-16 09:23:01 -0800 |
| commit | c470b2dd49ae2c4894de22f7bdd9f91af1a085f8 (patch) | |
| tree | 4f3de87dc1408a6b2ff834176d97772baf87d619 /core/java | |
| parent | 2a1d19174e32bb6056086ec603948cd476a2ea67 (diff) | |
| parent | a82ba54b0bbc3ff41f29db3998806cb45b261d58 (diff) | |
Merge "Part of fixing issue #6006757: Keyboard dismissal lags" into ics-mr1
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/view/inputmethod/InputMethodManager.java | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index b41e6f5e7907..4e8542570615 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -355,8 +355,10 @@ public final class InputMethodManager { if (mServedView != null && mServedView.isFocused()) { mServedConnecting = true; } + if (mActive) { + startInputInner(); + } } - startInputInner(); } return; } @@ -1127,20 +1129,26 @@ public final class InputMethodManager { * @hide */ public void checkFocus() { + if (checkFocusNoStartInput()) { + startInputInner(); + } + } + + private boolean checkFocusNoStartInput() { // This is called a lot, so short-circuit before locking. if (mServedView == mNextServedView && !mNextServedNeedsStart) { - return; + return false; } InputConnection ic = null; synchronized (mH) { if (mServedView == mNextServedView && !mNextServedNeedsStart) { - return; + return false; } if (DEBUG) Log.v(TAG, "checkFocus: view=" + mServedView + " next=" + mNextServedView + " restart=" + mNextServedNeedsStart); - + mNextServedNeedsStart = false; if (mNextServedView == null) { finishInputLocked(); @@ -1148,22 +1156,22 @@ public final class InputMethodManager { // but no longer do. We should make sure the input method is // no longer shown, since it serves no purpose. closeCurrentInput(); - return; + return false; } - + ic = mServedInputConnection; - + mServedView = mNextServedView; mCurrentTextBoxAttribute = null; mCompletions = null; mServedConnecting = true; } - + if (ic != null) { ic.finishComposingText(); } - - startInputInner(); + + return true; } void closeCurrentInput() { @@ -1192,7 +1200,7 @@ public final class InputMethodManager { focusInLocked(focusedView != null ? focusedView : rootView); } - checkFocus(); + boolean startInput = checkFocusNoStartInput(); synchronized (mH) { try { @@ -1201,6 +1209,9 @@ public final class InputMethodManager { mService.windowGainedFocus(mClient, rootView.getWindowToken(), focusedView != null, isTextEditor, softInputMode, first, windowFlags); + if (startInput) { + startInputInner(); + } } catch (RemoteException e) { } } |
