From e3844eeb349b9aa9437be6c43b0e1ecc151f6bd1 Mon Sep 17 00:00:00 2001 From: Leon Scroggins Date: Tue, 23 Feb 2010 15:15:16 -0500 Subject: [PATCH] Focus the IME on WebView when no textfield is in focus. This is to fix a particular case where the navigation cache does not recognize that a textfield is now in focus. A message was sent from the WebCore thread telling us to open the IME on the textfield. Open it with the WebView as the served view. Fix for http://b/issue?id=2457459 --- core/java/android/webkit/WebView.java | 34 +++++++++++++++++---------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index adae0cba6c3aa..067241a60286c 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -3351,23 +3351,31 @@ public class WebView extends AbsoluteLayout InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + // bring it back to the default scale so that user can enter text + boolean zoom = mActualScale < mDefaultScale; + if (zoom) { + mInZoomOverview = false; + mZoomCenterX = mLastTouchX; + mZoomCenterY = mLastTouchY; + // do not change text wrap scale so that there is no reflow + setNewZoomScale(mDefaultScale, false, false); + } if (isTextView) { rebuildWebTextView(); - if (!inEditingMode()) return; - imm.showSoftInput(mWebTextView, 0); - // bring it back to the default scale so that user can enter text - if (mActualScale < mDefaultScale) { - mInZoomOverview = false; - mZoomCenterX = mLastTouchX; - mZoomCenterY = mLastTouchY; - // do not change text wrap scale so that there is no reflow - setNewZoomScale(mDefaultScale, false, false); - didUpdateTextViewBounds(true); + if (inEditingMode()) { + imm.showSoftInput(mWebTextView, 0); + if (zoom) { + didUpdateTextViewBounds(true); + } + return; } } - else { // used by plugins - imm.showSoftInput(this, 0); - } + // Used by plugins. + // Also used if the navigation cache is out of date, and + // does not recognize that a textfield is in focus. In that + // case, use WebView as the targeted view. + // see http://b/issue?id=2457459 + imm.showSoftInput(this, 0); } // Called by WebKit to instruct the UI to hide the keyboard