Skip to content

Commit 7a59c5a

Browse files
jreckAndroid (Google) Code Review
authored andcommitted
Merge "Always do a HIT_TEST" into jb-dev
2 parents 2faa075 + 41f73bd commit 7a59c5a

File tree

3 files changed

+27
-39
lines changed

3 files changed

+27
-39
lines changed

core/java/android/webkit/WebViewClassic.java

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1716,6 +1716,10 @@ public void setOverScrollMode(int mode) {
17161716
mZoomManager.updateDefaultZoomDensity(density);
17171717
}
17181718

1719+
/* package */ int getScaledNavSlop() {
1720+
return viewToContentDimension(mNavSlop);
1721+
}
1722+
17191723
/* package */ boolean onSavePassword(String schemePlusHost, String username,
17201724
String password, final Message resumeMsg) {
17211725
boolean rVal = false;
@@ -4338,10 +4342,6 @@ public void onDraw(Canvas canvas) {
43384342
}
43394343

43404344
private void removeTouchHighlight() {
4341-
if (mWebViewCore != null) {
4342-
mWebViewCore.removeMessages(EventHub.HIT_TEST);
4343-
}
4344-
mPrivateHandler.removeMessages(HIT_TEST_RESULT);
43454345
setTouchHighlightRects(null);
43464346
}
43474347

@@ -5816,7 +5816,6 @@ private void handleTouchEventCommon(MotionEvent event, int action, int x, int y)
58165816
switch (action) {
58175817
case MotionEvent.ACTION_DOWN: {
58185818
mConfirmMove = false;
5819-
mInitialHitTestResult = null;
58205819
if (!mEditTextScroller.isFinished()) {
58215820
mEditTextScroller.abortAnimation();
58225821
}
@@ -5838,23 +5837,6 @@ private void handleTouchEventCommon(MotionEvent event, int action, int x, int y)
58385837
}
58395838
} else { // the normal case
58405839
mTouchMode = TOUCH_INIT_MODE;
5841-
// TODO: Have WebViewInputDispatch handle this
5842-
TouchHighlightData data = new TouchHighlightData();
5843-
data.mX = contentX;
5844-
data.mY = contentY;
5845-
data.mNativeLayerRect = new Rect();
5846-
if (mNativeClass != 0) {
5847-
data.mNativeLayer = nativeScrollableLayer(mNativeClass,
5848-
contentX, contentY, data.mNativeLayerRect, null);
5849-
} else {
5850-
data.mNativeLayer = 0;
5851-
}
5852-
data.mSlop = viewToContentDimension(mNavSlop);
5853-
removeTouchHighlight();
5854-
if (!mBlockWebkitViewMessages && mWebViewCore != null) {
5855-
mWebViewCore.sendMessageAtFrontOfQueue(
5856-
EventHub.HIT_TEST, data);
5857-
}
58585840
if (mLogEvent && eventTime - mLastTouchUpTime < 1000) {
58595841
EventLog.writeEvent(EventLogTags.BROWSER_DOUBLE_TAP_DURATION,
58605842
(eventTime - mLastTouchUpTime), eventTime);

core/java/android/webkit/WebViewCore.java

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,8 +1143,6 @@ public class EventHub implements WebViewInputDispatcher.WebKitCallbacks {
11431143
static final int ADD_PACKAGE_NAME = 185;
11441144
static final int REMOVE_PACKAGE_NAME = 186;
11451145

1146-
static final int HIT_TEST = 187;
1147-
11481146
// accessibility support
11491147
static final int MODIFY_SELECTION = 190;
11501148

@@ -1648,18 +1646,6 @@ public void handleMessage(Message msg) {
16481646
(Set<String>) msg.obj);
16491647
break;
16501648

1651-
case HIT_TEST:
1652-
TouchHighlightData d = (TouchHighlightData) msg.obj;
1653-
if (d.mNativeLayer != 0) {
1654-
nativeScrollLayer(mNativeClass,
1655-
d.mNativeLayer, d.mNativeLayerRect);
1656-
}
1657-
WebKitHitTest hit = performHitTest(d.mX, d.mY, d.mSlop, true);
1658-
mWebViewClassic.mPrivateHandler.obtainMessage(
1659-
WebViewClassic.HIT_TEST_RESULT, hit)
1660-
.sendToTarget();
1661-
break;
1662-
16631649
case SET_USE_MOCK_DEVICE_ORIENTATION:
16641650
setUseMockDeviceOrientation();
16651651
break;
@@ -1792,6 +1778,15 @@ public boolean dispatchWebKitEvent(MotionEvent event, int eventType, int flags)
17921778
return false;
17931779
}
17941780
switch (eventType) {
1781+
case WebViewInputDispatcher.EVENT_TYPE_HIT_TEST:
1782+
int x = Math.round(event.getX());
1783+
int y = Math.round(event.getY());
1784+
WebKitHitTest hit = performHitTest(x, y,
1785+
mWebViewClassic.getScaledNavSlop(), true);
1786+
mWebViewClassic.mPrivateHandler.obtainMessage(
1787+
WebViewClassic.HIT_TEST_RESULT, hit).sendToTarget();
1788+
return false;
1789+
17951790
case WebViewInputDispatcher.EVENT_TYPE_CLICK:
17961791
return nativeMouseClick(mNativeClass);
17971792

core/java/android/webkit/WebViewInputDispatcher.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,11 @@ final class WebViewInputDispatcher {
203203
*/
204204
public static final int EVENT_TYPE_DOUBLE_TAP = 5;
205205

206+
/**
207+
* Event type: Indicates that a hit test should be performed
208+
*/
209+
public static final int EVENT_TYPE_HIT_TEST = 6;
210+
206211
/**
207212
* Flag: This event is private to this queue. Do not forward it.
208213
*/
@@ -499,13 +504,17 @@ private boolean isClickCandidateLocked(MotionEvent event) {
499504
}
500505

501506
private void enqueueDoubleTapLocked(MotionEvent event) {
502-
unscheduleClickLocked();
503-
hideTapCandidateLocked();
504507
MotionEvent eventToEnqueue = MotionEvent.obtainNoHistory(event);
505508
DispatchEvent d = obtainDispatchEventLocked(eventToEnqueue, EVENT_TYPE_DOUBLE_TAP, 0,
506509
mPostLastWebKitXOffset, mPostLastWebKitYOffset, mPostLastWebKitScale);
507510
enqueueEventLocked(d);
508-
mIsDoubleTapCandidate = false;
511+
}
512+
513+
private void enqueueHitTestLocked(MotionEvent event) {
514+
MotionEvent eventToEnqueue = MotionEvent.obtainNoHistory(event);
515+
DispatchEvent d = obtainDispatchEventLocked(eventToEnqueue, EVENT_TYPE_HIT_TEST, 0,
516+
mPostLastWebKitXOffset, mPostLastWebKitYOffset, mPostLastWebKitScale);
517+
enqueueEventLocked(d);
509518
}
510519

511520
private void checkForSlopLocked(MotionEvent event) {
@@ -545,6 +554,7 @@ private void updateStateTrackersLocked(DispatchEvent d, MotionEvent event) {
545554
mInitialDownX = event.getX();
546555
mInitialDownY = event.getY();
547556
scheduleShowTapHighlightLocked();
557+
enqueueHitTestLocked(event);
548558
} else if (action == MotionEvent.ACTION_UP) {
549559
unscheduleLongPressLocked();
550560
if (isClickCandidateLocked(event)) {
@@ -824,6 +834,7 @@ private boolean shouldSkipWebKit(int eventType) {
824834
case EVENT_TYPE_CLICK:
825835
case EVENT_TYPE_HOVER:
826836
case EVENT_TYPE_SCROLL:
837+
case EVENT_TYPE_HIT_TEST:
827838
return false;
828839
case EVENT_TYPE_TOUCH:
829840
return !mPostSendTouchEventsToWebKit

0 commit comments

Comments
 (0)