diff options
| author | Chet Haase <chet@google.com> | 2013-03-26 01:59:22 +0000 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2013-03-26 01:59:22 +0000 |
| commit | 89d4c0f3cb88b6366f26b1745db78bcef3680831 (patch) | |
| tree | 5fd16414a69cf60f36fec99ef0f4437f8afe6ee2 /core/java/android/view/ViewGroup.java | |
| parent | 98157242e231d6415672dec751f81f8e32e43563 (diff) | |
| parent | 656ed307168ec2006108877a03788a31b15ebb78 (diff) | |
am 656ed307: am bc6c050f: Merge "Fix touch processing for Overlay views" into jb-mr2-dev
* commit '656ed307168ec2006108877a03788a31b15ebb78':
Fix touch processing for Overlay views
Diffstat (limited to 'core/java/android/view/ViewGroup.java')
| -rw-r--r-- | core/java/android/view/ViewGroup.java | 53 |
1 files changed, 28 insertions, 25 deletions
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 11e55106d5fb..d54ecc39a838 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -1878,13 +1878,37 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager // have become out of sync. removePointersFromTouchTargets(idBitsToAssign); + final float x = ev.getX(actionIndex); + final float y = ev.getY(actionIndex); + + if (mOverlay != null) { + ViewOverlay overlay = (ViewOverlay) mOverlay; + // Check to see whether the overlay can handle the event + final View child = mOverlay; + if (canViewReceivePointerEvents(child) && + isTransformedTouchPointInView(x, y, child, null)) { + newTouchTarget = getTouchTarget(child); + if (newTouchTarget != null) { + newTouchTarget.pointerIdBits |= idBitsToAssign; + } else { + resetCancelNextUpFlag(child); + if (dispatchTransformedTouchEvent(ev, false, child, + idBitsToAssign)) { + mLastTouchDownTime = ev.getDownTime(); + mLastTouchDownX = ev.getX(); + mLastTouchDownY = ev.getY(); + newTouchTarget = addTouchTarget(child, idBitsToAssign); + alreadyDispatchedToNewTouchTarget = true; + } + } + } + } + final int childrenCount = mChildrenCount; - if (childrenCount != 0 || mOverlay != null) { + if (newTouchTarget == null && childrenCount != 0) { // Find a child that can receive the event. // Scan children from front to back. final View[] children = mChildren; - final float x = ev.getX(actionIndex); - final float y = ev.getY(actionIndex); final boolean customOrder = isChildrenDrawingOrderEnabled(); for (int i = childrenCount - 1; i >= 0; i--) { @@ -1916,27 +1940,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager break; } } - if (mOverlay != null && newTouchTarget == null) { - // Check to see whether the overlay can handle the event - final View child = mOverlay; - if (canViewReceivePointerEvents(child) && - isTransformedTouchPointInView(x, y, child, null)) { - newTouchTarget = getTouchTarget(child); - if (newTouchTarget != null) { - newTouchTarget.pointerIdBits |= idBitsToAssign; - } else { - resetCancelNextUpFlag(child); - if (dispatchTransformedTouchEvent(ev, false, child, - idBitsToAssign)) { - mLastTouchDownTime = ev.getDownTime(); - mLastTouchDownX = ev.getX(); - mLastTouchDownY = ev.getY(); - newTouchTarget = addTouchTarget(child, idBitsToAssign); - alreadyDispatchedToNewTouchTarget = true; - } - } - } - } } if (newTouchTarget == null && mFirstTouchTarget != null) { @@ -1967,7 +1970,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager handled = true; } else { final boolean cancelChild = resetCancelNextUpFlag(target.child) - || intercepted; + || intercepted; if (dispatchTransformedTouchEvent(ev, cancelChild, target.child, target.pointerIdBits)) { handled = true; |
