OSDN Git Service

For Textareas, do not use UI side layers.
authorLeon Scroggins <scroggo@google.com>
Mon, 31 Jan 2011 15:54:19 +0000 (10:54 -0500)
committerLeon Scroggins <scroggo@google.com>
Mon, 31 Jan 2011 16:05:53 +0000 (11:05 -0500)
Bug:3402831
Bug:3401242

Requires a change in external/webkit.

Change-Id: I391d9133b3953d213520cbba5ed49b11ebeaef2d

core/java/android/webkit/WebView.java
core/java/android/webkit/WebViewCore.java

index a9abb65..fcfcc03 100644 (file)
@@ -6625,15 +6625,10 @@ public class WebView extends AbsoluteLayout
      * @param y New y position of the WebTextView in view coordinates
      */
     /* package */ void scrollFocusedTextInputY(int y) {
-        if (!inEditingMode()) {
+        if (!inEditingMode() || mWebViewCore == null) {
             return;
         }
-        int xPos = viewToContentX((mWebTextView.getLeft() + mWebTextView.getRight()) / 2);
-        int yPos = viewToContentY((mWebTextView.getTop() + mWebTextView.getBottom()) / 2);
-        int layer = nativeScrollableLayer(xPos, yPos, null, null);
-        if (layer != 0) {
-            nativeScrollLayer(layer, 0, viewToContentDimension(y));
-        }
+        mWebViewCore.sendMessage(EventHub.SCROLL_TEXT_INPUT, 0, viewToContentDimension(y));
     }
 
     /**
@@ -7980,18 +7975,15 @@ public class WebView extends AbsoluteLayout
      * @param node Pointer to the node touched.
      * @param x x-position of the touch.
      * @param y y-position of the touch.
-     * @param scrollY Only used when touching on a textarea.  Otherwise, use -1.
-     *      Tells how much the textarea is scrolled.
      */
     private void sendMotionUp(int touchGeneration,
-            int frame, int node, int x, int y, int scrollY) {
+            int frame, int node, int x, int y) {
         WebViewCore.TouchUpData touchUpData = new WebViewCore.TouchUpData();
         touchUpData.mMoveGeneration = touchGeneration;
         touchUpData.mFrame = frame;
         touchUpData.mNode = node;
         touchUpData.mX = x;
         touchUpData.mY = y;
-        touchUpData.mScrollY = scrollY;
         mWebViewCore.sendMessage(EventHub.TOUCH_UP, touchUpData);
     }
 
index 3bde000..b949a41 100644 (file)
@@ -559,7 +559,7 @@ final class WebViewCore {
     private native String nativeRetrieveImageSource(int x, int y);
 
     private native void nativeTouchUp(int touchGeneration,
-            int framePtr, int nodePtr, int x, int y, int scrollY);
+            int framePtr, int nodePtr, int x, int y);
 
     private native boolean nativeHandleTouchEvent(int action, int[] idArray,
             int[] xArray, int[] yArray, int count, int metaState);
@@ -777,8 +777,6 @@ final class WebViewCore {
         int mNode;
         int mX;
         int mY;
-        // Used in the case of a scrolled textarea
-        int mScrollY;
     }
 
     static class TouchHighlightData {
@@ -1086,8 +1084,13 @@ final class WebViewCore {
                             break;
 
                         case SCROLL_TEXT_INPUT:
-                            nativeScrollFocusedTextInput(
-                                    ((Float) msg.obj).floatValue(), msg.arg1);
+                            float xPercent;
+                            if (msg.obj == null) {
+                                xPercent = 0f;
+                            } else {
+                                xPercent = ((Float) msg.obj).floatValue();
+                            }
+                            nativeScrollFocusedTextInput(xPercent, msg.arg2);
                             break;
 
                         case LOAD_URL: {
@@ -1307,8 +1310,7 @@ final class WebViewCore {
                             TouchUpData touchUpData = (TouchUpData) msg.obj;
                             nativeTouchUp(touchUpData.mMoveGeneration,
                                     touchUpData.mFrame, touchUpData.mNode,
-                                    touchUpData.mX, touchUpData.mY,
-                                    touchUpData.mScrollY);
+                                    touchUpData.mX, touchUpData.mY);
                             break;
 
                         case TOUCH_EVENT: {