summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/webkit/WebSettings.java15
-rw-r--r--core/java/android/webkit/WebView.java57
-rw-r--r--core/java/android/webkit/WebViewCore.java25
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);