summaryrefslogtreecommitdiff
path: root/core/java/android/view/ViewGroup.java
diff options
context:
space:
mode:
authorChet Haase <chet@google.com>2013-03-26 01:59:22 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2013-03-26 01:59:22 +0000
commit89d4c0f3cb88b6366f26b1745db78bcef3680831 (patch)
tree5fd16414a69cf60f36fec99ef0f4437f8afe6ee2 /core/java/android/view/ViewGroup.java
parent98157242e231d6415672dec751f81f8e32e43563 (diff)
parent656ed307168ec2006108877a03788a31b15ebb78 (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.java53
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;