From 2a30744cd73233646173d05ebdb28f7829ec7a52 Mon Sep 17 00:00:00 2001 From: Leon Scroggins Date: Fri, 15 Oct 2010 14:35:21 -0400 Subject: Line up textfield with WebTextView more often. Bug:3097705 Line up when the selection changes (such as when the selection is altered by the context menu) or when the WebTextView scrolls. Change-Id: Ia491064548131be1ac6f4d701a43cd8419a25367 --- core/java/android/webkit/WebTextView.java | 33 +++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'core/java/android/webkit/WebTextView.java') diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java index e82ed9fa34a4..f7afdb96691c 100644 --- a/core/java/android/webkit/WebTextView.java +++ b/core/java/android/webkit/WebTextView.java @@ -288,6 +288,21 @@ import java.util.ArrayList; return ptr == mNodePointer; } + /** + * Ensure that the underlying textfield is lined up with the WebTextView. + */ + private void lineUpScroll() { + if (mWebView != null) { + float maxScrollX = Touch.getMaxScrollX(this, getLayout(), mScrollY); + if (DebugFlags.WEB_TEXT_VIEW) { + Log.v(LOGTAG, "onTouchEvent x=" + mScrollX + " y=" + + mScrollY + " maxX=" + maxScrollX); + } + mWebView.scrollFocusedTextInput(maxScrollX > 0 ? + mScrollX / maxScrollX : 0, mScrollY); + } + } + @Override public InputConnection onCreateInputConnection( EditorInfo outAttrs) { InputConnection connection = super.onCreateInputConnection(outAttrs); @@ -358,6 +373,12 @@ import java.util.ArrayList; mFromFocusChange = false; } + @Override + protected void onScrollChanged(int l, int t, int oldl, int oldt) { + super.onScrollChanged(l, t, oldl, oldt); + lineUpScroll(); + } + @Override protected void onSelectionChanged(int selStart, int selEnd) { if (mInSetTextAndKeepSelection) return; @@ -378,6 +399,7 @@ import java.util.ArrayList; + " selEnd=" + selEnd); } mWebView.setSelection(selStart, selEnd); + lineUpScroll(); } } @@ -481,16 +503,7 @@ import java.util.ArrayList; // to big for the case of a small textfield. int smallerSlop = slop/2; if (dx > smallerSlop || dy > smallerSlop) { - if (mWebView != null) { - float maxScrollX = (float) Touch.getMaxScrollX(this, - getLayout(), mScrollY); - if (DebugFlags.WEB_TEXT_VIEW) { - Log.v(LOGTAG, "onTouchEvent x=" + mScrollX + " y=" - + mScrollY + " maxX=" + maxScrollX); - } - mWebView.scrollFocusedTextInput(maxScrollX > 0 ? - mScrollX / maxScrollX : 0, mScrollY); - } + // Scrolling is handled in onScrollChanged. mScrolled = true; cancelLongPress(); return true; -- cgit v1.2.3