Loading core/java/android/webkit/WebTextView.java +13 −11 Original line number Diff line number Diff line Loading @@ -78,7 +78,9 @@ import java.util.ArrayList; private float mDragStartY; private long mDragStartTime; private boolean mDragSent; private boolean mPageScrolled; // True if the most recent drag event has caused either the TextView to // scroll or the web page to scroll. Gets reset after a touch down. private boolean mScrolled; // Array to store the final character added in onTextChanged, so that its // KeyEvents may be determined. private char[] mCharacter = new char[1]; Loading Loading @@ -384,7 +386,7 @@ import java.util.ArrayList; mDragStartY = event.getY(); mDragStartTime = event.getEventTime(); mDragSent = false; mPageScrolled = false; mScrolled = false; break; case MotionEvent.ACTION_MOVE: Spannable buffer = getText(); Loading @@ -393,8 +395,10 @@ import java.util.ArrayList; super.onTouchEvent(event); if (mScrollX != initialScrollX || mScrollY != initialScrollY) { // TextView scrolled, so return true. // FIXME: Need to make the webkit text scroll to reflect this if (mWebView != null) { mWebView.scrollFocusedTextInput(mScrollX, mScrollY); } mScrolled = true; return true; } if (mWebView != null) { Loading @@ -406,7 +410,7 @@ import java.util.ArrayList; } boolean scrolled = mWebView.textFieldDrag(event); if (scrolled) { mPageScrolled = true; mScrolled = true; cancelLongPress(); return true; } Loading @@ -414,12 +418,10 @@ import java.util.ArrayList; return false; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: if (!mPageScrolled) { // If the page scrolled, we do not want to change the selection, // and the long press has already been canceled, so there is // no need to call into super. // FIXME: Once we enable scrolling the text inside the // textfield, need to check that as well. if (!mScrolled) { // If the page scrolled, or the TextView scrolled, we do not // want to change the selection, and the long press has already // been canceled, so there is no need to call into super. super.onTouchEvent(event); } // Necessary for the WebView to reset its state Loading core/java/android/webkit/WebView.java +24 −2 Original line number Diff line number Diff line Loading @@ -379,6 +379,10 @@ public class WebView extends AbsoluteLayout // take control of touch events unless it says no for touch down event. private boolean mPreventDrag; // To keep track of whether the current drag was initiated by a WebTextView, // so that we know not to hide the cursor boolean mDragFromTextInput; // Whether or not to draw the cursor ring. private boolean mDrawCursorRing = true; Loading Loading @@ -3823,7 +3827,9 @@ public class WebView extends AbsoluteLayout mTouchMode = TOUCH_DRAG_MODE; WebViewCore.pauseUpdate(mWebViewCore); if (!mDragFromTextInput) { nativeHideCursor(); } // remove the zoom anchor if there is any if (mZoomScale != 0) { mWebViewCore Loading Loading @@ -4489,6 +4495,19 @@ public class WebView extends AbsoluteLayout nativeSelectBestAt(rect); } /** * Scroll the focused text field/area to match the WebTextView * @param x New x position of the WebTextView in view coordinates * @param y New y position of the WebTextView in view coordinates */ /*package*/ void scrollFocusedTextInput(int x, int y) { if (!inEditingMode() || mWebViewCore == null) { return; } mWebViewCore.sendMessage(EventHub.SCROLL_TEXT_INPUT, viewToContent(x), viewToContent(y)); } /** * Set our starting point and time for a drag from the WebTextView. */ Loading Loading @@ -4516,9 +4535,12 @@ public class WebView extends AbsoluteLayout if (!inEditingMode()) { return false; } mDragFromTextInput = true; event.offsetLocation((float) (mWebTextView.getLeft() - mScrollX), (float) (mWebTextView.getTop() - mScrollY)); return onTouchEvent(event); boolean result = onTouchEvent(event); mDragFromTextInput = false; return result; } /*package*/ void shortPressOnTextField() { Loading core/java/android/webkit/WebViewCore.java +14 −2 Original line number Diff line number Diff line Loading @@ -591,6 +591,7 @@ final class WebViewCore { } static final String[] HandlerDebugString = { "SCROLL_TEXT_INPUT", // = 99 "LOAD_URL", // = 100; "STOP_LOADING", // = 101; "RELOAD", // = 102; Loading Loading @@ -641,6 +642,7 @@ final class WebViewCore { class EventHub { // Message Ids static final int SCROLL_TEXT_INPUT = 99; static final int LOAD_URL = 100; static final int STOP_LOADING = 101; static final int RELOAD = 102; Loading Loading @@ -745,9 +747,10 @@ final class WebViewCore { @Override public void handleMessage(Message msg) { if (DebugFlags.WEB_VIEW_CORE) { Log.v(LOGTAG, (msg.what < LOAD_URL || msg.what Log.v(LOGTAG, (msg.what < SCROLL_TEXT_INPUT || msg.what > FREE_MEMORY ? Integer.toString(msg.what) : HandlerDebugString[msg.what - LOAD_URL]) : HandlerDebugString[msg.what - SCROLL_TEXT_INPUT]) + " arg1=" + msg.arg1 + " arg2=" + msg.arg2 + " obj=" + msg.obj); } Loading @@ -764,6 +767,10 @@ final class WebViewCore { mNativeClass = 0; break; case SCROLL_TEXT_INPUT: nativeScrollFocusedTextInput(msg.arg1, msg.arg2); break; case LOAD_URL: loadUrl((String) msg.obj); break; Loading Loading @@ -1797,6 +1804,11 @@ final class WebViewCore { WebView.CLEAR_TEXT_ENTRY).sendToTarget(); } /** * Scroll the focused textfield to (x, y) in document space */ private native void nativeScrollFocusedTextInput(int x, int y); // these must be in document space (i.e. not scaled/zoomed). private native void nativeSetScrollOffset(int gen, int dx, int dy); Loading Loading
core/java/android/webkit/WebTextView.java +13 −11 Original line number Diff line number Diff line Loading @@ -78,7 +78,9 @@ import java.util.ArrayList; private float mDragStartY; private long mDragStartTime; private boolean mDragSent; private boolean mPageScrolled; // True if the most recent drag event has caused either the TextView to // scroll or the web page to scroll. Gets reset after a touch down. private boolean mScrolled; // Array to store the final character added in onTextChanged, so that its // KeyEvents may be determined. private char[] mCharacter = new char[1]; Loading Loading @@ -384,7 +386,7 @@ import java.util.ArrayList; mDragStartY = event.getY(); mDragStartTime = event.getEventTime(); mDragSent = false; mPageScrolled = false; mScrolled = false; break; case MotionEvent.ACTION_MOVE: Spannable buffer = getText(); Loading @@ -393,8 +395,10 @@ import java.util.ArrayList; super.onTouchEvent(event); if (mScrollX != initialScrollX || mScrollY != initialScrollY) { // TextView scrolled, so return true. // FIXME: Need to make the webkit text scroll to reflect this if (mWebView != null) { mWebView.scrollFocusedTextInput(mScrollX, mScrollY); } mScrolled = true; return true; } if (mWebView != null) { Loading @@ -406,7 +410,7 @@ import java.util.ArrayList; } boolean scrolled = mWebView.textFieldDrag(event); if (scrolled) { mPageScrolled = true; mScrolled = true; cancelLongPress(); return true; } Loading @@ -414,12 +418,10 @@ import java.util.ArrayList; return false; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: if (!mPageScrolled) { // If the page scrolled, we do not want to change the selection, // and the long press has already been canceled, so there is // no need to call into super. // FIXME: Once we enable scrolling the text inside the // textfield, need to check that as well. if (!mScrolled) { // If the page scrolled, or the TextView scrolled, we do not // want to change the selection, and the long press has already // been canceled, so there is no need to call into super. super.onTouchEvent(event); } // Necessary for the WebView to reset its state Loading
core/java/android/webkit/WebView.java +24 −2 Original line number Diff line number Diff line Loading @@ -379,6 +379,10 @@ public class WebView extends AbsoluteLayout // take control of touch events unless it says no for touch down event. private boolean mPreventDrag; // To keep track of whether the current drag was initiated by a WebTextView, // so that we know not to hide the cursor boolean mDragFromTextInput; // Whether or not to draw the cursor ring. private boolean mDrawCursorRing = true; Loading Loading @@ -3823,7 +3827,9 @@ public class WebView extends AbsoluteLayout mTouchMode = TOUCH_DRAG_MODE; WebViewCore.pauseUpdate(mWebViewCore); if (!mDragFromTextInput) { nativeHideCursor(); } // remove the zoom anchor if there is any if (mZoomScale != 0) { mWebViewCore Loading Loading @@ -4489,6 +4495,19 @@ public class WebView extends AbsoluteLayout nativeSelectBestAt(rect); } /** * Scroll the focused text field/area to match the WebTextView * @param x New x position of the WebTextView in view coordinates * @param y New y position of the WebTextView in view coordinates */ /*package*/ void scrollFocusedTextInput(int x, int y) { if (!inEditingMode() || mWebViewCore == null) { return; } mWebViewCore.sendMessage(EventHub.SCROLL_TEXT_INPUT, viewToContent(x), viewToContent(y)); } /** * Set our starting point and time for a drag from the WebTextView. */ Loading Loading @@ -4516,9 +4535,12 @@ public class WebView extends AbsoluteLayout if (!inEditingMode()) { return false; } mDragFromTextInput = true; event.offsetLocation((float) (mWebTextView.getLeft() - mScrollX), (float) (mWebTextView.getTop() - mScrollY)); return onTouchEvent(event); boolean result = onTouchEvent(event); mDragFromTextInput = false; return result; } /*package*/ void shortPressOnTextField() { Loading
core/java/android/webkit/WebViewCore.java +14 −2 Original line number Diff line number Diff line Loading @@ -591,6 +591,7 @@ final class WebViewCore { } static final String[] HandlerDebugString = { "SCROLL_TEXT_INPUT", // = 99 "LOAD_URL", // = 100; "STOP_LOADING", // = 101; "RELOAD", // = 102; Loading Loading @@ -641,6 +642,7 @@ final class WebViewCore { class EventHub { // Message Ids static final int SCROLL_TEXT_INPUT = 99; static final int LOAD_URL = 100; static final int STOP_LOADING = 101; static final int RELOAD = 102; Loading Loading @@ -745,9 +747,10 @@ final class WebViewCore { @Override public void handleMessage(Message msg) { if (DebugFlags.WEB_VIEW_CORE) { Log.v(LOGTAG, (msg.what < LOAD_URL || msg.what Log.v(LOGTAG, (msg.what < SCROLL_TEXT_INPUT || msg.what > FREE_MEMORY ? Integer.toString(msg.what) : HandlerDebugString[msg.what - LOAD_URL]) : HandlerDebugString[msg.what - SCROLL_TEXT_INPUT]) + " arg1=" + msg.arg1 + " arg2=" + msg.arg2 + " obj=" + msg.obj); } Loading @@ -764,6 +767,10 @@ final class WebViewCore { mNativeClass = 0; break; case SCROLL_TEXT_INPUT: nativeScrollFocusedTextInput(msg.arg1, msg.arg2); break; case LOAD_URL: loadUrl((String) msg.obj); break; Loading Loading @@ -1797,6 +1804,11 @@ final class WebViewCore { WebView.CLEAR_TEXT_ENTRY).sendToTarget(); } /** * Scroll the focused textfield to (x, y) in document space */ private native void nativeScrollFocusedTextInput(int x, int y); // these must be in document space (i.e. not scaled/zoomed). private native void nativeSetScrollOffset(int gen, int dx, int dy); Loading