diff options
| -rw-r--r-- | core/java/android/webkit/WebSettings.java | 15 | ||||
| -rw-r--r-- | core/java/android/webkit/WebView.java | 57 | ||||
| -rw-r--r-- | core/java/android/webkit/WebViewCore.java | 25 |
3 files changed, 47 insertions, 50 deletions
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java index 08d94e2d1d70..b4c38dbedeb4 100644 --- a/core/java/android/webkit/WebSettings.java +++ b/core/java/android/webkit/WebSettings.java @@ -535,21 +535,6 @@ public class WebSettings { } /** - * If WebView only supports touch, a different navigation model will be - * applied. Otherwise, the navigation to support both touch and keyboard - * will be used. - * @hide - public void setSupportTouchOnly(boolean touchOnly) { - mSupportTounchOnly = touchOnly; - } - */ - - boolean supportTouchOnly() { - // for debug only, use mLightTouchEnabled for mSupportTounchOnly - return mLightTouchEnabled; - } - - /** * Set whether the WebView supports zoom */ public void setSupportZoom(boolean support) { diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 15b47e3ab800..168baad7c9fb 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -92,6 +92,7 @@ import android.webkit.WebViewCore.DrawData; import android.webkit.WebViewCore.EventHub; import android.webkit.WebViewCore.TouchEventData; import android.webkit.WebViewCore.TouchHighlightData; +import android.webkit.WebViewCore.WebKitHitTest; import android.widget.AbsoluteLayout; import android.widget.Adapter; import android.widget.AdapterView; @@ -699,7 +700,7 @@ public class WebView extends AbsoluteLayout private Drawable mSelectHandleLeft; private Drawable mSelectHandleRight; - static final boolean USE_WEBKIT_RINGS = false; + static boolean sDisableNavcache = false; // the color used to highlight the touch rectangles private static final int HIGHLIGHT_COLOR = 0x6633b5e5; // the round corner for the highlight path @@ -775,7 +776,7 @@ public class WebView extends AbsoluteLayout static final int REQUEST_KEYBOARD_WITH_SELECTION_MSG_ID = 128; static final int SET_SCROLLBAR_MODES = 129; static final int SELECTION_STRING_CHANGED = 130; - static final int SET_TOUCH_HIGHLIGHT_RECTS = 131; + static final int HIT_TEST_RESULT = 131; static final int SAVE_WEBARCHIVE_FINISHED = 132; static final int SET_AUTOFILLABLE = 133; @@ -788,7 +789,7 @@ public class WebView extends AbsoluteLayout static final int UPDATE_ZOOM_DENSITY = 139; private static final int FIRST_PACKAGE_MSG_ID = SCROLL_TO_MSG_ID; - private static final int LAST_PACKAGE_MSG_ID = SET_TOUCH_HIGHLIGHT_RECTS; + private static final int LAST_PACKAGE_MSG_ID = HIT_TEST_RESULT; static final String[] HandlerPrivateDebugString = { "REMEMBER_PASSWORD", // = 1; @@ -1311,6 +1312,7 @@ public class WebView extends AbsoluteLayout private void init() { OnTrimMemoryListener.init(getContext()); + sDisableNavcache = nativeDisableNavcache(); setWillNotDraw(false); setFocusable(true); @@ -2618,8 +2620,8 @@ public class WebView extends AbsoluteLayout } private HitTestResult hitTestResult(HitTestResult fallback) { - if (mNativeClass == 0) { - return null; + if (mNativeClass == 0 || sDisableNavcache) { + return fallback; } HitTestResult result = new HitTestResult(); @@ -4376,7 +4378,7 @@ public class WebView extends AbsoluteLayout || mTouchMode == TOUCH_SHORTPRESS_MODE || mTouchMode == TOUCH_DONE_MODE); boolean drawNativeRings = !drawJavaRings; - if (USE_WEBKIT_RINGS) { + if (sDisableNavcache) { drawNativeRings = !drawJavaRings && !isInTouchMode(); } drawContent(canvas, drawNativeRings); @@ -4431,8 +4433,8 @@ public class WebView extends AbsoluteLayout } private void removeTouchHighlight() { - mWebViewCore.removeMessages(EventHub.GET_TOUCH_HIGHLIGHT_RECTS); - mPrivateHandler.removeMessages(SET_TOUCH_HIGHLIGHT_RECTS); + mWebViewCore.removeMessages(EventHub.HIT_TEST); + mPrivateHandler.removeMessages(HIT_TEST_RESULT); setTouchHighlightRects(null); } @@ -6198,7 +6200,7 @@ public class WebView extends AbsoluteLayout nativeSetIsScrolling(false); } else if (mPrivateHandler.hasMessages(RELEASE_SINGLE_TAP)) { mPrivateHandler.removeMessages(RELEASE_SINGLE_TAP); - if (USE_WEBKIT_RINGS || getSettings().supportTouchOnly()) { + if (sDisableNavcache) { removeTouchHighlight(); } if (deltaX * deltaX + deltaY * deltaY < mDoubleTapSlopSquare) { @@ -6222,7 +6224,7 @@ public class WebView extends AbsoluteLayout mWebViewCore.sendMessage( EventHub.UPDATE_FRAME_CACHE_IF_LOADING); } - if (USE_WEBKIT_RINGS || getSettings().supportTouchOnly()) { + if (sDisableNavcache) { TouchHighlightData data = new TouchHighlightData(); data.mX = contentX; data.mY = contentY; @@ -6234,7 +6236,7 @@ public class WebView extends AbsoluteLayout if (!mBlockWebkitViewMessages) { mTouchHighlightRequested = System.currentTimeMillis(); mWebViewCore.sendMessageAtFrontOfQueue( - EventHub.GET_TOUCH_HIGHLIGHT_RECTS, data); + EventHub.HIT_TEST, data); } if (DEBUG_TOUCH_HIGHLIGHT) { if (getSettings().getNavDump()) { @@ -6322,7 +6324,7 @@ public class WebView extends AbsoluteLayout if (mTouchMode == TOUCH_DOUBLE_TAP_MODE) { mTouchMode = TOUCH_INIT_MODE; } - if (USE_WEBKIT_RINGS || getSettings().supportTouchOnly()) { + if (sDisableNavcache) { removeTouchHighlight(); } } @@ -6924,7 +6926,7 @@ public class WebView extends AbsoluteLayout mPrivateHandler.removeMessages(SWITCH_TO_LONGPRESS); mPrivateHandler.removeMessages(DRAG_HELD_MOTIONLESS); mPrivateHandler.removeMessages(AWAKEN_SCROLL_BARS); - if (USE_WEBKIT_RINGS || getSettings().supportTouchOnly()) { + if (sDisableNavcache) { removeTouchHighlight(); } mHeldMotionless = MOTIONLESS_TRUE; @@ -7481,7 +7483,7 @@ public class WebView extends AbsoluteLayout * and calls showCursorTimed on the native side */ private void updateSelection() { - if (mNativeClass == 0) { + if (mNativeClass == 0 || sDisableNavcache) { return; } mPrivateHandler.removeMessages(UPDATE_SELECTION); @@ -7589,7 +7591,7 @@ public class WebView extends AbsoluteLayout int contentX = viewToContentX(mLastTouchX + mScrollX); int contentY = viewToContentY(mLastTouchY + mScrollY); int slop = viewToContentDimension(mNavSlop); - if (USE_WEBKIT_RINGS && !mTouchHighlightRegion.isEmpty()) { + if (sDisableNavcache && !mTouchHighlightRegion.isEmpty()) { // set mTouchHighlightRequested to 0 to cause an immediate // drawing of the touch rings mTouchHighlightRequested = 0; @@ -7601,8 +7603,7 @@ public class WebView extends AbsoluteLayout } }, ViewConfiguration.getPressedStateDuration()); } - if (getSettings().supportTouchOnly()) { - removeTouchHighlight(); + if (sDisableNavcache) { WebViewCore.TouchUpData touchUpData = new WebViewCore.TouchUpData(); // use "0" as generation id to inform WebKit to use the same x/y as // it used when processing GET_TOUCH_HIGHLIGHT_RECTS @@ -8487,9 +8488,8 @@ public class WebView extends AbsoluteLayout break; } case SWITCH_TO_SHORTPRESS: { - mInitialHitTestResult = null; // set by updateSelection() if (mTouchMode == TOUCH_INIT_MODE) { - if (!getSettings().supportTouchOnly() + if (!sDisableNavcache && mPreventDefault != PREVENT_DEFAULT_YES) { mTouchMode = TOUCH_SHORTPRESS_START_MODE; updateSelection(); @@ -8504,7 +8504,7 @@ public class WebView extends AbsoluteLayout break; } case SWITCH_TO_LONGPRESS: { - if (USE_WEBKIT_RINGS || getSettings().supportTouchOnly()) { + if (sDisableNavcache) { removeTouchHighlight(); } if (inFullScreenMode() || mDeferTouchProcess) { @@ -8835,10 +8835,16 @@ public class WebView extends AbsoluteLayout } break; - case SET_TOUCH_HIGHLIGHT_RECTS: - @SuppressWarnings("unchecked") - ArrayList<Rect> rects = (ArrayList<Rect>) msg.obj; - setTouchHighlightRects(rects); + case HIT_TEST_RESULT: + WebKitHitTest hit = (WebKitHitTest) msg.obj; + setTouchHighlightRects(hit != null ? hit.mTouchRects : null); + if (hit == null) { + mInitialHitTestResult = null; + } else { + mInitialHitTestResult = new HitTestResult(); + mInitialHitTestResult.mType = hit.mType; + mInitialHitTestResult.mExtra = hit.mExtra; + } break; case SAVE_WEBARCHIVE_FINISHED: @@ -8875,7 +8881,7 @@ public class WebView extends AbsoluteLayout } } - private void setTouchHighlightRects(ArrayList<Rect> rects) { + private void setTouchHighlightRects(Rect[] rects) { invalidate(mTouchHighlightRegion.getBounds()); mTouchHighlightRegion.setEmpty(); if (rects != null) { @@ -9793,4 +9799,5 @@ public class WebView extends AbsoluteLayout */ private static native void nativeOnTrimMemory(int level); private static native void nativeSetPauseDrawing(int instance, boolean pause); + private static native boolean nativeDisableNavcache(); } diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index 95533c669ff7..824f556f758a 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -860,6 +860,12 @@ public final class WebViewCore { Rect mNativeLayerRect; } + static class WebKitHitTest { + int mType; + String mExtra; + Rect[] mTouchRects; + } + static class AutoFillData { public AutoFillData() { mQueryId = WebTextView.FORM_NOT_AUTOFILLABLE; @@ -1072,7 +1078,7 @@ public final class WebViewCore { static final int ADD_PACKAGE_NAME = 185; static final int REMOVE_PACKAGE_NAME = 186; - static final int GET_TOUCH_HIGHLIGHT_RECTS = 187; + static final int HIT_TEST = 187; // accessibility support static final int MODIFY_SELECTION = 190; @@ -1550,7 +1556,7 @@ public final class WebViewCore { break; case MODIFY_SELECTION: - String modifiedSelectionString = + String modifiedSelectionString = nativeModifySelection(mNativeClass, msg.arg1, msg.arg2); mWebView.mPrivateHandler.obtainMessage(WebView.SELECTION_STRING_CHANGED, @@ -1671,16 +1677,16 @@ public final class WebViewCore { (Set<String>) msg.obj); break; - case GET_TOUCH_HIGHLIGHT_RECTS: + case HIT_TEST: TouchHighlightData d = (TouchHighlightData) msg.obj; if (d.mNativeLayer != 0) { nativeScrollLayer(mNativeClass, d.mNativeLayer, d.mNativeLayerRect); } - ArrayList<Rect> rects = nativeGetTouchHighlightRects - (mNativeClass, d.mX, d.mY, d.mSlop); + WebKitHitTest hit = nativeHitTest(mNativeClass, + d.mX, d.mY, d.mSlop); mWebView.mPrivateHandler.obtainMessage( - WebView.SET_TOUCH_HIGHLIGHT_RECTS, rects) + WebView.HIT_TEST_RESULT, hit) .sendToTarget(); break; @@ -2335,9 +2341,9 @@ public final class WebViewCore { } // remove the touch highlight when moving to a new page - if (WebView.USE_WEBKIT_RINGS || getSettings().supportTouchOnly()) { + if (WebView.sDisableNavcache) { mWebView.mPrivateHandler.sendEmptyMessage( - WebView.SET_TOUCH_HIGHLIGHT_RECTS); + WebView.HIT_TEST_RESULT); } // reset the scroll position, the restored offset and scales @@ -2927,8 +2933,7 @@ public final class WebViewCore { private native boolean nativeValidNodeAndBounds(int nativeClass, int frame, int node, Rect bounds); - private native ArrayList<Rect> nativeGetTouchHighlightRects(int nativeClass, - int x, int y, int slop); + private native WebKitHitTest nativeHitTest(int nativeClass, int x, int y, int slop); private native void nativeAutoFillForm(int nativeClass, int queryId); private native void nativeScrollLayer(int nativeClass, int layer, Rect rect); |