diff options
author | Adam Powell <adamp@google.com> | 2012-09-04 19:49:13 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-09-04 19:49:13 -0700 |
commit | 4289b49dd580bd51b97b8e571b23aa00dbaec310 (patch) | |
tree | e8632d8212456ce53dac2fb441314d43086dfb59 | |
parent | 52da9fa7b53690c073b15d849d0d9befe47314f7 (diff) | |
parent | 9f3b0bfd0b1d8876c96036a303b3ff72df0e8ad0 (diff) | |
download | frameworks_base-4289b49dd580bd51b97b8e571b23aa00dbaec310.zip frameworks_base-4289b49dd580bd51b97b8e571b23aa00dbaec310.tar.gz frameworks_base-4289b49dd580bd51b97b8e571b23aa00dbaec310.tar.bz2 |
am 9f3b0bfd: DO NOT MERGE - Make WebView track focal points more accurately
* commit '9f3b0bfd0b1d8876c96036a303b3ff72df0e8ad0':
DO NOT MERGE - Make WebView track focal points more accurately
-rw-r--r-- | core/java/android/webkit/WebViewClassic.java | 43 | ||||
-rw-r--r-- | core/java/android/webkit/ZoomManager.java | 4 |
2 files changed, 31 insertions, 16 deletions
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java index d38c20b..0a9ab2b 100644 --- a/core/java/android/webkit/WebViewClassic.java +++ b/core/java/android/webkit/WebViewClassic.java @@ -1340,20 +1340,40 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc private void onHandleUiTouchEvent(MotionEvent ev) { final ScaleGestureDetector detector = - mZoomManager.getMultiTouchGestureDetector(); + mZoomManager.getScaleGestureDetector(); - float x = ev.getX(); - float y = ev.getY(); + int action = ev.getActionMasked(); + final boolean pointerUp = action == MotionEvent.ACTION_POINTER_UP; + final boolean configChanged = + action == MotionEvent.ACTION_POINTER_UP || + action == MotionEvent.ACTION_POINTER_DOWN; + final int skipIndex = pointerUp ? ev.getActionIndex() : -1; + + // Determine focal point + float sumX = 0, sumY = 0; + final int count = ev.getPointerCount(); + for (int i = 0; i < count; i++) { + if (skipIndex == i) continue; + sumX += ev.getX(i); + sumY += ev.getY(i); + } + final int div = pointerUp ? count - 1 : count; + float x = sumX / div; + float y = sumY / div; + + if (configChanged) { + mLastTouchX = Math.round(x); + mLastTouchY = Math.round(y); + mLastTouchTime = ev.getEventTime(); + mWebView.cancelLongPress(); + mPrivateHandler.removeMessages(SWITCH_TO_LONGPRESS); + } if (detector != null) { detector.onTouchEvent(ev); if (detector.isInProgress()) { mLastTouchTime = ev.getEventTime(); - x = detector.getFocusX(); - y = detector.getFocusY(); - mWebView.cancelLongPress(); - mPrivateHandler.removeMessages(SWITCH_TO_LONGPRESS); if (!mZoomManager.supportsPanDuringZoom()) { return; } @@ -1364,14 +1384,9 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } } - int action = ev.getActionMasked(); if (action == MotionEvent.ACTION_POINTER_DOWN) { cancelTouch(); action = MotionEvent.ACTION_DOWN; - } else if (action == MotionEvent.ACTION_POINTER_UP) { - // set mLastTouchX/Y to the remaining points for multi-touch. - mLastTouchX = Math.round(x); - mLastTouchY = Math.round(y); } else if (action == MotionEvent.ACTION_MOVE) { // negative x or y indicate it is on the edge, skip it. if (x < 0 || y < 0) { @@ -4357,7 +4372,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc // A multi-finger gesture can look like a long press; make sure we don't take // long press actions if we're scaling. - final ScaleGestureDetector detector = mZoomManager.getMultiTouchGestureDetector(); + final ScaleGestureDetector detector = mZoomManager.getScaleGestureDetector(); if (detector != null && detector.isInProgress()) { return false; } @@ -5764,7 +5779,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc * and the middle point for multi-touch. */ private void handleTouchEventCommon(MotionEvent event, int action, int x, int y) { - ScaleGestureDetector detector = mZoomManager.getMultiTouchGestureDetector(); + ScaleGestureDetector detector = mZoomManager.getScaleGestureDetector(); long eventTime = event.getEventTime(); diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java index 8830119..80a6782 100644 --- a/core/java/android/webkit/ZoomManager.java +++ b/core/java/android/webkit/ZoomManager.java @@ -204,7 +204,7 @@ class ZoomManager { */ private boolean mAllowPanAndScale; - // use the framework's ScaleGestureDetector to handle multi-touch + // use the framework's ScaleGestureDetector to handle scaling gestures private ScaleGestureDetector mScaleDetector; private boolean mPinchToZoomAnimating = false; @@ -768,7 +768,7 @@ class ZoomManager { return isZoomAnimating(); } - public ScaleGestureDetector getMultiTouchGestureDetector() { + public ScaleGestureDetector getScaleGestureDetector() { return mScaleDetector; } |